TCP 协议位于传输层,为了提供可靠的字节流服务。为了传输方便,把大块数据分割为数据包进行管理,且 TCP 协议能够确认数据最终是否到达对方,且在传输时是有序的。
1. 建立连接(三次握手)
使用了 TCP 的标志 SYN(synchronize)和 ACK(acknowledgement)
第一次,建立连接时,客户端 A 发送 SYN 包(SYN=j)到服务器 B,服务器 B 收到后知道客户端希望建立连接。
第二次,服务器 B 收到 SYN 包,确认是 A 的 SYN,发 ACK=j+1,同时自己也发 SYN=k。
第三次,客户端需要发送 ACK=k+1 确认,说知道了你要和我建立连接,否则,服务端不知道自己发的消息客户端能不能收到。
两方都知道 自己能发送消息,也可以接受消息。
第三次握手防止已经失效的 TCP 请求突然又到达服务端,服务端误以为有新的 TCP 请求,会一直等待,浪费资源
2. 断开连接(四次挥手)
使用了 FIN 标志,当发了 FIN 标志后,这个方向终止连接,但是收到 FIN 的仍然可以发数据。另外,先执行关闭的一方将执行主动关闭,否则是被动关闭。
第一次,客户端 A 发一个 FIN=l,关闭与服务端 B 的数据传输。
第二次,服务端收到 FIN=l,返回一个 ACK=l+1,代表知道客户端 A 关闭数据传输了。(客户端已经准备取消连接了,但是服务端还没有)
第三次,服务端 B 关闭与客户端 A 的连接,发送一个 FIN=k 给客户端 A。
第四次,客户端 A 发 ACK=k+1 确认。