以太网的帧长,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

相关文章

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

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

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

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

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程