以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系

2023-12-03 04:50

本文主要是介绍以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文不考虑巨型帧(jumbo frames)的情况下,我们来理几个概念。在日常讨论中,这几个长度经常会容易被混淆起来。64字节,1518字节,1500字节,1460字节,我们接下来会来介绍一下这几个常见,易混淆的长度值的来源。

1、以太帧帧长:

数据帧的长度,代表二层以太帧长。如下图所示,IEEE802.3协议规定,以太帧帧长最小为64字节,最大为1518字节
在这里插入图片描述
这里还有另外一种算法,则要在上面图片显示的基础上加上7字节前导同步码 + 1字节帧开始定界符,变成7字节前导同步码 + 1字节帧开始定界符 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS,则总长度变成1518+7+1 = 1526字节;
而有人讨论这个时,不仅不考虑前导同步码和字节帧开始定界符,也不考虑FCS部分(因为这些部分在抓包软件里往看不到),那么就这成了1514字节。

2、MTU(Maximum Transmission Unit,最大传输单元):

MTU是指网络能够传输的最大数据包大小,以字节为单位。MTU是数据链路层的概念,在以太网中,是指以太帧承载的有效数据载荷(payload)部分的长度的最大值。不同链路介质类型的网络有不同的默认MTU值。如下图所示,我们通过以太帧帧长最小为64字节,最大为1518字节,可以知道以太帧有效数据部分最最小为64-6-6-2-4 = 46字节,最大为1518-6字节目标MAC地址-6字节源MAC地址-2字节数据帧类型-4字节校验 = 1500字节,这个最大值就称为MTU,所以通常是1500字节。
在这里插入图片描述

通过以下命令可以查看主机中所有接口的MTU的值

sudo netstat -i

3、IP报文长度:

一般来说,受限于MTU,我们认为IP报文是由20字节的IP头部+1480字节的IP有效数据载荷构成的。
在这里插入图片描述
所以IP有效数据载荷的长度通常为1480字节。

4、TCP报文长度:

受限于MTU(准确的说是受限于MSS,见下一章节)TCP报文长度由由20字节的TCP头部+1460字节的TCP有效数据载荷构成的。TCP有效数据载荷的长度是1460字节
在这里插入图片描述

5、TCP MSS(Maximum Segment Size):

TCP MSS是指TCP协议所允许的最大报文长度,即TCP数据包每次能够传输的最大的TCP最大有效数据载荷部分的长度,不包含TCP头部。MSS是指TCP的有效数据载荷部分的最大长度。一般来说,如果我们只考虑主机当前以太网的接口卡的MTU:TCP MSS = MTU - IP头部20字节 - TCP头部20字节 = 1460字节。在实际的网络中TCP MSS不仅仅受限于主机当前网络接口卡的MTU,还受限于网络中以及端主机的MTU的大小,具体可参见
TCP的MSS的计算与详解
TCP之路径MTU(PMTU)发现过程详解

在这里插入图片描述

这篇关于以太网的帧长,MTU, IP报文长度,TCP报文长度,TCP MSS之间的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448132

相关文章

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分