TCP三次握手
SYN是标志位,SYN=1表示请求连接
客户端发送请求
三次握手的目的是建立可靠的通信信道,双方确认自己与对方的发送与接收机能正常。
-
第一次握手:
- Client确认了:无
- Server确认了:对方发送正常 第二次握手:
- Client确认了:自己接收、发送正常;对方接收、发送正常
- Server确认了:自己接收正常;对方发送正常 第三次握手:
- Client确认了:自己接收、发送正常;对方接收、发送正常
- Server确认了:自己接收、发送正常;对方接收、发送正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
三次握手的另外一个目的就是确认双方都支持TCP,告知对方用TCP传输。
-
第一次握手:
- Server 猜测Client可能要建立TCP请求,但不确定,因为也可能是Client乱发了一个数据包给自己 第二次握手:
- 通过ACK=X+1,Client知道Server是支持TCP的,且理解了自己要建立TCP连接的意图 第三次握手:
- 通过ACK=Y+1,Server知道Client是支持TCP的,且确实是要建立TCP连接
TCP四次挥手
客户端和服务端都可以发送请求
双方发送这样的数据包和握手的情况类似,只是为了让对方知晓自己理解了对方的意图。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
四次挥手的根本原因是:一方发送FIN只表示自己发完了所有要发的数据,但还允许对方继续把没发完的数据发过来。