文档章节

为什么TCP/IP包长会大于MTU?

呵大官人
 呵大官人
发布于 2015/07/22 23:20
字数 974
阅读 379
收藏 2
点赞 3
评论 1

前戏

当你看到这个标题第一眼到你看到这篇文章的内容期间,你心里也许会想,特么在逗我呢吧?TCP/IP包怎么可能会大于MTU?难道书上都是骗人的?确实在tcp/ip第一卷里面描述IP协议分片一节里面讲到,当IP包大于MTU时,会对包进行分片。既然会分片,那么这个包大于MTU是几个意思?且听我慢慢道来。

什么是MTU

MTU(Maximum Transmission Unit),即最大传输单元,意思是在网络通信协议里规定最大传输的字节数量,通常是1500字节(不同网络大小不一样,可使用ifconfig查看),最小是46。

起因

首先事情的起因是因为跟前端调数据,前端老吼没收到数据,我说发了,他说没收到,我说发了........双方难分胜负,唯有抓包,方能一决雌雄。说时迟那时快,抄起tcpdump就开干,然后在抓包过程中,偶尔有那么几个包居然比MTU还长,我当时就纳了闷了,说好的IP包分片呢?人与机器最基本的信任都没有了,我还打个卵的码啊。于是翻了一些资料,终于知道这个分片不是发生在IP协议上,而是在TCP协议上(其实主要还是不熟悉tcpdump,因为如果有tcp分片,seq格式就是当前seq:下一个seq,并且连续几个包的ack都一样)。包内容如下:


结果

虽然现在已经知道是tcp分片而非ip分片,但是包的大小还是超出了MTU,于是又一轮google,原来有个东西叫tso(tcp segment offload),意思是如果网卡支持tso,操作系统发送大的tcp包时,不需要消耗CPU来计算分片,而是将整个包发送到网卡,由网卡的NPU来进行分片处理,这样还能减少TCP头的传输次数(一个64K的数据包,需要45个分片,那么将多传输1760字节(40x44)的tcp头)。

查看你网卡是否支持tso,请使用如下命令:

ethtool --show-offload eth0

这时候我们来禁用一下tso,只需要执行如下命令

ethtool -K eth0 tso off

再来一轮tcpdump测试,发现数据包终于正常了,不再会大于MTU了。


其实无论服务器发送的包多大,反正最终都会被分片,可能是操作系统,可能是网卡,因此客户端收到的包都是小于MTU的。


分片

为什么ip有分片了,tcp还要再搞一个分片呢?因为ip层不保证数据成功送达,并且ip层分片可能发生在源主机,也可能在路由器上,一旦有分片丢失,将会造成整个ip包重传(其实这个重传是tcp层发起的,因为目标机器没有收到完整的ip包,也不会有ack,那么源机器在一定时间内就会发起重传,导致整个tcp包又被传了一次),因此就有了tcp分片,当一片数据丢失,只需要重传丢失的那一片即可。


结论

tcpdump抓包的数据是在包送到网卡之前的信息,所以在tcpdump里面的包大小可能会大于MTU,但是一旦数据进入网卡后的处理信息在tcpdump里面是反应不了的,因此数据包被分片这样的消息自然是没办法知道,只有在目标方才能反应出具体的分包细节。所以这次发现tcp/ip包长大于MTU其实算是个“假象”,因为在真正的链路层上传输数据时是不会大于MTU的。


参考资料

https://en.wikipedia.org/wiki/Large_segment_offload

© 著作权归作者所有

共有 人打赏支持
呵大官人

呵大官人

粉丝 118
博文 17
码字总数 15799
作品 1
普陀
加载中

评论(1)

tuber
tuber
wen性能指南上提了一句tso,学习了
Ipsec VPN + GRE隧道的MTU设置详细解析

Cisco给出的Ipsec VPN MTU设置标准是1400字节,MSS值是1360。一般平时都这样设置,但为什么这样设置呢??偶来解析下,也是对自己的总结。 以下是GRE Tunnel MTU 设置的几个例子 1. GRE隧道的...

彦天天
2017/04/02
0
0
小议TCP的MSS(最大分段)以及MTU

[背景知识] MTU: Maxitum Transmission Unit 最大传输单元 MSS: Maxitum Segment Size 最大分段大小(偶是直译,翻译的不好,不要打 俺PP) PPPoE: PPP Over Ethernet(在以太网上承载PPP协议...

moodlxs
2015/02/16
0
0
MTU等参数详解

MTU等参数详解 1. 概述 本文主要分析二层MTU,IP MTU和MSS的概念以及它们之间的关系。这三个概念对于路由器来说非常重要,常常很多网页打不开等问题都是这几个参数没配置好导致的。 2. MTU 最...

SeanWoo
02/27
0
0
网络基础 — 浅析IP/TCP协议分片

浅析IP/TCP协议分片 首先我们需要知道一个概念,MTU是链路层中的网络对数据帧的一个限制,以以太网为例,MTU为1500个字节. 一个IP数据报在以太网中传输,如果它 的长度大于该MTU值,就要进行分...

Dawn_sf
01/31
0
0
Golang实现简单tcp服务器04 -- 服务器的粘包处理

什么是粘包 一个完成的消息可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题 TCP粘包和拆包产生的原因 应用程序写入数据的字节...

victoriest
2015/06/02
0
0
TCP协议粘包和拆包解析

TCP是一个"流"协议,没有边界的一段数据.像打开自来水管一样,连成一片,没有边界. TCP协议并不了解上层的业务在做什么东西,有什么含义,它会根据自己的缓冲区的实际情况进行数据包的划分. 所以,...

ParkJun
2016/03/02
1K
0
Netty解决半包(TCP粘包/拆包导致)读写问题

TCP粘包/拆包 TCP是个"流"协议,所谓流,就是没有界限没有分割的一串数据。TCP会根据缓冲区的实际情况进行包划分,一个完整的包可能会拆分成多个包进行发送,也用可能把多个小包封装成一个大...

天冰
2014/06/19
0
0
TCP-MSS, PMTU 详解- MTU工具解析与常见问题汇总-下篇

大家好 在《MTU工具解析与常见问题汇总-上篇》中,我们一起讨论了MTU的基本定义,以及数据包分片的具体细节,同时也简单列举了MTU不匹配导致的问题和对网络数据传输的危害。 既然MTU问题多多...

姜汁啤酒
06/29
0
0
pptp搭建的vpn代理上网很慢解决

原文地址 http://hi.baidu.com/gvmfexzehygpqze/item/dcae158f8305365d840fabc9 pptp搭建的vpn代理上网很慢解决 问题 用pptp搭建了linux平台的vpn服务器,拨入后访问内网ftp,下载文件极慢;...

piolong
2014/07/01
0
0
UDP数据包大小的问题

在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的发送聊天消息的情况...

长平狐
2012/09/03
368
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

桌面虚拟化VDI(Virtual Desktop Infrastructure)

为了保证员工(客户)不把公司的资料复制、传输给别人。可以把员工平时办公放在服务器上做。所以使用桌面虚拟化。就是把一个服务器虚拟出很多桌面系统(如:windows)。 桌面虚拟化最大的优势...

王坤charlie
8分钟前
2
0
自我审视及职业规划

啊哈,不知不觉已经工作了3年了。程序员作为一门技术工作,如果分级的话我的能力如何呢?该怎么提升呢? 话说,我现在的能力属于中低级的层次吧,努力在向高级努力。为什么这么说呢: 因为我觉...

一口今心
10分钟前
1
0
《PHP和MySQL Web 开发》 第12章 MySQL高级管理

我决定好好写学习笔记了,对应上书上的目录和重要信息。不瞎jb写了。从这章开始吧,然后之前写的会编辑后重发。嗯,就酱。 12.1 深入理解权限系统 妈蛋 开头就卡住了。。。我先回去修改之前的...

十万猛虎下画山
11分钟前
1
0
Python 3.6:多态的实现

多态的作用不用多说,C++用如下条件来实现多态: 要有继承 要有虚函数函数重写 要有父类指针(父类引用)指向子类对象 实际上C++使用VPTR指针来完成这个事情,其是设计模式的基础,软件分层的基...

全部原谅
11分钟前
0
0
纯Python实现鸢尾属植物数据集神经网络模型[图]

纯Python实现鸢尾属植物数据集神经网络模型[图]: 尝试使用过各大公司推出的植物识别APP吗?比如微软识花、花伴侣等这些APP。当你看到一朵不知道学名的花时,只需要打开植物识别APP,拍摄一张...

原创小博客
14分钟前
0
0
2018安卓巴士开发者大会打造Android技术盛宴

2018安卓巴士开发者大会打造Android技术盛宴2018安卓巴士开发者大会将于8月25日在上海举行,作为中国最具前沿性、专业性的安卓技术会议,将邀请来自爱奇艺、阿里、饿了么等知名企业的一线工程...

逆鳞龙
15分钟前
0
0
Spring框架中的设计模式(二)

Spring框架中的设计模式(二) 原创: 瑞查德-Jack 在 上一篇 中我们在Spring中所谈到的设计模式涉及到了创建模式三剑客和1个行为模式(解释器模式)。这次我们会将眼光更多地关注在具有结构性和...

瑞查德-Jack
16分钟前
1
0
JS基础-DOM Event对象

简介 Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。 事件通常与函数结合使用,函数不会在事件发生前被执行! ==注:详表见《JS基础-...

ZHAO_JH
18分钟前
0
0
tomcat 8.5 远程登录管理页面

1、访问的来源受限注释掉 <?xml version="1.0" encoding="UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. S......

xixingzhe
25分钟前
0
0
JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token - 在Web应用间安全地传递信息 Sep 06, 2015 in Engineering JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 ...

祖冲之
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部