搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小蓝xlanll
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
[论文阅读]Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context_transformer-xl naacl
2
【粉丝福利社】《数字化运维:IT运维架构的数字化转型》(文末送书-完结)_数字化运维 it运维架构的数字化转型 pdf
3
Spark---RDD的创建分类和基础操作算子详解
4
对注意力机制(Attention)的一些理解附上Bi-LSTM和seq2seq加上注意力机制的代码_bilstm和bilstm+attention
5
项目管理学习总结(15)——技术负责人所需的四个核心能力_项目技术负责人的专业知识能力包括
6
汇编语言子程序调用call和ret
7
GITHUB_TOKEN有什么用_github的token的作用
8
SystemVerilog Assertions应用指南 第一章(1.28章节 内建的系统函数)_system verilog onehot检查
9
AI人工智能中的数学基础原理与Python实战:深度学习理论实现与数学基础
10
Git拉分支及合并分支
当前位置:
article
> 正文
TCP 协议中MSS的理解_nftable tcpmss
作者:小蓝xlanll | 2024-04-25 03:41:21
赞
踩
nftable tcpmss
在介绍MSS之前我们必须要理解下面的几个重要的概念。
MTU: Maxitum Transmission Unit 最大传输单元
MSS: Maxitum Segment Size 最大分段大小
PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值。
MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC
由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。
由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址 48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分 4Bytes(这个部分有时候也把它叫做FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes,这个值我们就把它称之为MTU。这个就是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片。
当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同。我们可以看下面的简单的组网图。
PC1(192.168.0.1)―――Router――――Internet―――-www server(238.136.1.1)
建立tcp连接的两端在三次握手时会协商tcp mss大小,具体如下:
pc1 发出syn报文,其中option选项填充的mss字段一般为1460,同样www server收到syn报文后,会发送syn+ack报文应答,option选项填充的mss字段也为1460;协商双方会比较syn和syn+ack报文中mss字段大小,选择较小的mss作为发送tcp分片的大小。通过比较,协商双方的tcp mss都是1460。
对于网络层的上层协议而言(我们以TCP/IP协议族为例)网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(就是传输层)的实现中往往会对此加以注意!所以会在IP数据包包头里面加上一个标签:DF(Donot Fragment)。这样当这个IP数据包通过多个路由其进行网络传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包。然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题,不过幸运的是大部分网络链路都是MTU1500或者大于1500。
对于UDP协议而言,这个协议本身是无连接的协议,对数据包的到达顺序以及是否正确到达不甚关心,所以一般UDP应用对分片没有特殊要求。
对于TCP协议而言就不一样了,这个协议是面向连接的协议,对于TCP协议而言它非常在意数据包的到达顺序以及是否传输中有错误发生。所以有些TCP应用对分片有要求---不能分片(DF)。PPPoE所谓PPPoE就是在以太网上面跑PPP协议,就是在我们传输的链路层协议上添加一层PPPOE的报头。这样相当于整个数据包的变大了。
为什么会产生这种奇怪的需求呢?这是因为随着宽带接入(这种宽带接入一般为Cable Modem或者xDSL或者以太网的接入)由于以太网缺乏认证计费机制而传统运营商是通过PPP协议来对拨号等接入服务进行认证计费的,PPPoE带来了好处,也带来了一些坏处,比如:二次封装耗费资源,降低了传输效能等等,最大的坏处就是PPPoE导致MTU变小了,以太网的MTU是1500,再减去PPP的包头包尾的开销(8Bytes),就变成1492。
如果两台主机之间的某段网络使用了PPPoE那么就会导致某些不能分片的应用无法通讯。
这个时候就需要我们调整一下主机的MTU,通过降低主机的MTU,这样我们就能够顺利地进行通讯了。当我们的PC链接服务器的时,只能PING通,却不能通过网页访问时,这时我们就需要考虑MSS值的大小是否正确了,一般情况下都是由MSS值不对造成的。
当然对于TCP应用而言还有另外的解决方案。就是在TCP 中有一个OPTIONS这里有一个MSS的选项。MSS 就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。这是在IPV4的协议中,而在IPV6协议中一般情况下MSS的值为1440,这是因为,IPv6中的IP头的大小是40bytes,比IPV4的大20个bytes.
我们试想一下,如果我们在中间路由器上把每次TCP连接的最大MSS进行调整这样使得通过PPPoE链路的最大MSS值加上数据包头包尾不会超过PPPoE的MTU大小1492这样就不会造成无法通讯的问题.所以上面的问题可以通过ip tcp adjust-mss 1452来解决。很多的路由器配置上会有这个配置选项。如果对于IPV6的话可以调整为1432.当我们不改变中间路由器的情况下,也可以通过改变我们主机的MTC来解决。当主机的MTU值从1500改变为1492时,就相当于去掉了EthernetII和PPPOE头部的长度。
主要参考:http://www.net130.com/CMS/Pub/network/network_protocal/2005_09_22_97176.ht
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小蓝xlanll/article/detail/483071?site
推荐阅读
article
HarmonyOS
开发
案例:【
图片
编辑
】...
本篇Codelab是基于ArkTS的声明式
开发
范式的样例,主要介绍了
图片
编辑
实现过程。
图片
的解码。使用PixelMap进...
赞
踩
article
李沐
45
_
SSD
实现
——自学笔记...
使用L1范数损失,即预测值和真实值之差的绝对值。掩码变量bbox
_
masks令负类锚框和填充锚框不参与损失的计算。最后,...
赞
踩
article
k8s
之
istio
实现
金丝雀
发布
(
1
)_
istio
实现
灰度
发布
项目实战...
灰度
发布
也叫
金丝雀
部署,是指通过控制流量的比例,
实现
新老版本的逐步更替。比如对于服务 A 有 version
1
、 ve...
赞
踩
article
PyTorch
中文版
官方教程_
pytorch
官方教程
中文版
...
PyTorch
中文版
官方教程来了。
PyTorch
是近期最为火爆的深度学习框架之一,然而其
中文版
官方教程久久不来。近日...
赞
踩
article
AI
对话
AI
才是正解?
KAUST
研究团队提出基于
角色扮演
的大模型交互代理
框架
CAMEL
_
camel
机...
CAMEL
的工作流首先需要开启一个
角色扮演
会话,如下图所示,用户会向
CAMEL
输入一个初步想法:“为股票市场开发一个交易...
赞
踩
article
GIT配置
代理服务器
_
git
代理服务器
...
开启v2ray后,对于
git
配置相应的代理操作_
git
代理服务器
git
代理服务器
...
赞
踩
article
如何解决
Java
中的
IllegalArgumentException
异常
?_
java
.lan...
非法参数
异常
(
IllegalArgumentException
)的抛出是为了表明一个方法被传递了一个非法参数。该
异常
扩展...
赞
踩
article
【
机器
学习
】
机器
学习
学习
笔记 - 监督
学习
-
多项式
回归
决策树
回归
- 03...
【
机器
学习
】
机器
学习
学习
笔记 - 监督
学习
-
多项式
回归
\
决策树
回归
- 03【
机器
学习
】
机器
学习
学习
笔记 - 监督学...
赞
踩
article
【关联规则
数据挖掘
】
Python
实现FP_Growth和
apriori
算法遇到的各种
问题
及源码_ha...
此文章记录实现过程中遇到的各种
问题
问题
1freqs = [v[0] for v in sorted(headerTabl...
赞
踩
article
STM32
CubeMX | 基于
STM32
使用
HAL
库实现
USB
组合设备之多路
CDC
_
usbd
_cd...
STM32
HAL
库实现
USB
组合设备之多路
CDC
实现目录
STM32
HAL
库实现
USB
组合设备之多路
CDC
实现_usb...
赞
踩
article
浅谈
人机
融合
中人的
有效
介入
...
【摘要】
人机
融合
是促进智能领域发展的
有效
手段,同时也是工效学的重要内容。而人的
介入
对
人机
融合
智能的实施效果有着非常重要的...
赞
踩
article
提升
权限
_
权限
提升
T1548.002 绕过
UAC
...
1. 什么是
UAC
用户帐户控制 (
UAC
) 是Windows Vista 和 Windows Server 2008 ...
赞
踩
article
数据分析
环境
搭建...
自学一门编程语言着实不易。从我自己的经历看,你需要翻越好几个障碍,从心态,到体力,再到思维,最终才能成为一名优秀的程序员...
赞
踩
article
VMWare
ubuntu
虚拟机
异常
关闭
打开报错:该
虚拟机
似乎
正
在
使用
中(下班
虚拟机
最好
关闭
,免得又...
今天早上来的时候发现电脑重启了,也不知道什么原因导致的重启然后
虚拟机
就
打不开
了显示“该
虚拟机
似乎
正
在
使用
中”_
异常
关机后...
赞
踩
article
chatGPT
镜像
网站
可用于满足日常办公学习
,
搜集了
5
个站点!...
为大家整理了
5
个国内好用的
chatGPT
镜像
网站
。
chatGPT
镜像
网站
可用于满足日常办公学习
,
搜集了
5
个站点! ...
赞
踩
article
关于大
模型
学习
中
遇到
的
4_大
模型
中
的
多层
mlp
...
MLP是
多层
感知器(Multilayer Perceptron)
的
缩写,
多层
感知机(MLP)是一种人工神经网络(ANN)...
赞
踩
article
ubuntu
22.04打RT实时内核补丁-内核版本
6.6
.15_
linux
-
headers
6.6
...
uname -r。_
linux
-
headers
6.6
.15-
rt22
linux
-
headers
6.6
.15-
rt22
...
赞
踩
article
付款
3331
什么
意思
_
分期
付款
收割“智商税”...
90后,00后都提前消费过吧!也都
分期
付款
过吧!看着
分期
付款
的手续费,有过一丝疑惑吗?
分期
付款
其实再收割很多一部分人...
赞
踩
article
写一个
微信
小
程序
的
轮播
图...
在
微信
小
程序
中实现
轮播
图可以使用自带的swiper组件。首先,在页面的wxml文件中引入swiper组件,并为其添加图片...
赞
踩
article
亚信
安全
:发挥
MSS
托管
安全
运营
服务
优势 让你真正“减负”_
mss
服务
...
随着企业数字化转型的全面提速,网络
安全
管理所面对的环境发生了巨大变化,仅通过网络
安全
产品堆叠,以及人拉肩扛的被动式防御运...
赞
踩
相关标签
harmonyos
鸿蒙开发
openharmony
typescript
鸿蒙系统
移动开发
程序员
深度学习
pytorch
人工智能
python
SSD
神经网络
李沐
linux
k8s
kubernetes
istio
运维
git
github
前端
java
开发语言
机器学习