TCP报文格式
32位序号:随机生成,唯一标识当前报文的序号是多少,seq表示
32位确认序号:对上一条发送的信息进行一个消息的确认,ack表示
ACK:确认标志位,一位,只能表示0/1。
SYN:1:发起一个新的连接
FIN:1:结束一个连接
两次握手
说明:客户端向服务端发送报文,服务端收到了,说明服务端接受客户端的消息没问题。但服务端发给客户端的消息,客户端一定能收到么?服务端还是不知道。
为了安全可靠:
1:客户端知道我能连上服务端,服务端也能连上我;
2:服务端知道我能连上客户端,客户端也能连上我。
此时两次握手只能保证情景1,保证不了情景2,因为第二次握手对服务端来说,只知道我能连上客户端,但不知道客户端能不能连上我。所以需要客户端发送第三次握手进行确认,要是服务端能收到,则说明我服务端知道你客户端也能连上我。
三次握手
四次挥手
第一次挥手:服务器知道了客户端要和我断开连接,但此时服务端不一定最好准备,以为此时服务端可能还有未发送完的消息,还要继续发送。
第二次挥手:此时对服务端而言,只能对消息进行一个确认,告诉客户端我知道你要和我断开连接了,但我这边可能还没做好准备,你得等我。
第三次挥手:服务端发给客户端:我准备好和你断开连接了
第四次挥手:客户端发给服务端:确认收到服务端断开连接的消息。
通过四次连接,不管客户端还是服务端,都做好断开连接的准备,就断开连接了。