首先TCP要建立连接需要通信双方在进行通信之间进行三次握手。下面进行逐一解释。
第一次握手:
客户端向服务器发送SYN报文(即SYN=1),并进入SYN_SENT状态,等待服务器确认。
第二次握手:
首先服务器收到客户端的请求,向客户端回复一个确认信息(即ACK=1)。然后服务器再向客户端发送一个SYN报文(即SYN=1),请求客户端建立连接。最后服务器端进入SYN_RECV状态。
第三次握手:
客户端接收到服务器端的回复,客户端向服务发送确认报文即ACK报文(ACK=1),此后客户端和服务器端进入ESTABLISHED状态。
进行抓包测试实验:
电脑A:
IP: ac 10 17 b0 (172.16.23.176)
MAC: a8 5e 45 15 a4 32
电脑B:
IP: c0 a8 04 12 (192.168.4.18)
MAC: bc 62 0e 0a e0 29
第一次握手:
bc 62 0e 0a e0 29 a8 5e 45 15 a4 32 08 00 45 00
00 34 39 2a 40 00 40 06 00 00 ac 10 17 b0 c0 a8
04 12 eb f2 00 50 19 7f 47 7d 00 00 00 00 80 02
20 00 88 a1 00 00 02 04 05 b4 01 03 03 02 01 01
04 02
以太网首部 (14字节):bc 62 0e 0a e0 29 a8 5e 45 15 a4 32 08 00-
IP首部(20字节):45 00 00 34 39 2a 40 00 40 06 00 00 ac 10 17 b0 c0 a8 04 12-
TCP报文:eb f2 00 50 19 7f 47 7d 00 00 00 00 80 02 20 00 88 a1 00 00 02 04 05 b4 01 03 03 02 01 01 04 02-
源端口Source Port:eb f2
目的端口Destination Port:00 50
序列号Sequence Number:19 7f 47 7d
确认号Acknowledgment Number:00 00 00 00
首部长度Header Length:8
保留Reserved:0
标志位Flag:02 (即SYN = 1)
窗口大小Window size:02 00
校验和Checksum:88 a1
紧急指针Urgent Pointer:00 00
可选项Option: 02 04 05 b4 01 03 03 02 01 01 04 02
第二次握手:
a8 5e 45 15 a4 32 bc 62 0e 0a e0 29 08 00 45 00
00 34 25 bc 40 00 3e 06 8e 8d c0 a8 04 12 ac 10
17 b0 00 50 eb f2 2d 15 c7 ea 19 7f 47 7e 80 12
20 00 84 45 00 00 02 04 05 b4 01 03 03 02 01 01
04 02
以太网首部 (14字节):a8 5e 45 15 a4 32 bc 62 0e 0a e0 29 08 00 45 00-
IP首部(20字节):45 00 00 34 25 bc 40 00 3e 06 8e 8d c0 a8 04 12 ac 10 17 b0-
TCP报文: 00 50 eb f2 2d 15 c7 ea 19 7f 47 7e 80 12 20 00 84 45 00 00 02 04 05 b4 01 03 03 02 01 01 04 02-
源端口Source Port:00 50
目的端口Destination Port:eb f2
序列号Sequence Number:2d 15 c7 ea
确认号Acknowledgment Number:19 7f 47 7e
首部长度Header Length:8
保留Reserved:0
标志位Flag:12 (即SYN = 1 , ACK = 1)
窗口大小Window size:02 00
校验和Checksum:84 45
紧急指针Urgent Pointer:00 00
可选项Option: 02 04 05 b4 01 03 03 08 01 01 04 02
第三次握手:
bc 62 0e 0a e0 29 a8 5e 45 15 a4 32 08 00 45 00
00 28 39 2b 40 00 40 06 00 00 ac 10 17 b0 c0 a8
04 12 eb f2 00 50 19 7f 47 7e 2d 15 c7 eb 50 10
40 29 88 95 00 00
以太网首部 (14字节):bc 62 0e 0a e0 29 a8 5e 45 15 a4 32 08 00-
IP首部(20字节):45 00 00 28 39 2b 40 00 40 06 00 00 ac 10 17 b0 c0 a8 04 12-
TCP报文:eb f2 00 50 19 7f 47 7e 2d 15 c7 eb 50 10 40 29 88 95 00 00-
源端口Source Port:eb f2
目的端口Destination Port:00 50
序列号Sequence Number:19 7f 47 7e
确认号Acknowledgment Number:2d 15 c7 eb
首部长度Header Length:5
保留Reserved:0
标志位Flag:10 (即ACK = 1)
窗口大小Window size:40 29
校验和Checksum:88 95
紧急指针Urgent Pointer:00 00
以上为TCP的数据包,也是着重解析了TCP报文。
(今天先写到这,后面有补充再进行补充)