socket中的Nagel算法

MSS和MTU

  • MTUmaximum transmission unit 网络传输最大单元,由硬件规定,如以太网的MTU为1500字节。
  • MSSmaximum segment size 网络传输数据最大值,为 TCP 数据包每次传输的最大数据分段大小,一般由发送端向对端 TCP 通知对端在每个包能发送的最大 TCP 数据。

注:MSS + 包头数据 = MTU,最后发出去的报文大小就是MTU的大小, MSS就是你需要发出去的数据大小,MSS是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候为1460(不包括其他协议头)

  • IP数据报(46~1500)= IP首部(20字节)+ TCP首部(20字节)+ 应用数据(6~1460)

socket中的Nagel算法

  • 在TCP/IP协议中,发送数据的时候一定要在数据前面加上协议头,为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。所以往往会以MSS的最大值封装数据进行发送

Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。它只允许一个未被ACK的包存在于网络,它并不管包的大小,事实上就是一个包的停-等协议,注意:单位是,并不是字节,完全依赖ACK应答机制,如果应答快,网络上就不会拼接太多的数据包

  • Nagle算法的规则
    • 如果包长度达到MSS,则允许发送;
    • 如果该包含有FIN,则允许发送;
    • 设置了TCP_NODELAY选项,则允许发送;
    • 未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
    • 上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值