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则可以重传)