zoukankan      html  css  js  c++  java
  • 网络编程——粘包

    粘包问题:

    例:发送端发送数据 ,接收端不知道应该如何去接受,造成一种数据混乱的现象

    在TCP协议中:

    有一个合包机制(nagle 算法),将多次连续发送且间隔较小的时间,进行打包成一块数据传送

     还有一个是拆包机制,在发送端,因为受到网卡的MTU限制,会将大的超过MTU限制的数据,进行拆分,拆分成多个小的数据,进行传输。当传输到目标主机的操作系统层时,会重新将多个小的数据合并成原本的数据

     注意:只有TCP协议才会发生粘包,UDP不会发生

     针对 使用UDP协议发送数据,一次收发的大小究竟多少合适?

      UDP不会发送粘包,UDP协议本层对一次手法数据大小的限制是:

    65535 - ip 包头(20) - UDP 包头(8) = 65507

    站在数据链路层,因为网卡的MTU一般被限制在了1500, 所以对于数据链路层来说,一次收发数据的大小被限制在 1500 - ip 包头(20) - udp包头(8) = 1472

    得到结论:

    如果sendto(num)

    num > 65507 报错

      1472< num <65507 会在数据链路层拆包, 而udp本身就是不可靠协议,所以一旦拆包之后,造成的多个小数据包在网络传输中,如果丢任何一个,那么此次数据传输失败。

    num <1472 是比较理想的状态

  • 相关阅读:
    [題解]51nod_1515_明辨是非
    任务调度问题(贪心) hdu4864
    B站学习记:贪心与博弈
    poj1505(二分+贪心)
    温故知新:互质排列
    Radar Installation(利用数据有序化进行贪心选择)
    Wooden Sticks(贪心)
    计算a除b的第一位小数 in C++.
    龙龙的暑假贪心算法大冒险
    HDU-2037(贪心)
  • 原文地址:https://www.cnblogs.com/Loren2o/p/9475017.html
Copyright © 2011-2022 走看看