首页 > 其他分享 >TCP协议-传输数据包分片

TCP协议-传输数据包分片

时间:2023-06-04 18:12:38浏览次数:39  
标签:MSS TCP MTU 发送 传输数据 拥塞 分片 数据包

1.影响发送方数据包分片主要有:MTU值限制、握手时协商MSS值、拥塞控制(或者流量控制)算法设置的发送窗口大小

  MTU(Maximum Transmission Unit),即最大传输单元,是数据链路层的一个概念。它指的是在网络通信中,能够传输的最大数据包的大小。由于不同的数据链路层设备和协议,其最大传输单元有所不同,因此MTU也有所区别。在TCP/IP协议中,IP层拆分发送的数据包时,通常要把较大的数据包分割成多个较小的数据包。而MTU就是指在将一个较大的IP数据包分割成多个更小的IP数据包时,每个数据包可以承载的Payload数据的最大长度。 需要注意的是,MTU的大小通常是会限制数据包大小的,如果超过了MTU的大小,数据包就会被分片,这会增加传输的时间和网络负担。因此,在进行网络传输时,需要考虑业务需求和网络状况,合理设置MTU的大小,以获得更好的网络性能。

  MSS值(Maximum Segment Size)是TCP协议中的一个参数,用于指定发送端发送的最大分段大小。它表示每个TCP分段(segment)所包含的数据部分(即payload)的最大长度,不包括TCP头部和IP头部等协议头部。在TCP连接建立握手时,双方会进行MSS协商,以确定双方可以支持的最大分段大小,从而在整个数据传输过程中都使用这个MSS值。如果接收方在TCP建立连接时没有明确指定MSS值,那么发送方自己就会选择一个合适的MSS值,并将其包含在SYN数据包中发送给接收方。接收方收到该SYN数据包后,就可以根据这个MSS值来设置自己的接收缓冲区大小,从而避免数据包过大而导致缓冲区溢出。需要注意的是,MSS值通常不包括TCP协议头和IP协议头的长度,因此实际发送的TCP分段大小可能比MSS值要大一些。另外,在实际应用中,由于MTU的限制,MSS值可能会被限制在一定的范围内,因此在进行网络传输时需要针对具体情况进行合理的设置。

  TCP流量控制主要是为了避免发送方发送速率过快而导致接收方无法及时处理,从而产生数据丢失或者缓存溢出等问题。它通过使用滑动窗口机制来限制发送方发送数据的速率。接收方每次处理完一个数据包后,会给发送方返回一个ACK确认,其中也会告诉发送方当前接收窗口的大小,即还能接收多少数据。发送方会根据接收窗口的大小来调整自己的发送速率,以确保发送的数据不会超过接收方的处理能力。TCP拥塞控制则是为了避免在网络拥塞的情况下,发送方继续发送数据而导致网络更加拥堵,进而导致丢包等问题。TCP拥塞控制采用了一系列算法,例如慢启动、拥塞避免、快速重传和快速恢复等,来尽可能地适应网络状况,控制发送速率。这些算法包括:当出现丢包的情况时,发送方通过快速重传和快速恢复来快速获取新的ACK确认并降低发送速率;当网络出现拥塞时,发送方通过慢启动和拥塞避免算法来逐渐增加发送速率,以最大化利用网络带宽,并且尽可能地避免网络拥塞情况的出现。需要注意的是,TCP拥塞控制和流量控制都是通过发送方和接收方之间交换信息、相互协作来完成的,以达到合理的发送速率和传输质量,并避免对网络造成额外的压力。主要涉及滑动窗口(接收窗口rwnd和拥塞窗口cwnd)、慢开始门限(ssthresh)、SMSS(发送者的MSS值)等

2.MTU值的设置,一般以太网网卡的默认值都是1500(单位Byte),可以使用下面的命令进行配置

ifconfig eth0 mtu 1500

ifconfig 命令可以查看到MTU值

  

如果在TCP链路已经建立完成,修改接收方MTU值(单位Byte),但发送方发来的数据包大于接收方的MTU值,可能会被接收方的网络设备丢弃,接收方上层应用表现为丢包

3.MSS值一般是MSS=MTU-40,握手时双方会发出。

MSS值可以使用以下命令修改,一般握手前修改才有效:

增加(OUTPUT):
sudo iptables -t mangle -A OUTPUT -p tcp -o ens35u1i5 -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1460

删除(OUTPUT):
sudo iptables -t mangle -D OUTPUT -p tcp -o ens35u1i5 -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1460

增加(INPUT):
sudo iptables -t mangle -A INPUT -p tcp -i ens35u1i5 -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1460

删除(INPUT):
sudo iptables -t mangle -D INPUT -p tcp -i ens35u1i5 -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1460

4.流量控制与拥塞控制

   流量控制是为了让发送方发送速率不要太快,接收方来得及接收。一般使用滑动窗口缓存机制,当接受乱序的ACK或者乱序的分片包,可以通过缓存机制增加的效率,滑动窗口的单位是字节。如下图

    

 

 

 

  拥塞算法包括有 :

(1)Tahoe 拥塞控制算法:组合了慢启动、拥塞避免、快速重传和超时重传四种算法。

(2)Reno 拥塞控制算法:在 Tahoe 算法的基础上,加入了快速恢复算法。

(3)Cubic 拥塞控制算法:适合高带宽长距离网络(High Speed Long Distance network, HSLD)的拥塞控制算法。

(4)BBR(Bottleneck Bandwidth and Round-trip propagation time)拥塞控制算法:针对高延迟和高带宽网络优化设计的一种新型拥塞控制算法。

   一般在传输启动时会使用慢启动算法,传输到达慢开始门限后进行拥塞避免,当出现拥塞时会快速回复,当数据包

   慢启动(Slow Start):发送方在开始传输数据时,先把拥塞窗口设为一个较小的值,然后每收到一个 ACK 就把窗口值加倍,直到达到一个阈值。如果MSS值比较小,一般拥塞窗口的值会按2的倍数增加

  实际中拥塞窗口cwnd与SMSS(发送者的MSS值)有关:

      

 

 

   拥塞避免(Congestion Avoidance):在慢启动阶段结束后,拥塞窗口的大小变化变得缓慢。每经过一个往返时间 RTT(Round-Trip Time),拥塞窗口就增加 1 个 MSS 的值。

    慢开始门限ssthresh=拥塞时cwnd/2

 

    快速重传(Fast Retransmit):如果发送方连续发送了多个分组,但只收到了一个 ACK,则说明其中某个分组被丢失了,此时发送方不等待超时再重传,而是立即重传这个丢失的分组。

   快速恢复(Fast Recovery):在快速重传后,发送方进入快速恢复状态,使得拥塞窗口减半,并采用拥塞避免算法来控制拥塞窗口的增长。

   

 

    而发送滑动窗口是如下:

  

   

 

   所以当发送窗口小于发送方设定的MSS值时,发送方实际分片的数据包有效数据长度会比设定的MSS值,也就是分片长度(单位Byte)会动态改变。

   cwnd不能在wireshark抓包中看到,而rwnd可以在接收方所回复的ACK中看到:

   

  

    实际的window size还有与一个系数有关,这个系数在握手时协商,实际的接受窗口是scaling * Window

  

 

标签:MSS,TCP,MTU,发送,传输数据,拥塞,分片,数据包
From: https://www.cnblogs.com/jest549/p/17456030.html

相关文章

  • P2P技术基础: 关于TCP打洞技术
    4关于TCP打洞技术建立穿越NAT设备的p2p的TCP连接只比UDP复杂一点点,TCP协议的“打洞”从协议层来看是与UDP的“打洞”过程非常相似的。尽管如此,基于TCP协议的打洞至今为止还没有被很好的理解,这也造成了对其提供支持的NAT设备不是很多。在NAT设备支持的......
  • 秒懂TCPIP协议基础
    TCPIP是网络协议集合的统称。用于规范网络通信的行为。完整的网络通信通过分工合作完成。每一项工作都由特定的层来完成,就是所谓的分层。层分上下层。层与层之间的通信形象的来说就是“打包”和“拆包”,如快递寄发类似。TCPIP从上到下分应用层,传输层,网际层,数据链路层。以A君......
  • 基于ESP32的TCP/IP传输实现
    TCP/IP协议原理TCP/IP协议是Internet互联网最基本的协议,TCP/IP协议的应用层的主要协议有HTTP、Telnet、FTP、SMTP等,是用来读取来自传输层的数据或者将数据传输写入传输层;传输层的主要协议有UDP、TCP,实现端对端的数据传输;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的......
  • PortQry检测服务器TCP端口和UDP端口状态
    PortQry是一种命令行实用工具,它能报告远程计算机上端口(传输控制协议(TCP)和用户数据报协议UDP)的端口状态。可从Microsoft下载中心下载PortQry.exe。若要下载PortQry.exe,请访问以下Microsoft网站:https://www.microsoft.com/en-us/download/details.aspx?id=17148名......
  • 工控CTF_Modbus TCP
    工控CTF_ModbusTCP参考文章https://blog.csdn.net/song123sh/article/details/128387982https://www.anquanke.com/post/id/185513#h2-0概况Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCPmodbus......
  • Android利用tcpdump抓包
    [b]Instructions[/b][url]http://source.android.com/porting/tcpdump.html[/url][b]SourceCodeandDocuments[/b][url]http://www.tcpdump.org/[/url][b]CompiledBinaryDownload[/b][url]http://www.strazzere.com/android/tcpdump[/url]......
  • TCP和UDP区别
    TCP是传输控制协议,UDP是用户数据表协议;TCP长连接,UDP无连接;UDP程序结构较简单,只需发送,无须接收;TCP可靠,保证数据正确性、顺序性;UDP不可靠,可能丢数据;TCP适用于少量数据,UDP适用于大量数据传输;TCP速度慢,UDP速度快;......
  • SpringCloud大文件分片上传/多线程上传
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • SpringBoot大文件分片上传/多线程上传
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • SpringMVC大文件分片上传/多线程上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求         <formid="postForm"action="${pageContext.request.contextPath}/UploadServlet"method="post"e......