TCP分段 & IP分片
发布网友
发布时间:2024-05-02 09:33
我来回答
共1个回答
热心网友
时间:2024-07-26 11:42
链路层具有最大传输单元MTU这个特性,*了数据帧的最大长度,不同的网络类型都有一个上限值。如以太网Ethernet II和802.3规范对帧中的数据字段长度都有一个*,其最大值分别是1500和1492个字节。
如果IP层有数据包要传,而且数据包的长度(包括IP头)超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。
这里以Ethernet II 为例,MAC头以下的 IP 数据报最大传输单位为 MTU ( Maximum Transmission Unit),对于大多数使用以太网的局域网来说,MTU=1500 。
Wireshark中看以太网帧的封包格式为:
Frame = Ethernet Header + IPHeader + TCP Header + TCP Segment Data
(1 )Ethernet Header = 14 Byte = Dst Physical Address (6 Byte )+ Src Physical Address (6 Byte )+ Type (2 Byte ),以太网帧头以下称之为数据帧 。
(2 )IP Header = 20 Byte (without options field ),数据在IP 层称为 Datagram ,分片称为 Fragment。
( 3 ) TCP Header
= 20 Byte ( without options field),数据在 TCP 层称为 Stream ,分段称为 Segment( UDP 中称为 Message )。
( 4 ) 54 个字节后为 TCP 数据负载部分( Data Portion ),即应用层用户数据。
TCP自身支持分段,当TCP要传输长度超过MSS(Maxitum Segment Size)的数据时,会先对数据进行分段,正常情况下,MSS小于MTU,因此,TCP一般不会造成IP分片。若数据过大,只会在传输层进行数据分段,到了IP层就不用分片。因此采用TCP协议进行数据传输,是不会造成IP分片的。
HTTP 请求消息一般不会很长,一个网络包就能装得下,但如果其中要提交表单
数据,长度就可能超过一个网络包所能容纳的数据量,比如在博客或者论坛上发表一篇长文就属于这种情况。这种情况下,发送缓冲区中的数据就会超过 MSS 的长度,这时我们当然不需要继续等待后面的数据了。发送缓冲区中的数据会被以 MSS 长度为单位进行拆分,拆分出来的每块数据会被放进单独的网络包中。
根据发送缓冲区中的数据拆分的情况,当判断需要发送这些数据时,就在每一块数据前面加上 TCP 头部,并根据套接字中记录的控制信息标记发送方和接收方的端口号,然后交给 IP 模块来执行发送数据的操作。
TCP 数据包每次能够传输的最大数据分段称为 MSS (Maxitum Segment Size),为了达到最佳的传输效能,在建立 TCP 连接时双方协商 MSS 值,双方提供的 MSS 值的最小值为这次连接的最大 MSS 值。MSS 往往基于 MTU 计算出来,通常 MSS=MTU-sizeof(IP Header)-sizeof(TCP
Header)=1500-20-20=1460 。如
TCP segment len 指出了应用程序数据的大小,即应用层数据经初次封装后的大小。使用wirshark看起内容如下
POST /License/client/ProcessQueryServlet
HTTP/1.1
Host: 172.24.116.249:8050
Connection: keep-alive
Content-Length: 118
Cache-Control: max-age=0
Origin:
http://172.24.116.249:8050
Upgrade-Insecure-Requests:
1
User-Agent: Mozilla/5.0
(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/54.0.2840.99 Safari/537.36
Content-Type:
application/x-www-form-urlencoded
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer:
http://172.24.116.249:8050/License/client/PreQueryServlet
Accept-Encoding: gzip,
deflate
Accept-Language:
zh-CN,zh;q=0.8
Cookie:
JSESSIONID=67C7292511815E7AA38CE5B863FC0E02
cause=&%E5%AE%A2%E6%88%B7%E5%90%8D%E7%A7%B0=kehumingcheng&%E5%AE%A2%E6%88%B7%E5%8F%B7=kehuhao&query=%E6%9F%A5%E8%AF%A2
上述请求头加上body实体的长度就是776bytes。在nodepad中看如下
TCP/IP 可以使用一些可选参数(protocol option),如加密等,这时头部的长度会
侵占一些MSS空间,则真正用来承载数据的就剩下1500-20-20-12=1448字节了。如
Tcp建立连接的时候,必须进行三次握手,在前两个握手包中,双方互相声明了自己的MSS。经过握手后,彼此知道自己的MSS,就会自动调整从而适配接收方的MTU。如一个IP包最多可以携带1500-20=1480字节的数据。当要传输的数据块大于1460字节时,TCP层就会把它分段,封装成多个网络包。这样,数据经过本地 TCP 层分段后,交给本地 IP 层,在本地 IP 层就不需要分片了。
从这一层意义上说,其实TCP无所谓分段,因为每个TCP数据报在组成前其大小就已经被MSS*了,所以TCP数据报的长度是不可能大于MSS的,自然到了IP层的数据报肯定不会超过MTU,当然也就不用分片了。
然而,如果网络上有交换机之类的MTU比发送方和接收方都小,则还会有问题。实际上,在下一跳路由( Next Hop )的邻居路由器上可能发生 IP 分片。因为路由器的网卡的MTU 可能小于需要转发的 IP 数据报的大小。这时候,在路由器上可能发生两种情况:
( 1 )如果源发送端设置了这个 IP 数据包可以分片( May
Fragment , DF=0 ),路由器将 IP 数据报分片后转发。
( 2 )如果源发送端设置了这个 IP 数据报不可以分片( Don’t
Fragment , DF=1 ),路由器将 IP 数据报丢弃,并发送 ICMP 分片错误消息给源发送端。
而对于UDP数据报和ICMP,如果组成的 IP数据报长度超过了1500,那么IP数据报显然就要进行分片,因为它们不能像TCP一样自己进行分段。
UDP和ICMP认为网络层可以传输无限长(实际上有65535的*)的数据,当这两种协议发送数据时,它们不考虑数据长度,仅在其头部添加UDP或ICMP首部,然后直接交给网络层就万事大吉了。接着网络层IP协议对这种“身长头短”的数据进行分片,不要指望IP能很“智能”地识别传给它的数据上层头部在哪里,载荷又在哪里,它会直接将整个的数据切成N个分片,这样做的结果是,只有第一个分片具有UDP或者ICMP首部,而其它分片则没有。因此UDP不会分段,而是由IP来分。
一般IP首部为20字节,UDP或ICMP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据静荷载部分大于1472字节,就会出现分片现象。
以ping 一个大包 1473字节为例,
icmp包头位于第一个分片中,其余分片只包含ip头和数据。除了最后一个分片,其它分片的数据(除去ip头)必须是8的整数倍。
第一个分片包的有效载荷为:1514-14-20-8=1472,第二个分片包的有效载荷为:35-14-20=1,可见1473大小的数据被分在了两个包里面进行传输。
TCP分段 & IP分片
IP协议分片对数据传输的可靠性和稳定性至关重要。避免IP分片需要TCP协议引入最大分段大小(MSS),定义了TCP数据段能携带的最大数据量,通常为MTU减40字节,即1460字节。在TCP连接中,MSS在三次握手时确定,TCP协议根据MSS将应用层数据拆分成多个数据段。TCP协议面向字节流,应用层数据不会以消息单位发送...
ip动态 - StormProxies
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效地隐藏用户的真实IP地址,保护用户的隐私和安全。2. 快速响应:StormProxies的动态代理服务器具有快速响应的特点,可以快速响应用户的请求,提高用户的网络访问速度和效率。3. 高度可定制:StormProxies的动态代理服务器可以根据用户的需求进行定制,例如可以根据用户的地理位置、网络带宽、访问频率等因素进行定制。4. 多种协议支持:…StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...
IP分片和TCP分段有什么区别?
IP分片和TCP分段的区别 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节。链路层的这个特性称作MTU。不同类型的网络大多数都有一个上限。如果IP层有一个数据要传,且数据的长度比链路层的MTU还大,那么IP...
动图图解!既然IP层会分片,为什么TCP层也还要分段?
尽管IP层会进行数据分片以适应不同网络节点的MTU,TCP层仍然进行分段是为了提高数据传输效率和应对丢包时的重传。TCP分段使得在IP层不需要再分片,避免了大块数据的重传,特别是对于UDP协议,TCP的分段是必要的。然而,整个传输链路中,若MTU变化,IP层可能会在其他节点进行二次分片,这就需要通过PMTU Disco...
TCP分段 & IP分片
TCP自身支持分段,当TCP要传输长度超过MSS(Maxitum Segment Size)的数据时,会先对数据进行分段,正常情况下,MSS小于MTU,因此,TCP一般不会造成IP分片。若数据过大,只会在传输层进行数据分段,到了IP层就不用分片。因此采用TCP协议进行数据传输,是不会造成IP分片的。HTTP 请求消息一般...
IP 分片/MTU 与TCP分段/MSS
TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP首部后的长度不可能超过MTU,因此也就不需要在网络层进行IP分片了。 因此TCP报文段很少会发生IP分片的情况 。再来看UDP数据报,由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络...
tcp分片和ip分片的区别
IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS IP分片由网络层完成,也在网络层进行重组;TCP分段是在传输层完成,并在传输层进行重组 对于以太网,MSS为1460字节,而MUT往往会大于MSS 故采用TCP协议进行数据传输,是不会造成IP分片的。若数据过大,只会在传输层进行数据分段,到了IP...
TCP/IP 之IP数据报ip分片ip分片过程
在TCP/IP网络中,IP数据报的传输是一个重要环节。本文将深入解析IP数据报的结构,特别是其分片过程以及关键字段的作用。首部结构解析IP数据报首部由固定和可变部分组成,版本号(4位)用于标识协议版本,IPv4用4,IPv6用6。首部长度(4位)指示总长度,最小为20字节(包括固定部分)。服务类型(TOS,8...
TCP UDP 分段 IP分片
udp ip学习博客 3次握手4次挥手 链路层 MTU 最大传输单元 1500 MISS最大分段 TCP 层 数据 ;tcp +Data TCP+MISS+id2 D1<MISS ip +TCP+D1+id2 tcp+D1+id2 tcp一段一段(D1)传 传成功了在传第二段(D2) 数据编号id1 包活计时器 2h &...
TCP/IP 协议难点之一—— IP分片
TCP发送数据时,将大于MSS的数据分段(segment不叫分片),MSS一般为1460.所以,TCP数据包不会在IP层分片。IP头部有3位标志字段,标志是否为分片包。第一位无用,第二位0:允许分片,1:不允许。第三位0:最后一片,1:后面还有分片。13位offset表示偏移,用于IP重组时数据排序,13位因此支持最大IP...
什么是IP分片技术
连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度),MSS一般是MTU—IP首部(20)—TCP首部(20),每次发送的TCP数据都不会超过双方MSS的最小值,所以就保证了IP数据报不会超过MTU,避免了IP分片。参考资料:http://www.cnblogs.com/glacierh/p/3653442.html ...