实现ip数据包抓取并分析_一次简单的http请求的报文分析 tcpdump wireshark MTU MSS基本概念...

学习于:https://juejin.im/book/5c70dbbe51882562046911bc/section/5c90d1d55188252d7e34d708

在服务器上首先使用 tcpdump -i any port 8080 -nn -A -w test.pcap 进行数据包的截取,然后在客户端进行一次http带参请求。最后把test.pcap文件拿到Windows上使用wireshark进行分析。

下面是整体的结构:

b7a24073a0a197e22b79cb01a5fe7186.png

客户端这边是get请求, /blog/index.jsp?content=123

然后当时写的时候一直使用base64编码,所以返回的数据是中文没啥问题,后面的数字不除了问题。

429b4aa4e9417a2fa55116d71353b9f5.png

三次挥手和四次握手就不多说了,感觉大家应该都再熟悉不过了。

这次的关键是熟悉几个基本概念。MTU MSS

先看MTU:最大传输单元(英语:MaximumTransmissionUnit,缩写MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)

通过netstat -i 可以查询使用网卡的MTU大小。

19d816d624c7962ff8e816d078090755.png

docker0的可以不管,我们关注etho对应的MTU即可。

先来简单了解一下以太网的最大帧和最小帧。

参考: https://blog.csdn.net/ixidof/article/details/7799891

57c339d458d825862ceb3b953f07546e.png

这里主要关注 6字节源mac,6字节目的mac,2字节长度 ,4字节CRC校验。

(这里由于wireshark自身过滤的问题,我们可以观察到数据包在以太网层上的数据是 12字节的源mac和目标mac,再加上2字节表示ipv4或者ipv6 ,因为wireshark就是根据以太网协议进行解析的,并且,当你是从服务器上把text.pcap文件拿到windows上查看时,wireshark还会帮你把以太网层的去掉,变成linux cooked capture这东西

9a1803eb730d661c4c40b38d046de7a8.png

这里就有14+4=18字节的数据。加上前面的7+1=8字节。一般来说大家容易忽略掉这9个字节,因为这是一种通信需要,但是里面存储的信息对上层无用。

以太网最小帧大小为64. 64=18+46

以太网最大帧大小为1518 1518=18+1500

这里注意,数据长度限制为46-1500.

1500,就是我们说的MTU。和前面服务器查询出来的数据一致。

注意,这1500字节的数据已经不包含以太网层的数据了,也就是mac地址之类的信息。

如下,我们一般抓取到的数据都是这样分布的。

b2db2597f85e177a3d131533ce1f8180.png

MTU是以太网层往下的部分。也就是说,它包括了IP层的源目标的IP地址之类的信息。

然后看MSS:

参考百度百科:

MSS(Maximum Segment Size,最大报文长度),是TCP协议定义的一个选项,MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度

MSS是TCP数据包每次能够传输的最大数据分段

为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以一般MSS值1460

即 MTU(1500) - IP数据包报头(20)- TCP数据报包头(20)= MSS(1460)

然而大多数时候都达不到MSS的长度。

一般来说在3次握手的时候就会传输MSS这类数据:

103fde76a2c7fb3499fe2dcfa3d6f8b4.png

可以看到syn和syn ack包都是有MSS=1460的指示。

然后拿个包来解析一下:

06e7345a4d32a5a3f52452627be70acb.png

应用层为http协议:

43e93e0ee8e2023636341fbc059c7c94.png

基本上到这里,大家应该对MTU,MSS这两个基本概念熟悉了吧。简单说,MTU就是以太网层数据域的最大长度,MSS就是TCP层数据域的最大长度。

如果按7层协议分:ip是属于网络层,tcp是传输层。mac地址那部分(我叫做以太网层)应该是数据链路层。即 数据链路层---网络层---传输层---应用层。

欢迎交流讨论。


版权声明:本文为weixin_33515785原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。