《TCP/IP详解:卷一》第1章:概述

TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目。

分层:

网络协议通常分不同层次进行开发,每一次负责不同的通信功能。TCP/IP通常通常被认为是一个四层协议系统。

简要说一下每一层的功能:

链路层:

也称数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。他们一起处理与物理传输介质的接口细节。

##网络层:
也称互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),IGMP(Internet组管理协议)。

运输层:

主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。

应用层:

负责处理特定的应用程序细节。几乎各种不同的TCP/IP都会提供下面这些通用的应用程序:

  • Telnet远程登录
  • FTP文件传输协议
  • SMTP简单邮件传输协议
  • SNMP简单网络管理协议

在同一层上,通信双方都有对应的一个或多个协议进行通信。

应用层应用程序通常是一个用户进程,而下三层则一般在操作系统内核中执行。

网络层与应用层的目的很明显,但网络层与运输层的区别不是很明显,为了解答这个问题,我们必须把视野从单个网络扩展到一组网络。

一个互联网就是一组通过相同的协议族互联在一起的网络。

构建网络最简单的方法就是用路由器将两个或多个网络连接。路由器的好处是为不同类型的物理网络进行连接:以太网,令牌环网,点对点的链接和FDDI(光纤分布式数据接口)等等。

下图是一个以太网,一个令牌环网两个网络的互联网,通过路由器连接。尽管图中看起来是两个主机通过路由器进行通信,但实质上以太网中的任何主机都能和令牌环网中的任何主机通信。

我们可以划分出端系统(两边的主机)和中间系统(中间路由器)。应用层和运输层运用的是端到端的协议。在图中只有端系统需要这两层协议。网络层提供的却是逐跳协议,两个端系统和中间系统都要使用它。

TCP/IP协议族中网络层IP提供的是一种不可靠的服务,也就是说,它只是尽可能快的将分组从源结点送到目的结点,不提供任何可靠性保证。但TCP在不可靠的IP层上提供了一个可靠地运输层,为了提供这种可靠地服务,TCP采用了超时重传,发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。

连接网络的另一个途径是使用网桥。网桥是在链路层对网络进行互连,而路由器是在网络层对网络进行互连。 TCP/IP倾向于使用路由器而不是使用网桥来连接网络。

TCP/IP的分层

虽然TCP 使用的是不可靠的IP服务,但它却提供了一种可靠地运输层服务。

UDP 为应用程序发送和接收数据报。一个数据报 是指从发送方传输到接收方的一个信息单元。

IP 是网络层上的主要协议,同时被TCP,UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中传输。在图中,我们给出了一个直接访问IP的应用程序。这很少见但也是有可能的。

ICMP 是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。尽管ICMP主要被IP所使用,但应用程序也有可能访问它。ping和Traceroute,他们都使用了ICMP。

IGMP internet组管理协议。它用来把一个UDP数据报多播到多个主机。

ARP(地址解析协议)和RARP(逆地址解析协议) 是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。

#互联网地址
IP地址长32bit。

多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。

有三类IP地址:单播地址 (目的端为单个主机)、广播地址 (目的端为给定网络上的所有主机)、多播地址(目的端为同一组内的所有主机)。

域名系统

域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。

任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的IP地址。类似的系统还提供一个逆函数—给定主机的IP地址,查看它所对应的主机名。

封装

当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当做一串比特流送入网络。每一层对收到的数据都要增加一些首部信息(有时候还加尾部)。如图:

以太网数据帧的物理特性使其长度必须在46~1500字节之间。

由于TCP,UDP,ICMP,IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入标识,以表明数据属于哪一层。为此,IP在首部中存入一个长度为8bit的数值,称作**协议域。1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。

类似,许多应用程序都可以使用TCP或者UDP来传送数据。运输层协议在生成报文首部的时候要存入一个应用程序的标识符。TCP和UDP都使用一个16bit的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。

网络接口分别要发送和接收IP,ARP,RARP数据,因此也需要在以太网帧首部加入标识以指明生成数据的网络层协议。所以以太网帧首部也有一个16bit的帧类型域。

#分用
目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层都要检查报文首部的协议标识以确定接收数据的上层协议,这个过程叫做分用。

客户-服务器模型

两种类型:

  • 重复型:
    • 等待用户请求
    • 处理用户请求
    • 发送响应给发送请求的用户
    • 返回第一步

问题在第二步,这个时候他不能为其他的客户机提供服务。

  • 并发型:
    • 等待用户请求
    • 启动一个新的服务器来处理这个用户的请求。在这期间可能生成一个新的进程,任务或线程,并依赖底层操作系统的支持。这个步骤如何进行取决与操作系统。生成的新服务器对客户的全部请求进行处理。处理结束后终止这个服务器。
    • 返回第一步。

每个用户都有自己的服务器。如果操作系统允许多任务,那么就可以同时为多个用户服务。


一般来说,TCP服务器是并发的,UDP服务器是重复的,但也存在一些例外

端口号

TCP和UDP用16bit的端口号来识别应用程序。

服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP端口号都为21,每个Telnet服务器的TCP端口号都是23,TFTP的UDP端口号为69。

大多数TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其它服务器预留的(Internet上不常用的服务)。

应用编程接口

TCP/IP协议的应用程序通常采用两种API:socket和TLI(运输层接口)。

感谢阅读,欢迎指正。

-------------本文结束感谢您的阅读-------------