tcp/ip学习之12: tcp协议之三次握手
一. TCP 协议的三次握手


二. 抓包分析

1.第一次握手
0000 02 00 00 30 00 4a 00 e0 4c 68 03 8d 08 00 45 00
0010 00 34 f2 9b 40 00 80 06 00 00 c0 a8 01 68 c0 a8
0020 01 02 dd b0 13 89 53 e5 15 40 00 00 00 00 80 02
0030 ff ff 83 e1 00 00 02 04 05 b4 01 03 03 08 01 01
0040 04 02
这段数据是一个以太网帧的十六进制表示,包含了TCP协议的第一次握手(SYN报文)。我们可以逐步解析这个数据包,以了解其各个字段的含义。
以太网帧结构
以太网帧的结构如下:
- 目的MAC地址(6字节)
- 源MAC地址(6字节)
- 类型字段(2字节)
- 数据(可变长度)
- 帧校验序列(FCS,4字节,可选)
数据解析
1. 目的MAC地址和源MAC地址
- 目的MAC地址:
00 00 00 30 00 4a - 源MAC地址:
00 e0 4c 68 03 8d
2. 类型字段
- 类型字段:
08 00,表示这是一个IPv4数据包。
3. IPv4报头
IPv4报头的格式如下:
- 版本(4位):4
- 首部长度(4位):5(表示20字节的IP报头)
- 服务类型(8位):0x00
- 总长度(16位):
00 34(十进制52字节) - 标识(16位):
f2 9b - 标志和片偏移(16位):
40 00(标志位为4,表示不分片) - 生存时间(TTL,8位):
80(十进制128) - 协议(8位):
06(表示TCP) - 头部校验和(16位):
00 00(校验和由发送方计算,接收方验证) - 源IP地址(32位):
c0 a8 01 68(十进制192.168.1.104) - 目的IP地址(32位):
c0 a8 01 02(十进制192.168.1.2)
4. TCP报头
TCP报头的格式如下:
- 源端口(16位):
dd b0(十进制56784) - 目的端口(16位):
13 89(十进制5001) - 序列号(32位):
53 e5 15 40(十进制1406062080) - 确认号(32位):
00 00 00 00(十进制0,因为这是SYN报文,没有确认号) - 数据偏移(4位):
80(十进制128,表示32字节的TCP报头) - 保留(6位):
00 - 标志位(6位):
02(二进制000010,表示SYN标志位为1) - 窗口大小(16位):
ff ff(十进制65535) - 校验和(16位):
83 e1(校验和由发送方计算,接收方验证) - 紧急指针(16位):
00 00(十进制0,表示没有紧急数据)
5. TCP选项
TCP选项部分如下:
- 最大报文段长度(MSS):
02 04 05 b4(十进制1460字节) - 窗口缩放因子:
01 03 03 08(十进制8) - 时间戳选项:
01 01(启用时间戳) - NOP(无操作):
04(表示一个NOP选项) - NOP(无操作):
02(表示一个NOP选项)
总结
这是一个TCP SYN报文,用于建立连接。以下是关键信息:
- 目的MAC地址:
00:00:00:30:00:4a - 源MAC地址:
00:e0:4c:68:03:8d - 源IP地址:
192.168.1.104 - 目的IP地址:
192.168.1.2 - 源端口:
56784 - 目的端口:
5001 - 序列号:
1406062080 - 标志位:
SYN - 窗口大小:
65535 - TCP选项:
- MSS:
1460 - 窗口缩放因子:
8 - 时间戳选项:启用
- NOP:两个NOP选项
- MSS:
这个报文是客户端向服务器发送的SYN报文,请求建立TCP连接。
2.第二次握手
0000 00 e0 4c 68 03 8d 02 00 00 30 00 4a 08 00 45 00
0010 00 2c 00 03 00 00 ff 06 38 0e c0 a8 01 02 c0 a8
0020 01 68 13 89 dd b0 00 00 19 7a 53 e5 15 41 60 12
0030 0b 68 95 19 00 00 02 04 05 b4 00 00
这段数据是一个以太网帧的十六进制表示,包含了TCP协议的第二次握手(SYN-ACK报文)。我们可以逐步解析这个数据包,以了解其各个字段的含义。
以太网帧结构
以太网帧的结构如下:
- 目的MAC地址(6字节)
- 源MAC地址(6字节)
- 类型字段(2字节)
- 数据(可变长度)
- 帧校验序列(FCS,4字节,可选)
数据解析
1. 目的MAC地址和源MAC地址
- 目的MAC地址:
02 00 00 30 00 4a - 源MAC地址:
00 e0 4c 68 03 8d
2. 类型字段
- 类型字段:
08 00,表示这是一个IPv4数据包。
3. IPv4报头
IPv4报头的格式如下:
- 版本(4位):4
- 首部长度(4位):5(表示20字节的IP报头)
- 服务类型(8位):
00 - 总长度(16位):
00 2c(十进制44字节) - 标识(16位):
00 03 - 标志和片偏移(16位):
00 00(标志位为0,表示不分片) - 生存时间(TTL,8位):
ff(十进制255) - 协议(8位):
06(表示TCP) - 头部校验和(16位):
38 0e(校验和由发送方计算,接收方验证) - 源IP地址(32位):
c0 a8 01 02(十进制192.168.1.2) - 目的IP地址(32位):
c0 a8 01 68(十进制192.168.1.104)
4. TCP报头
TCP报头的格式如下:
- 源端口(16位):
13 89(十进制5001) - 目的端口(16位):
dd b0(十进制56784) - 序列号(32位):
00 00 19 7a(十进制6526) - 确认号(32位):
53 e5 15 41(十进制1406062081,这是对第一次握手报文序列号的确认) - 数据偏移(4位):
60(十进制96,表示24字节的TCP报头) - 保留(6位):
00 - 标志位(6位):
12(二进制000100,表示SYN和ACK标志位为1) - 窗口大小(16位):
0b 68(十进制2920) - 校验和(16位):
95 19(校验和由发送方计算,接收方验证) - 紧急指针(16位):
00 00(十进制0,表示没有紧急数据)
5. TCP选项
TCP选项部分如下:
- 最大报文段长度(MSS):
02 04 05 b4(十进制1460字节) - NOP(无操作):
00 - NOP(无操作):
00
总结
这是一个TCP SYN-ACK报文,用于响应第一次握手(SYN报文)。以下是关键信息:
- 目的MAC地址:
02:00:00:30:00:4a - 源MAC地址:
00:e0:4c:68:03:8d - 源IP地址:
192.168.1.2 - 目的IP地址:
192.168.1.104 - 源端口:
5001 - 目的端口:
56784 - 序列号:
6526 - 确认号:
1406062081(对第一次握手报文序列号的确认) - 标志位:
SYN和ACK - 窗口大小:
2920 - TCP选项:
- MSS:
1460 - NOP:两个NOP选项
- MSS:
这个报文是服务器对客户端发送的SYN报文的响应,表示服务器已经准备好建立连接,并且确认了客户端的序列号。
3.第三次握手
# 0000 02 00 00 30 00 4a 00 e0 4c 68 03 8d 08 00 45 00
0010 00 28 f2 9c 40 00 80 06 00 00 c0 a8 01 68 c0 a8
0020 01 02 dd b0 13 89 53 e5 15 41 00 00 19 7b 50 10
0030 ff ff 83 d5 00 00
这段数据是一个以太网帧的十六进制表示,包含了TCP协议的第三次握手(ACK报文)。我们可以逐步解析这个数据包,以了解其各个字段的含义。
以太网帧结构
以太网帧的结构如下:
- 目的MAC地址(6字节)
- 源MAC地址(6字节)
- 类型字段(2字节)
- 数据(可变长度)
- 帧校验序列(FCS,4字节,可选)
数据解析
1. 目的MAC地址和源MAC地址
- 目的MAC地址:
02 00 00 30 00 4a - 源MAC地址:
00 e0 4c 68 03 8d
2. 类型字段
- 类型字段:
08 00,表示这是一个IPv4数据包。
3. IPv4报头
IPv4报头的格式如下:
- 版本(4位):4
- 首部长度(4位):5(表示20字节的IP报头)
- 服务类型(8位):
00 - 总长度(16位):
00 28(十进制40字节) - 标识(16位):
f2 9c - 标志和片偏移(16位):
40 00(标志位为4,表示不分片) - 生存时间(TTL,8位):
80(十进制128) - 协议(8位):
06(表示TCP) - 头部校验和(16位):
00 00(校验和由发送方计算,接收方验证) - 源IP地址(32位):
c0 a8 01 68(十进制192.168.1.104) - 目的IP地址(32位):
c0 a8 01 02(十进制192.168.1.2)
4. TCP报头
TCP报头的格式如下:
- 源端口(16位):
dd b0(十进制56784) - 目的端口(16位):
13 89(十进制5001) - 序列号(32位):
53 e5 15 41(十进制1406062081) - 确认号(32位):
00 00 19 7b(十进制6527,这是对第二次握手报文序列号的确认) - 数据偏移(4位):
50(十进制80,表示20字节的TCP报头) - 保留(6位):
00 - 标志位(6位):
10(二进制000100,表示ACK标志位为1) - 窗口大小(16位):
ff ff(十进制65535) - 校验和(16位):
83 d5(校验和由发送方计算,接收方验证) - 紧急指针(16位):
00 00(十进制0,表示没有紧急数据)
总结
这是一个TCP ACK报文,用于完成三次握手过程。以下是关键信息:
- 目的MAC地址:
02:00:00:30:00:4a - 源MAC地址:
00:e0:4c:68:03:8d - 源IP地址:
192.168.1.104 - 目的IP地址:
192.168.1.2 - 源端口:
56784 - 目的端口:
5001 - 序列号:
1406062081 - 确认号:
6527(对第二次握手报文序列号的确认) - 标志位:
ACK - 窗口大小:
65535
这个报文是客户端对服务器发送的SYN-ACK报文的响应,表示客户端已经确认了服务器的SYN-ACK报文,TCP连接至此建立成功。

浙公网安备 33010602011771号