TCP协议的三次握手和四次挥手

TCP报文段格式图:

序号:seq序号,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

确认号:ack序号,只有ACK标志位为1时,确认序号字段才有效,Ack=seq+1。

标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等.
                    ACK:确认序号有效。
                    SYN:发起一个新连接。
                    FIN:释放一个连接。

三次握手:TCP协议是稳定的、可靠的、面向连接的协议,在建立TCP连接的时候需要经过三次握手的过程

1.Client端:发送SYN(标志位SYN=1)到服务端,表示请求互联(该报文段携带了一个序列号seq);

2.Server端:当接受到SYN时,表明有客户端在请求连接。这时向Client端发送SYN+ACK,标志位SYN=1,ACK=1(该报文段携带了确认号ack=seq+1,同时也有一个序列号seq`);

3.Client端:在接受到SYN+ACK后,再向Server端发送ACK,标志位ACK=1(该报文段携带了确认号ack=seq`+1)

      

帮助理解的例子:

Client: 你听得见我说话吗?

Server:嗯,听得见。

            你听得见我说话吗?

Client:我也能听见。

成功建立连接。

四次挥手:

1.Client端:发送一个FIN.

2.Server端:在接受到FIN之后,表明客户端想断开连接了。这时先发送ACK回客户端,客户端在接受到后将处于FIN-WAIT状态。

3.Server端:再发送FIN到客户端。

4.Client端:发送ACK到服务端,之后客户端进入Time-wait状态。如果Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了

 

帮助理解的例子:

1.Client端:我不想说话了。

2.Server端:好的,我知道了,但是我还有些话没有说完,稍等哈

3.Server端:我说完了

4.Client端:好的。(为什么会有这一次握手呢?因为客户端不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传)

原文地址:https://www.cnblogs.com/james111/p/7120456.html