《网络协议》IP 分片与 TCP 分段

最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。数据链路层中的网络对数据帧的长度都有一个限制,不同网络的 MTU 值不同,常用的以太网为 1500 个字节。

若在 IP 层要传输的数据报大小比链路层的 MTU 还大,那么 IP 层就会对这个数据报进行分片。一个数据报会被分为若干片,每个分片的大小都小于或者等于链路层的 MTU 值。

IP 数据报分片以后,只有到达目的地才进行重新组装(这里的重新组装是达到目的地才组装,而不像其他网络协议在下一站就进行重新组装),IP 数据报的分片和组装都是发生在网络层,其目的就是使分片和组装过程对传输层(TCP 和 UDP)是透明的,以及防止某些可能的性能降低。已经分片的数据报有可能会再次进行分片(即可多次分片)。

当 IP 数据报被分片后,只有第一个分片存在运输层协议首部,其余分片都不包含运输层协议的首部,但是每个分片都具有 IP 首部,并且每一片都成为一个分组,在选择路由时每一组与其他分组相互独立。由于分组之间是独立的,所以分片传输的 IP 数据报不一定按照顺序达到目的地,但是每个分片的 IP 首部能够使接收端按照正确的顺序组装这些 IP 数据报分片。

最大报文段长度(Maximum Segment Size,MSS)是 TCP 数据包每次能够传输的最大数据分段。当 TCP 报文段的长度大于 MSS 时,需要将 TCP 数据包进行分段传输。

MSS 是在 TCP 三次握手建立连接时,在两端主机之间被计算得出,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小。为了达到最佳的传输效能 TCP 协议在建立连接时通常要协商双方的 MSS 值,然后会在两者之间选择一个较小的值来限制传输数据的大小。TCP 报文段的每个分段中都有 TCP 首部,到了端点后根据 TCP 首部的信息在传输层进行重组(即
TCP 的分段和重组都发生在传输层)。

采用 TCP 协议进行数据传输是不会造成 IP 分片的,因为一旦 TCP 数据超过了 MSS,则在传输层会对 TCP 数据包进行分段,自然到了 IP 层的数据报肯定不会超过 MTU,所以就不用分片了。而对于 UDP 数据报,如果 UDP 组成的 IP 数据报长度超过了 MTU,那么 IP 数据报显然就要进行分片,因为 UDP 不能像 TCP 一样自己进行分段。传输层中的
TCP 会分段,网络层中的 IP 会分片。IP 层的分片更多的是为运输层的 UDP 服务的,由于 TCP 自己会避免 IP 的分片,所以使用 TCP 传输在 IP层都不会发生分片的现象。

IP 层没有超时重传机制,所以 IP 数据报的分片丢失时,必须重传整个 IP 数据报。超时和重传机制由更高层来实现(TCP 有超时重传机制,但 UDP 没有)。当来自 TCP 报文段的某一片丢失后,TCP 在超时后重发整个 TCP 报文段,该报文段对应于一份 IP 数据报。没有办法只重传数据报中的一个数据报片。

参考资料:

《TCP/IP 详解》

《图解 TCP/IP》

TCP分段与IP分片

时间: 2024-10-29 10:46:36

《网络协议》IP 分片与 TCP 分段的相关文章

IP分片和TCP分片 MTU和MSS

前期对分片分段概念有点不清晰,看到一篇好文,mark 本文转自:http://blog.csdn.net/keyouan2008/archive/2010/08/27/5843388.aspx 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节.链路层的这个特性称作MTU.不同类型的网络大多数都有一个上限.如果IP层有一个数据要传,且数据的长度比链路层的MTU还大,那么

UDP用户数据报协议--IP分片

1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网,刨除数据帧帧头,最多传输的长度为1500,也就是说,如果一个ip数据报,长度大于1500,则需要分片. 分片方法: 在ip头中3位标志,13位片偏移,这俩东西就是用来分片的. 3位标志中:一个更多的片标识,除了最后一个分片,其它分片都要有这个标识,还有一个不分片标识,如果置上,则即便IP数据报再长,也不分片,但是会将该IP数据报丢弃,并发送一个ICMP差错报文给发送端. 13位片偏移:用于表示相对于起始的偏移量,就是个offse

网络协议IP

IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求.IP的责任就是把数据从源传送到目的地.它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务. ip数据包的格式: IP协议是TCP/IP体系中两个主要的协议之一,而IP地址位于IP数据报的首部,在网络层及以上使用的是IP地址,因此在数据链路层是看不见数据报的IP地址,另外首部的前一部分是固定长度,共20字节.在TC

网络协议(UDP与TCP协议总结)

一.知识储备: 1.网络通讯三要素: IP地址:InetAddress 网络中设备的标识 不易记忆,可用主机名 本地回环地址:127.0.0.1  主机名:localhost 端口号 用于标识进程的逻辑地址,不同进程的标识 有效端口:0~65535,其中0~1024系统使用或保留端口. 备注:不是所谓的物理端口! 传输协议 通讯的规则 常见协议:TCP,UDP 2.UDP与TCP协议的特点: UDP: 1.将数据源和目的地封装到数据包中,不需要建立连接 2.每个数据包的大小限制在64k以内 3.

网络协议——IP

IPv4地址 网络中的任何一台设备都要通过网络接口卡(NIC)接入网络,如果该台设备想要被其他设备访问到,那么其网卡必须有一个唯一的地址.一台设备还可以有多个网卡并同时接入多个网络,相应地该设备就有多个地址,如果这个设备是主机的话,一般被称为multihomed主机.路由器一般有多个网卡并接入多个网络,所以路由器也有多个地址,但是一般不把路由器称为multihomed主机. IPv4使用一个32位二进制地址,所以理论上可供使用的IPv4地址一共由4 294 967 296个,即232.为了便于管

对TCP/IP网络协议的深入浅出归纳

前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象. 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就是网络协议. 那么

对TCP/IP网络协议的深入浅出归纳(转)

前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象. 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就是网络协议. 那么

[转]对TCP/IP网络协议的深入浅出归纳

转自:http://blog.jobbole.com/74795/ 前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象. 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没

转:对TCP/IP网络协议的深入浅出归纳

前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象. 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就是网络协议. 那么