TCP/IP网际层协议 TCP/IP协议栈的网际层提供寻址和路由选择协议,路由器主要工作在该层。TCP/IP协议栈 的网际层对应OSI参考模式的网络层,该层主要运行几个协议。 网际协议(IP):对数据包进行非连接的最佳路由选择,它不关心数据包的内容,只选择一个 路径将数据包送到目的地。 网际控制报文协议(ICMP):提供控制和传递信息的功能。 地址解析协议(ARP):由已知的IP地址确定数据链路层的MAC地址。 反向地址解析协议(RARP):有已知的数据链路层确定IP地址。 动态主机配置协议(DHCP):将IP地址和一些TCP/IP配置分配给网络中的计算机的一向服务 协议。 IP 在TCP/IP协议栈,IP主要负责逻辑寻址。通过相应管理机制。可以使不同设备之间利用IP 地址进行通信。 IP头格式 IP数据包由IP头和数据组成。
数据包的的大小、网络MTU及TCP最大报文段长度 下面介绍数据包分片、网络MTU、TCP最大报文段长度等概念,以加深读者对TCP/IP协议 栈的理解。 数据包的分片 数据包是被封装在物理帧中传输的,对于网络硬件来说,他们对一个物理帧的可传输数据 量都规定了一个上限值,这个上限值就是最大传输单元,即数据包的MTU(Maximum Transfer Unit)。例如,源于令牌环网的数据包最大传输单元(MTU)为4500字节,而以太网的数据包 最大传输单元为1500字节,FDDI的数据包最大传输单元为4770字节。如果数据包的大小 比互联网中最大的MTU要大,它是无法被封装到帧中去的;相反如果数据包的大小被限制 为互联网中最小网络的MTU,这种做法也是很不经济(因为在大MTU的网络上,会造成带宽 浪费)。 TCP/IP泽洋选择数据包的MTU呢?主要有一下两点。 TCP/IP选择接近相连网络的MTU值为初始数据包大小,例如,某台主机连接在以太网上, 那么TCP/IP会选择某个接近1500字节的值为初始数据包(如1400、1440、1480等)。 为什么会选择诸如1400这样的数值呢?因为IP数据包以8倍数的字节数表示数据包的段位 移所以数据包大小肯定是8的倍数。 TCP/IP同时也提供了一种机制:在MTU较小的网络上,可以把大数据包划分成更小的数据 包片(分片),即如果TCP选择初始数据包大小为1500字节,在中途有个MTU为620的网络 处于两种网络薄片(分片),处于两种网络分界处的路由器会对数据包进行分片操作。 IP报头中的标志和段位移就是用于将大IP包分割成几个称为片的小块,以保证它可以顺利 通过物理处理大IP包的网络。其中,标识是发送端填写的值,以便接收端重组那些不得不 分成几个片的包;段位移可以标识出每个分段偏移量,从而使目的的系统可以正确地重组 原来数据包。 这种分片不一定要把数据包分成限制大小的片,首先选择最接近网络MTU的8倍数的字节数 为数据包大小;一般最后一片是前面分下来的零头,所以最后一片往往比其他片小。 分片以后所得的每个数据包的格式都与原来的数据包相同,都包含了原来数据包的IP报头 数据包片的总长度(报头+数据)小于网络MTU。 源站点选择了1500字节作为数据包大小(20+1480,其中20为IP报头长度),每个数据包 经过两种网络的边界路由器时,被分成3片,每片的大小都小于或等于620字节,这样数据 包就可以顺利地通过整个网络。那么数据包分片以后怎样重组呢?下面就来讨论这个问题。 数据包分片后的重组 首先强调一点,数据包分片后的重组是发生分片到达目标主机之后,而不是在通过MTU 较小的网络之后的网络,重组依然发生在分片到达目标主机之后。如果在传输过程中某个 分片丢失了,目标主机将丢弃整个包,所以分片增加了数据包丢失的概率,应尽量避免数 据包分片。 虽然在目标主机上重组数组包片存在一些缺点,但是每个数据包片可以像数据包一样选择 路由(可以在多路坏境了实习那覆载平衡),即数据包的一部分分片走链路1。另一部分走 链路2,而且路由器不负担数据包片的重组工作也有利于减轻路由器负担。 TCP最大报文段长度 前面讲到传输层的TCP要对应用层生成的数据流进行分段,通信双方必须协商一个最大的 报文段长度(Maximum Segment Size)。一帮情况下TCP自动计算机选择合适的报文段长度, 使IP数据包与网络MTU相适应。 在互联网中选择合适报文段长度是很困难的,过大或者过小都会是网络性能变坏。一方面, 报文段太小会减低网络利用率。因为TCP报文段是封装在IP数据包又被封装在帧中,每一 层的封装都要加上自己的头部信息或尾部信息,如果报文段很小,每一层的头部或尾部信息 在数据帧中所占有的比重就大,这势必造成带宽的浪费。 另一方面,报文段也会降低网络性能。大的报文段产生了大的数据包,如果网络中存在MTU 较小的网路,TCP/IP就会对数据包进行分片。由于数据包片并不像数据段那样能进行与重 传,如果某个数据包在传输过程中丢失了,那么整个数据包就要被重传,如果数据包分片 太多,势必会影响网络性能。 理论上讲,TCP报文段最佳长度的要求是;尽可能携带更多的数据,而且IP数据包在传输 过程中尽量不要分片。这个要求只是理论要求,在真正实现时,还会遇到更多问题。 |
|