简述TCP的三次握手。
第一步,是请求端(客户端)发送一个包含 SYN 即同步(Synchronize)标志的TCP 报文,SYN 同步报文会指明客户端使用的端口以及 TCP 连接的初始序号。
第二步,服务器在收到客户端的 SYN 报文后,将返回一个 SYN+ACK 的报文,表示 客 户 端 的 请 求 被 接 受 , 同 时 TCP 序 号 被 加 一 , ACK 即 确 认(Acknowledgement)。
第三步,客户端也返回一个确认报文 ACK 给服务器端,同样 TCP 序列号被加一,到此一个 TCP 连接完成。然后才开始通信的第二步:数据处理。
三次握手的过程:
1、首先由Client发送请求连接即SYN=1,声明自己的序号时seq=x
2、然后Server 进行回复确认,即 SYN=1 ,声明自己的序号是 seq=y, 并设置为ack=x+1
3、最后Client 再进行一次确认,设置 ack=y+1
为什么要三次握手:
第一次握手:客户发送请求,此时服务器知道客户能发;
第二次握手:服务器发送确认,此时客户知道服务器能发能收;
第三次握手:客户发送确认,此时服务器知道客户能收。
TCP四次挥手过程(断连接的过程):
1、发送方发送FIN报文:当应用程序完成数据传输后,发送方向接收方发送一个FIN报文,表示
数据传输完成,要求关闭连接。此时,发送方进入FIN_WAIT_1(等待对方FIN)状态,等待接收
到确认报文。
2、接收方发送ACK报文:接收方收到发送方的FIN报文后,向发送方发送一个确认报文,表示已
经收到了关闭连接的请求,此时,接收方进入CLOSE_WAIT(等待关闭状态)状态。
3、接收方发送FIN报文:接收方在发送ACK报文后,通知自己的应用程序可以关闭连接了,向发
送方发送一个FIN报文,此时,接收方进入LAST_ACK(等待最后的ACK状态)状态。
4、发送方发送ACK报文:发送方收到接收方的FIN报文后,向接收方发送一个确认报文,表示已
经收到了关闭连接的请求,此时,发送方进入TIME_WAIT(2MSL)状态。接收方在收到这个确
认报文后,进入CLOSED(关闭连接)状态,整个连接关闭。
注意:第四次挥手后,发送方并不是立即进入CLOSED状态,而是等待一段时间(称为2MSL,即
两倍的最长报文段寿命),这是为了保证在这段时间内可以收到可能在传输中丢失的ACK报文。
如果在2MSL时间内没有收到回复,发送方会认为连接已经被完全关闭,进入CLOSED状态。
为什么需要等待2MSL:
1. 最后一个报文没有确认;
2. 确保发送方的ACK可以到达接收方;
3. 2MSL时间内没有收到,则接收方会重发;
4. 确保当前连接的所有报文都已经过期
标签:ACK,报文,TCP,发送,四次,接收,FIN,握手 From: https://blog.51cto.com/u_16230968/7149384