• tcp/ip 中的分组和分片


    osi

    大家应该都知道osi七层模型吧,物理层 链路层 网络层 传输层 会话层 表示层 应用层
    ip 属于网络层,tcp 属于传输层,你可以把每一层想像成粽子的粽叶,包裹了七层的粽子
    最外面的就是物理层,最里面的就是应用层,我们的数据就是粽肉。特殊的地方在于而我
    们的粽肉需要放在固定磨具中,大小是固定的。这样就跟我们的事件情况一样了,我们每次
    传输的数据也有一个最大值限定,多了就需要多做几个粽子才行,这个最大值的专业术语
    就是, 最大传输单元(MTU)。数据大小 > MTU,就需要被分片。

    ip 分片

    粽叶会增加粽子体积,我们的数据经过七层协议的过程中就像包粽子一样,每过一层就需要
    增加数据的大小,ip层的上层是传输层(tcp/udp tcp 的头部为20Byte,udp头部字节是8B)
    ip层自己的头部需要占20字节,ip层的MTU = 1500Byte - 20 =1480 >> ip层传输的数据
    最多是,1480Byte, 超过1480Byte的数据,都需要被ip层分片,在达到目的前会自己重组

    #tcp分组

    tcp是可靠传输协议,通过超时与重传机制,来保证收到的数据是完整的。因为tcp是可靠
    传输协议,如果要传输的数据大于 1480 - 20(tcp头部) =1460Byte时,在ip层被分片,而
    ip层分片会导致,如果其中的某一个分片丢失,因为tcp层不知道哪个ip数据片丢失,所以
    就需要重传整个数据段,这样就造成了很大空间和时间资源的浪费,为了解决这个问题,
    就有了tcp分组和MSS(最长报文大小)概念,利用tcp三次握手建立链接的过程,交互各自的
    MTU,然后用小的那个MTU-20-20 , 得到MSS,这样就避免在ip层被分片。

    #udp
    由于udp是不可靠传输的,所以ip分片主要是为了upd服务的,所以就有了网上的
    1500 - 20(ip头部) - 8(udp头部) > 1472 的说法,把1472作为ip分片的标准

  • 相关阅读:
    JAVA线程池管理及分布式HADOOP调度框架搭建
    技术人员如何创业《二》 合伙人的模式
    JavaScript中的运动数学函数(持续更新)
    JavaScript中的加号
    JavaScript 函数绑定 Function.prototype.bind
    基于C#的波形显示控件的实现[附完整源码下载]
    JavaScript中的声明提升
    JavaScript & HTML5 Canvas 概览 更新时间201404111805
    《编写高质量代码——Web前端开发修炼之道》读后随笔
    B树/B+树/二叉搜索树/AVL树/红黑树
  • 原文地址:https://www.cnblogs.com/newjiang/p/9364920.html
Copyright © 2020-2023  润新知