【linux tcp抓包之三次握手】

写在前面

这一篇章我们先简单说一下,linux下面的抓包。这样也方便我们后面去抓取nginx的包取进行分析。,同时也简单的说一下

这边我们是使用了tcpdump和Wireshark相结合的方法去分析,主要就是在tcpdump下面可以把包给写到文件中去,然后在Wireshark中去进行分析。

三次握手

我们先看一下抓取的tcp三次握手的包,如下图:
在这里插入图片描述

tcpdump

然后我们先简单说一下tcpdump的命令,当然我们也可以同man tcpdump来看详细的说明。
tcpduml -i 指定需要监听的网卡。我们可以通过tcpdump -D,看我们当前可以查看的网卡。
在这里插入图片描述

参数说明

-n 对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析;
-nn 除了-n的作用外,还把端口显示为数值,否则显示端口服务名。
-X 输出包的头部数据,会以16进制和ASCII两种方式同时输出。
-tttt 就是显示当前的时间戳,后面分别是年月日,时分秒 微妙

然后tcpdump这个参数是比较多的,大家可以man tcpdump去看看参数的说明。

然后 可以增加过滤比如指定host,port,proto等。
然后看一下我们这边的 tcpdump -i any -nn -n port -X 5051 。-i 指定所有的网卡,然后-nn 和-n 就是和上面说的一样,直接显示主机名和端口。
然后-X是说的是输出包的头部数据。然后port 5051就是指定了端口,因为我们的端口监听的这个端口。

返回值说明

然后我们说一下接下来的内容。就以第一个为主
2022-03-19 21:11:22.370405
这个是比较好理解的,就是当前的年月日,时分秒,然后最后一个是微妙数。

IP 127.0.0.1.42004 > 127.0.0.1.5051

然后这个说明用的是IP协议,然后首先是三次握手,是客户端主动链接,这里客户端启用了42004的临时端口去和服务进行链接。

Flags [S]

这个是一个标志位,在写在了tcp的header头中的。
然后我们先看看tcp header
在这里插入图片描述

然后看一下第四行的C,E,U,A,P,R,S,F,都代表着
在这里插入图片描述
SYN是这里面的同步位。
这里需要主要的是下面的Flags [S.]和 Flags [.],后面的.都是代表ACK的意思,这只这里省去了。
所以Flags [S.] 就是 SYN+ACK
Flags [.] 就是 ACK

win 43690, options [mss 65495,sackOK,TS val 251419064 ecr 0,nop,wscale 7], length 0

这个seq就是序号的意思,因为tcp规定,在三次握手中,即使没有发送数据,,也会消耗序号,观看我们的tcp header,这个seq就是 sequence number,占据16个位,所以最大是65535
win 就是窗口的大小,在tcp 头中就是 window size,可以看到是16个比特,单位是字节,因此字节的最大是2**16-1 = 65535 字节,但是在现在的带宽下,这会成为带宽的瓶颈,因为有一个窗口扩大因子。因此在本案例中,窗口真正的大小是 43690 * (2 ** 7) = 43690 * 128= 5592320。
窗口夸大因此在tcp的 扩展字段中,如图
在这里插入图片描述
在这里插入图片描述
其中kind=3是窗口扩大因子选项。
需要注意的是,在tcp中,往往会受到拥塞窗口的限制,所以真正的大小是窗口的真正的大小和拥塞窗口的最小值。
同时窗口扩大因子是在三次握手就固定的,后期不能修改

mss 65495

MSS(Maximum Segment Size,最大报文段大小)的概念是指TCP层所能够接收的最大段大小,该值只包括TCP段的数据部分,tcp头部和ip头部。可能很多人和MTU弄混,MTU是一个网络包的最大长度,以太网中一般为 1500 字节,这里我们用网上的一张图做介绍就一目了然

在这里插入图片描述
所以这里我们的tcp数据段最大是65495。

sackOK

发送端支持并同意使用SACK选。其实就是选择确认算法,当发生丢包的时候,只会重发丢弃的包也不会全部重发。

TS val 251419064 ecr 0,nop

TS就是Timpstamps ,时间错的意思,含义见下图
TS 和 ecr都是 tcp的扩展字段中的值,ecr在接收方会对发送放的TS进行计算并且返回给对端。

在这里插入图片描述

length 0

就是数据的长度,因为我们这次是三次握手,没有数据段的内容,所以数据段的长度是0。

协议头和包内容

其实就是让人迷惑的,这些是16进制和ASCII的形式显示,如下图所示
在这里插入图片描述
其实这些就是IP头+TCP头+包的内容,因为我们这个抓的是三次握手,没有内容。
首先我们来看一下IP头的部分,为了理解这个我们先看一下IP协议头
在这里插入图片描述
所以第一个4,就是代表了ipv4
第二个5 就是首部长度,单位是4字节,说明ip首部长度是5 * 4 =20字节。
所以接下来一直到第二行的7f 00 00 01都是说的ip首部。
然后接下来的都是tcp的协议头。
当然这些我们把tcddump -w out.cap.之后放到了WireShark中会更加直观,如图:
在这里插入图片描述

感兴趣的读者可以看一下wireshark抓包分析——TCP/IP协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值