尽管OSI 参考模型得到了全世界的认同,但是因特网历史上和技术上的开发标准都是TCP/IP模型(传输控制协议/网际协议,Transmission Control Protocol/Internet Protocol)。
  从网络设备厂商的研发部门,到各个系统集成公司工程师的桌面,总能发现TCIP/IP详解一类的书籍。TCP/IP技术的学习似乎研究和管理网络的一项业内行规,如果你坐在地铁或公交车上,手里抱着一本TCP/IP分析的书本,我们能预知你的明天是光明的,并且有可能是辉煌的。

TCP/IP模型概述
  TCP/IP起源于20世纪60年代末美国政府资助的一个网络分组交换研究项目,TCP/IP是发展至今最成功的通信协议,它被用于当今所构筑的最大的开放式网络系统Internet之上。
  
   TCP和IP是两个独立且紧密结合的协议,负责管理和引导数据报文在Internet上的传输。二者使用专门的报文头定义每个报文的内容。TCP负责和 远程主机的连接,IP负责寻址,使报文被送到其该去的地方。TCP/IP也分为不同的层次开发,每一层负责不同的通信功能。但TCP/IP简化了层次设备 (只有4层),由下而上分别为网络接口层、网络层、传输层、应用层,如图1-17所示。
  
   
图1-17  TCP/IP分层与OSI对应关系

    
    由于TCP/IP是OSI模型之前的产物,所以两者间不存在严格的层对应关系。在TCP/IP模型中并不存在与OSI中的物理层与数据链路层相对应的部 分,相反,由于TCP/IP的主要目标是致力于异构网络的互连,所以同OSI中的物理层与数据链路层相对应的部分没有进行任何限定。在表1-3列出了 TCP/IP每一层所执行的服务功能和协议。
  
    表1-3  TCP/IP模型各层描述
 
   
   
应用层
定义了TCP/IP应用协议及主机程序与要使用网络的传输层服务之间的接口
HTTP、Telnet、FTP、TFTP、SNMP、DNS、SMTP、X-Windows以及其他应用协议
传输层
提供主机之间的通信会话管理。定义了传输数据时的服务级别和连接状态
TCP、UDP、RTP
Internet层
将数据装入IP数据报,包括用于在主机间及经过网络转发数据报时所用的源和目标的地址信息。实现IP数据报的路由
IP、ICMP、ARP、RARP
网络接口层
详细指定如何通过网络实际发送数据,包括直接与网络媒体(如同轴电缆、光纤或双绞铜线)接触的硬件设备如何将比特流转换成电信号
以太网、令牌环、FDDI、X.25、帧中继、RS-232、v.35

    
    TCP/IP的标准是在名为Requests for Comments(RFC)的系列文档中发布的。RFC描述Internet的内部运行。TCP/IP 标准总是以RFC的形式发布,但并非所有RFC都是标准的。一些RFC只提供情报信息、实验信息或历史信息。
  
  RFC最初以 Internet草案的形式拟定;它们通常由IETF职能小组中的一个或多个创作者开发。IETF职能小组是由一些在TCP/IP套件的某一技术领域中具 有特定职责的个人所组成的团队。IETF将以RFC的形式发布Internet草案的最终版本,并为其分配一个RFC编号。

网络接口层中的协议
  
  网络接口层又称为“网络访问层”,主要负责向网络媒体发送TCP/IP数据包并从网络媒体接收TCP/IP数据包。TCP/IP独立于网络访问方法、帧格式和媒体,可以使用TCP/IP接口层技术组织以太网、无线LAN和WAN网络之间进行通信。
  
  TCP/IP支持的网络接口类型包括:标准以太网、令牌环、串行线路网际协议(SLIP)FDDI、串行光学、ATM、点对点协议(PPP)、虚拟IP地址等。网络接口层技术将在本书后续章节详细介绍。

Internet层中的协议
  
  Internet层的职责包括寻址、打包和路由功能。Internet 层与 OSI 模型的网络层类似。Internet 层包含ARP、IP(IPv4、IPv6)、ICMP、IGMP协议,下面将详细地介绍每一种协议。
  
  1.地址解析协议(ARP)
   ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。ARP 把IP 地址解析成 LAN 硬件使用的媒体访问控制地址。IP数据包常通过以太网发送,但以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,必须 把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获 得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为目标硬件地址(MAC地址),以保证通信的顺利进行。
  
   RARP协议,即“Reverse Address Resolution Protocol”(反向地址解析协议)的缩写,RARP负责将主机的物理地址转换为IP地址。例如,局域网中有一台主机只知道物理地址而不知道IP地 址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。ARP和RARP使用相同的报头结构,如图1-18所示。
  
   图1-18  ARP/RARP报头结构
  
硬件类型
协议类型
硬件地址长度
协议长度
操作类型
发送方的硬件地址(0~3字节)
源物理地址(4~5字节)
源IP地址(0~1字节)
源IP地址(2~3字节)
目标硬件地址(0~1字节)
目标硬件地址(2~5字节)
目标IP地址(0~3字节)


   
   另外,为使广播量最小,ARP维护IP地址到媒体访问控制地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。静态项目一直保留在缓存中,直到重新启动计算机为止。
  
   每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中 删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。在工作 站PC的Windows环境中,可以使用命令“arp-a”查看当前的ARP缓存,如图1-19所示。在路由器和交换机中可以用show arp完成相同的功能。
  
  下面举个例子:ARP和RARP协议的工作原理。两个位于同一个物理网络上运行TCP/IP的主机,如图1-20所示,主机A和主机B。主机A分配的IP地址是192.168.1.1,主机B分配的IP地址是192.168.1.2。
  
图1-19  查看ARP缓存

   
   
图1-20  ARP工作原理解析

    
    当主机A要与主机B通信时,以下步骤可以将主机B软件指定的地址(192.168.1.2)解析成主机B硬件指定的媒体访问控制地址。
  
  第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配硬件地址。
  
   第2步:如果主机A在缓存中没有找到映射,它将询问“192.168.1.2的硬件地址是什么?”从而将ARP请求帧广播到本地网络上的所有主机。源主 机A的硬件和软件地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机未找到匹配值,它将丢弃 ARP请求。
  
  第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,将主机的硬件/软件地址映射添加到本地ARP缓存中。
  
  第4步:主机B将包含其硬件地址的ARP回复消息直接发送回主机A。
  第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的硬件/软件地址映射更新ARP缓存。主机B的媒体访问控制地址一旦确定,主机A就能向主机B发送IP通信,为它找到主机的媒体访问控制地址。

2.Internet协议(IP)
  
  IP是一个数据报协议,它主要负责在主机之间为数据包进行寻址和路由。但IP是无连接的协议,这意味着它在交换数据之前不建立连接,所以IP也是不可靠的,这意味着它不能保证数据包的正确传送。
  
  IP总是尽“最大努力”来尝试传送数据包,但IPv4数据包可能会丢失、错序发送、重复或延迟,所以需要更高层协议(例如,TCP或某个应用协议)必须能够确认所传送的数据包并根据需要恢复丢失的数据包。图1-21显示了IP数据包头部结构。
    图1-21  IP数据包头部信息
版本
头部长度
服务类型
总长度
标识
分段标志
分段偏移量
生存时间
协议
校验和
源地址
目标地址
选项
填充
数据
  
    
    IP数据包头各部分解释如下。
    * 版本:用于传输数据的IP版本,大小为4位。
    * 头部长度:用于规定报头长度。
    * 服务类型:用于设置数据传输的优先权或者优先级,其大小为8位。
    * 总长度:指出数据报的总长,数据报总长=报头长度+数据长度,大小为16位。
    * 标识:用于标识所有的分段,大小为16位。
    * 分段标志:确定一个数据报是否可以分段,同时也指出当前分段后面是否还有更多分段,大小为3位。
    * 分段偏移量:由目标计算机用于查找分段在整个数据报中的位置,大小位13位。
    * 生存时间:在路由器丢弃数据报之前允许数据报通过的网段数;TTL 是由发送主机设置的;路由器在转发 IPv4 数据包时会使 TTL 递减 1,此字段用于防止数据包在 IPv4 网络中无休止地循环传播,长度为8位。
    * 协议:指定用于创建数据字段中的数据的上层协议,大小为8位。
    * 校验和:检查所传输数据的完整性,大小为16位。
    * 源地址:源IP地址,字段长度为32位。
    * 目标地址:目标IP地址,字段长度为32位。
    * 选项:不止一个必须的字段,字段长度具体取决于所选择的IP选项。
    * 数据:包含网络中传输的数据,IP数据报还包括上层协议的报头信息。

3.Internet控制消息协议(ICMP)
  ICMP全称是Internet Control Message Protocol,中文名为Internet控制消息协议。ICMP负责向数据通信中的源主机报告错误,可以实现故障隔离和故障恢复。
  
   网络本身并不是十分可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。前面说到的IP是一个无连接的协议,它不会处理网络层传输中 的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺陷,它使用IP进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。另外,通过 ICMP,使用IP通信的主机和路由器可以报告错误并交换受限控制和状态信息。
  
  在下列情况中,通常自动发送ICMP消息:
    * IP数据报无法访问目标。
    * IP路由器(网关)无法按当前的传输速率转发数据报。
    * IP路由器将发送主机重定向为使用到达目标的更佳路由。
  在IP数据包中封装和发送ICMP消息,如图1-22所示。
  
图1-22  ICMP在IP数据包封装

    
    这里需要注意:由于ICMP 消息是在 IP 数据包中携带的,因此也是不可靠的。不同类型的 ICMP 消息在 ICMP 报头中标识,表1-4列出并说明最常见的 ICMP 消息类型。
  
    表1-4  ICMP消息类型
   
ICMP消息
   
请求回显
确定IP节点(主机或路由器)能否在网络上使用
回显答复
回复ICMP回显请求
无法连接目标
通知主机数据报无法传递
源结束
通知主机由于拥塞而降低发送数据报的速率
重定向
通知首选路由的主机
超时
指明IP数据报的生存时间(TTL)已到期


    
    网络管理员经常使用Ping命令发送ICMP回显请求消息并记录收到ICMP回显答复消息。使用这些消息,可以检测网络或主机通信故障并解决常见的TCP/IP连接问题。

4.Internet组管理协议(IGMP)
  
  IGMP全称是Internet Group Multicast Protocol,中文名为Internet组管理协议。该协议运行于主机和与主机直接相连的组播路由器之间,是IP主机用来报告多址广播组成员身份的协 议。通过IGMP,一方面可以通过IGMP主机通知本地路由器希望加入并接收某个特定组播组的信息。另一方面,路由器通过IGMP周期性地查询局域网内某 个已知组的成员是否处于活动状态。
  
  IGMP的主要作用是解决网络上广播时占用带宽的问题。在网络中,当给所有客户端发出广播信息时,支持IGMP的交换机会将广播信息不经过滤地发给所有客户端。但是这些信息只需要通过组播的方式传输给某一个部分的客户端。
  
传输层中的协议
  传输层(又称主机到主机传输层)为应用层提供会话和数据报通信服 务。传输层承担OSI传输层的职责。传输层的核心协议是TCP和UDP。TCP提供一对一的、面向连接的可靠通信服务。TCP建立连接,对发送的数据包进 行排序和确认,并恢复在传输过程中丢失的数据包。与TCP不同,UDP提供一对一或一对多的、无连接的不可靠通信服务。
  
  不论是TCP/IP还是在OSI参考模型中,任意相邻两层的下层为服务提供者,上层为服务调用者。下层为上层提供的服务可分为两类:面向连接服务和无连接服务。
   1)面向连接的网络服务
  面向连接的网络服务又称为虚电路(Virtual Circuit)服务,它具有网络连接建立、数据传输和网络连接释放三个阶段。是按顺序传输可靠的报文分组方式,适用于指定对象、长报文、会话型传输要求。
  
   面向连接服务以电话系统为模式。要和某个人通话,首先拿起电话,拨号码,通话,然后挂断。同样在使用面向连接的服务时,用户首先要建立连接,使用连接, 然后释放连接。连接本质上像个管道:发送者在管道的一端放入物体,接收者在另一端按同样的次序取出物体;其特点是收发的数据不仅顺序一致,而且内容也相 同。
   2)无连接的网络服务
  无连接网络服务的两实体之间的通信不需要事先建立好一个连接。无连接网络服务有3种类型:数据报(Datagram)、确认交付(Confirmed Delivery)与请求回答(Request reply)。
   无连接服务以邮政系统为模式。每个报文(信件)带有完整的目的地址,并且每一个报文都独立于其他报文,由系统选定的路线传递。在正常情况下,当两个报文 发往同一目的地时,先发的先到。但是,也有可能先发的报文在途中延误了,后发的报文反而先收到;而这种情况在面向连接的服务中是绝对不可能发生的。
传输控制协议(TCP)
  
  TCP全称是Transmission Control Protocol,中文名为传输控制协议,它可以提供可靠的、面向连接的网络数据传递服务。传输控制协议主要包含下列任务和功能:
* 确保IP数据报的成功传递。
* 对程序发送的大块数据进行分段和重组。
* 确保正确排序及按顺序传递分段的数据。
* 通过计算校验和,进行传输数据的完整性检查。
* 根据数据是否接收成功发送肯定消息。通过使用选择性确认,也对没有收到的数据发送否定确认。
* 为必须使用可靠的、基于会话的数据传输程序,如客户端/服务器数据库和电子邮件程序,提供首选传输方法。
   1)TCP包的结构
  TCP数据包头部总长最小为20字节,其结构如图1-23所示。
  
图1-23  TCP数据包头部结构
* 源端口:指定了发送端的端口。
* 目的端口:指定了接受端的端口号。
* 序列号:指明了段在即将传输的段序列中的位置。
* 确认号:规定成功收到段的序列号,确认序号包含发送确认的一端所期望收到的下一个序号。
* TCP偏移量:指定了段头的长度。段头的长度取决于段头选项字段中设置的选项。
* 保留:指定了一个保留字段,以备将来使用。
* 标志:SYN(表示同步)、ACK(表示确认)、PSH(表示尽快地将数据送往接收进程)、RST(表示复位连接)、URG(表示紧急指针)、FIN(表示发送方完成数据发送)。
* 窗口:指定关于发送端能传输的下一段大小的指令。
* 校验和:校验和包含TCP段头和数据部分,用来校验段头和数据部分的可靠性。
* 紧急:指明段中包含紧急信息,只有当URG标志置1时紧急指针才有效。
* 选项:指定了公认的段大小,时间戳,选项字段的末端,以及指定了选项字段的边界选项。
   2)TCP工作原理
   TCP的连接建立过程又称为TCP三次握手。首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求;接收方主机在收到这个请求后向发送方主 机回复一个同步/确认(SYN/ACK)应答;发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立,如图1-24所示。
  
  一旦初始的三次握手完成,在发送和接收主机之间将按顺序发送和确认段。关闭连接之前,TCP使用类似的握手过程验证两个主机是否都完成发送和接收全部数据。TCP工作过程比较复杂,包括的内容如下。
  
* TCP连接关闭:发送方主机和目的主机建立TCP连接并完成数据传输后,会发送一个将结束标记置1的数据包,以关闭这个TCP连接,并同时释放该连接占用的缓冲区空间。
* TCP重置:TCP允许在传输的过程中突然中断连接。
* TCP数据排序和确认:在传输的过程中使用序列号和确认号来跟踪数据的接收情况。
* TCP重传:在TCP的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方。
* TCP延迟确认:TCP并不总是在接收到数据后立即对其进行确认,它允许主机在接收数据的同时发送自己的确认信息给对方。
* TCP数据保护(校验和):TCP是可靠传输的协议,它提供校验和计算来实现数据在传输过程中的完整性。
   3)TCP与端口号
  TCP和UDP都是IP层的传输协议,是IP与上层之间的处理接口。TCP和UDP端口号被设计来区分运行在单个设备上的多重应用程序的IP地址。由于同一台计算机上可能会运行多个网络应用程序,所以计算机需要确保目标计算机上接收源主机数据包的软件应用程序的正确性,以及响应能够被发送到源主机的正确应用程序上。该过程正是通过使用TCP或UDP端口号来实现的。
  
  在TCP和UDP头部分,有“源端口”和“目标端口”段,主要用于显示发送和接收过程中的身份识别信息。IP 地址和端口号合在一起被称为“套接字”。TCP端口比较复杂,其工作方式与UDP端口不同。UDP端口对于基于UDP的通信作为单一消息队列和网络端点来操作,而所有TCP通信的终点都是唯一的连接。每个TCP连接由两个端点唯一识别。由于所有TCP连接由两对 IP 地址和TCP端口唯一识别(每个所连主机都有一个地址/端口对),因此每个TCP服务器端口都能提供对多个连接的共享访问,如图1-25所示。
  
  
 图1-24  TCP建立连接 
  
  
  图1-25  TCP程序使用保留或已知的端口号
  
  IETF IANA定义了3种端口组。
* 公认端口(Well Known Ports)从0~1023。
* 注册端口(RegisteredPorts
* )从1024~49151。
* 动态和/或专用端口(Dynamic and/or Private Ports)从49152~65535。
  所有小于1024(当然,也有一些更高的数)的TCP服务器端口号都是Internet号码指派机构(IANA)保留和注册的。

2.用户数据报协议(UDP)
  UDP全称是User Datagram Protocol,中文名为用户数据报协议。UDP 提供无连接的网络服务,该服务对消息中传输的数据提供不可靠的、最大努力传送。这意味着它不保证数据报的到达,也不保证所传送数据包的顺序是否正确。UDP数据包的头部结构如图1-26所示。
 
 
源端口
目的端口
用户数据包的长度
校验和
数据
 图1-26  UDP数据包头部结构
  (1)源、目的端口:作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。
  (2)用户数据包的长度:标明UDP头部和UDP数据的总长度字节。
  (3)校验和:用来对UDP头部和UDP数据进行校验。
  
  提示:这里与TCP是不同的,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。
  
   要使用UDP,应用程序必须提供源和目标应用程序的IP地址和UDP端口号。尽管某些UDP端口和TCP端口使用相同的编号,但这两种端口是截然不同且 相互独立的。与TCP端口一样,1024以下的UDP端口号是由IANA分配的端口。表1-5列出了一些常用的UDP端口。
  
表1-5  UDP常见端口号
 
UDP端口号
   
53
DNS 名称查询
69
TFTP简单文件传输协议
137
NetBIOS 名称服务
138
NetBIOS 数据报服务
161
简单网络管理协议(SNMP)
520
路由信息协议(RIP)
 
  也许你会问:“既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?”其实不然,在有些情况下UDP可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大地降低了执行时间,使速度得到了保证。
应用层中的协议
  
  应用层允许应用程序访问其他层的服务,它定义了应用程序用来交换数据的协议。应用层包含大量的协议,而且人们一直在开发新的协议。人们最熟悉的那些应用层协议可以帮助用户交换信息。
  
* 超文本传输协议(HTTP):用于传输那些构成万维网上的页面的文件。
* 文件传输协议(FTP):用于传输独立的文件,通常用于交互式用户会话。
* 简单邮件传输协议(SMTP):用于传输邮件和附件。
* 域名系统(DNS):用于将主机名称(例如,www.microsoft.com)解析为IP地址并在DNS服务器之间复制名称信息。
* 路由信息协议(RIP):是路由器用来在 IP 网络上交换路由信息的协议。
* 简单网络管理协议(SNMP):用于收集网络管理信息并在网络管理控制台和网络设备(例如,路由器、网桥和服务器)之间交换网络管理信息。