TCP连接建立需要三次握手,这是一个确保通信双方能够可靠地进行数据传输的过程。三次握手的详细步骤如下:
-
第一次握手(SYN):
-
第二次握手(SYN-ACK):
-
第三次握手(ACK):
- 客户端接收到服务器的SYN-ACK包后,会发送一个ACK(确认)包,确认服务器的初始序列号。
- 这个包中包含对服务器初始序列号的确认,以及客户端的初始序列号加1。
- 客户端进入ESTABLISHED状态,表示连接已经建立。
- 服务器接收到客户端的ACK包后,也进入ESTABLISHED状态,连接正式建立。
案例说明
假设客户端A(IP: 192.168.1.100)想要与服务器B(IP: 192.168.1.200)建立TCP连接,端口号分别为12345和80。
-
第一次握手:
-
第二次握手:
- 服务器B接收到SYN包后,发送SYN-ACK包到客户端A:
- 源IP: 192.168.1.200
- 目标IP: 192.168.1.100
- 源端口: 80
- 目标端口: 12345
- 序列号: 2000(假设)
- 确认号: 1001(客户端的序列号+1)
- 标志位: SYN=1, ACK=1
- 服务器B接收到SYN包后,发送SYN-ACK包到客户端A:
-
第三次握手:
- 客户端A接收到SYN-ACK包后,发送ACK包到服务器B:
- 源IP: 192.168.1.100
- 目标IP: 192.168.1.200
- 源端口: 12345
- 目标端口: 80
- 序列号: 1001(客户端的序列号+1)
- 确认号: 2001(服务器的序列号+1)
- 标志位: ACK=1
- 客户端A接收到SYN-ACK包后,发送ACK包到服务器B:
至此,TCP连接建立完成,客户端和服务器都可以开始进行数据传输。
总结
三次握手的过程确保了双方都准备好进行数据传输,并且双方都确认了对方的初始序列号。这个过程是TCP协议可靠性的基础,避免了数据包的丢失和重复。