TCP连接的三次握手与四次挥手

前言

1、首先回顾一下称七层网络模型和分别对应的协议

序号 名称 协议
7 应用层 HTTP、SMTP、FTP、Telnet、RTSP
6 表示层 XDR、AFP、NCP
5 会话层 TLS、RPC、ASP、Winsock
4 传输层 TCPUDP、SCTP、SPX、ATP
3 网络层 IP、IPX、RIP、ICMP、IGMP
2 数据链路层 以太网、ATM、HDLC
1 物理层 线路、无线电、光纤、双绞线

常见的网络层:

1
2
3
4
5
● Socket —— 会话层

● TCP/UDP —— 传输层

● HTTP —— 应用层

二、三次握手与四次挥手的简单理解

2.1 三次握手

建立起一个TCP连接需要经过“三次握手”,断开需要经过“四次挥手”

凭证

1
2
3
4
5
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

2.2 四次挥手

1
2
3
4
5
6
7
第一次:客户端向服务器发出停止传输请求;

第二次:服务器收到客户端发出的停止传输请求后,告诉客户端我已经收到了你的停止请求;

第三次:服务器确认,现在停止给你传输信息了,并把停止传输请求发给客户端;

第四次:客户端收到服务器发出的停止传输请求,也确认;

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

-------------本文结束感谢您的阅读-------------
0%