TCP/IP模型概述
TCP和IP是两个独立且紧密结合的协议,负责管理和引导数据报文在Internet上的传输。二者使用专门的报文头定义每个报文的内容。TCP负责和远程主机的连接,IP负责寻址,使报文被送到其该去的地方。TCP/IP也分为不同的层次开发,每一层负责不同的通信功能。但TCP/IP简化了层次设备(只有4层),由下而上分别为网络接口层、网络层、传输层、应用层,如图1-17所示。
表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 层与 OSI 模型的网络层类似。Internet 层包含ARP、IP(IPv4、IPv6)、ICMP、IGMP协议,下面将详细地介绍每一种协议。
1.地址解析协议(ARP)
RARP协议,即“Reverse Address Resolution Protocol”(反向地址解析协议)的缩写,RARP负责将主机的物理地址转换为IP地址。例如,局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。ARP和RARP使用相同的报头结构,如图1-18所示。
硬件类型 |
协议类型 | |
硬件地址长度 |
协议长度 |
操作类型 |
发送方的硬件地址(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步:根据主机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。
IP是一个数据报协议,它主要负责在主机之间为数据包进行寻址和路由。但IP是无连接的协议,这意味着它在交换数据之前不建立连接,所以IP也是不可靠的,这意味着它不能保证数据包的正确传送。
IP总是尽“最大努力”来尝试传送数据包,但IPv4数据包可能会丢失、错序发送、重复或延迟,所以需要更高层协议(例如,TCP或某个应用协议)必须能够确认所传送的数据包并根据需要恢复丢失的数据包。图1-21显示了IP数据包头部结构。
版本 |
头部长度 |
服务类型 |
总长度 | |
标识 |
分段标志 |
分段偏移量 | ||
生存时间 |
协议 |
校验和 | ||
源地址 | ||||
目标地址 | ||||
选项 |
填充 | |||
数据 |
* 版本:用于传输数据的IP版本,大小为4位。
* 头部长度:用于规定报头长度。
* 服务类型:用于设置数据传输的优先权或者优先级,其大小为8位。
* 总长度:指出数据报的总长,数据报总长=报头长度+数据长度,大小为16位。
* 标识:用于标识所有的分段,大小为16位。
* 分段标志:确定一个数据报是否可以分段,同时也指出当前分段后面是否还有更多分段,大小为3位。
* 分段偏移量:由目标计算机用于查找分段在整个数据报中的位置,大小位13位。
* 生存时间:在路由器丢弃数据报之前允许数据报通过的网段数;TTL 是由发送主机设置的;路由器在转发 IPv4 数据包时会使 TTL 递减 1,此字段用于防止数据包在 IPv4 网络中无休止地循环传播,长度为8位。
* 协议:指定用于创建数据字段中的数据的上层协议,大小为8位。
* 校验和:检查所传输数据的完整性,大小为16位。
* 源地址:源IP地址,字段长度为32位。
* 目标地址:目标IP地址,字段长度为32位。
* 选项:不止一个必须的字段,字段长度具体取决于所选择的IP选项。
* 数据:包含网络中传输的数据,IP数据报还包括上层协议的报头信息。
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连接问题。
IGMP全称是Internet Group Multicast Protocol,中文名为Internet组管理协议。该协议运行于主机和与主机直接相连的组播路由器之间,是IP主机用来报告多址广播组成员身份的协议。通过IGMP,一方面可以通过IGMP主机通知本地路由器希望加入并接收某个特定组播组的信息。另一方面,路由器通过IGMP周期性地查询局域网内某个已知组的成员是否处于活动状态。
IGMP的主要作用是解决网络上广播时占用带宽的问题。在网络中,当给所有客户端发出广播信息时,支持IGMP的交换机会将广播信息不经过滤地发给所有客户端。但是这些信息只需要通过组播的方式传输给某一个部分的客户端。