热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TCP/IP详解之IP分片

先介绍几个术语:MSS:最大段尺寸1. 是应用层(TCP)与传输层之间的接口属性2. 用于向对端TCP通告对端在每个TCP分节中能发送的最大TCP数据量。3. 它经常

先介绍几个术语:


MSS:最大段尺寸

1.   是应用层(TCP)与传输层之间的接口属性

2.   用于向对端TCP通告对端在每个TCP分节中能发送的最大TCP数据量。

3.   它经常设置成MTU减去IP和TCP首部的固定长度

4.   它是一个16位的字段,限定最大值是65535

5.   65535这个MSS值被视为表示“无限”的一个特殊值。


MTU:即Maximum Transmission Unit(最大传输单元)

1.  网络层和链路层之间的接口属性;

2.  MTU是一个逻辑限制,目的是为交互使用提供足够快的响应时间。


在一个IP数据报从源端到目的端的传送过程中,分片操作既可能发生在源端,也可能发生在途中,而其逆操作即重组,一般只发生在目的端;


如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据分成若干片,这样每一片都小于MTU


任何运输层首部只出现在第一片数据中,但是每一片都有自己的IP首部,这些分片只有到达目的地而不是每一个下一站才进行重新组装,重新组装由目的端的IP层来完成;


当来自TCP报文段的某一片丢失以后,TCP在超时后会重发整个TCP报文段,该报文段对应一份IP数据报,没有办法只重传数据报中的一个数据报片;


IP首部标示字段中有一个比特称作不分片位,为1则IP不对数据报分片,数据报大于 MTU则丢弃并发送一个ICMP差错报文;


IP数据报是指IP层端到端的传输单元(在分片之前和重组之后),分组是指IP层和链路层之前传送的数据单元,一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片;


IPv4数据报最大大小是65535字节,因为IP首部长度字段占16位


IPv4和IPv6都定义了最小重组缓冲区大小,它是IPv4和IPv6的任何实现都必须保证支持的最小数据报大小,其值对于IPv4是576字节,对IPv6是1500字节。


本端TCP以MSS大小的或更小的块把数据传递给IP,同时给每个数据块安上一个TCP首部以构成TCP分节,其中MSS或是由对端通告的值,或是536(576-20IP首部-20TCP首部)(若对端未发送一个MSS选项)如果某个UDP应用进程发送大数据报,那么他们相比TCP应用数据更有可能被分片,因为TCP会把应用数据划分成MSS大小的块,而UDP却没有对等的手段。


参考:

UNIX Network ProgrammingVolume 1, Third Edition: TheSockets Networking API

TCP/IP协议详解

TCP/IP详解之IP分片


推荐阅读
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
  • 本文介绍了如何在 ASP.NET 中设置 Excel 单元格格式为文本,获取多个单元格区域并作为表头,以及进行单元格合并、赋值、格式设置等操作。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
author-avatar
爱做梦的蓝梦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有