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分片的标准

tcp/ip 中的分组和分片的更多相关文章

  1. TCP/IP中链路层的附加数据(Trailer数据)和作用

    1.TCP/IP中链路层的附加数据是什么 在用wireshark打开报文时,链路层显示的Trailer数据就是附加数据,如图 2.如何产生 1.例如以太网自动对小于64字节大小的报文进行填充(未实验) ...

  2. TCP/IP中最高大上的链路层简介(二)

    引言 对于程序猿来讲,似乎越接近底层,就越显得高大上.这也算是程序猿们的共同认知吧,虽然不是所有人.今天LZ就和各位一起探讨一下TCP/IP中最高大上的一层,也就是最底层的链路层. 这一层LZ了解的还 ...

  3. TCP/IP协议原理与应用笔记11:TCP/IP中地址与层次关系

    1. 网络中常用的地址: 2. TCP/IP中地址与层次关系 :

  4. TCP/IP中你不得不知的十大秘密

    这段时间 有一点心很浮躁,不过希望自己马上要矫正过来.好好学习编程!这段时间我想好好地研究一下TCP/IP协议和网络传输这块!加油 一.TCP/IP模型 TCP/IP协议模型(Transmission ...

  5. TCP/IP中的传输层协议TCP、UDP

    TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...

  6. TCP/IP中的Payload概念以及由此引申出的一些问题

    TCP报文一次性最大运输的货物量(Payload),大体可以这么来计算: IP报文头长度  +  TCP报文头长度  +  Payload长度  ≤ MTU 即左边的三者之和,要小于等于右边MTU的长 ...

  7. TCP/IP中的四元组、五元组、七元组

    四元组:源IP地址.目的IP地址.源端口.目的端口 五元组:源IP地址.目的IP地址.源端口.目的端口.传输层协议 七元组:源IP地址.目的IP地址.源端口.目的端口.传输层协议,服务类型以及接口索引

  8. TCP/IP中32位IP地址与字符串转化

    转载:http://www.cnitblog.com/wujian-IT/archive/2007/10/11/34739.aspx 在网络上面我们用的IP都是数字加点(192.168.0.1)构成的 ...

  9. TCP/IP 中的二进制反码求和算法

    对于这个算法,很多书上只是说一下思路,没有具体的实现.我在这里举个例子吧 以4bit(计算方便一点,和16bit是一样的)做检验和来验证. 建设原始数据为 1100 , 1010 , 0000(校验位 ...

随机推荐

  1. 【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】

    上一部分给大家介绍Django的视图. 接下来继续来了解Django框架,来看第三部分,此部分是对数据库的操作. 目录: 一.设计系统表 二.admin后台管理 三.基本数据访问(SQLite数据库) ...

  2. POJ2947 DAZE [Gauss]

    题目是要求建立一个方程组: (mat[1][1]*x[1] + mat[1][2]*x[2] + - + mat[1][n]*x[n])%7 =mat[1][n+1] (mat[2][1]*x[1] ...

  3. css3的线性渐变效果

    1.代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...

  4. ThinkPHP带表情无限级评论回复

    今天就tp中(含表情)无限级评论回复做一个个人总结. 1.准备TP基本框架 2.数据库,数据表的建立 A.先说说数据库(表)的建立. a-1,数据库:blog a-2,数据表:bolg_comment ...

  5. Codeforces 455A Boredom 取数字的dp

    题目链接:点击打开链接 给定一个n长的序列 删除x这个数就能获得x * x的个数 的分数,然后x+1和x-1这2个数会消失.即无法获得这2个数的分数 问最高得分. 先统计每一个数出现的次数.然后dp一 ...

  6. 系统时钟和UART的设置

    系统时钟: 在开发版上,不同的器件运行在不同的时钟频率上,如CPU可能运行在400Mhz的频率上.SDRAM.DM9000等内存存储运行在100Mhz~133MHz上. 串口i2c等运行在50Mhz上 ...

  7. 《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!

    原创文章,欢迎转载.转载请注明:关东升的博客    我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swif ...

  8. wamp设置mysql默认编码

    来自:http://www.cnsecer.com/5984.html wamp下MySQL的默认编码是Latin1,不支持中文,要支持中文的话需要把数据库的默认编码修改为gbk或者utf8. 这里推 ...

  9. 小程序 less wxss 混合 Mixins picker样式优化 箭头样式的实现原理

    lessc src/style/picker-arrow_.less src/style/picker-arrow_.wxss 快速入门 | Less.js 中文文档 https://less.boo ...

  10. 动态加载和卸载 DLL

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...