TCP三次握手和四次挥手

三次握手

TCP三次握手和四次挥手
a 时刻,A 准备就绪,发送 SYN 包给 B,尝试建立连接

b 时刻,B 收到 A 发来的 SYN 包,知道 A 要请求建连,回 SYN ACK 包,告诉 A 自己收到了建连请求,可以建连了

c 时刻,A 收到了 B 的回复,知道 B 准备好了,链路通畅,可以发送数据了。回 ACK 告知 B 收到了 B 的回复,下面要开始发送该数据了

d 时刻,B 收到了 A 的回复,知道 A 接下来要发数据了;至此,AB 双方都确认整个链路已经可靠了,接下来可以发送数据了

TCP三次握手和四次挥手

为什么要多次确认呢?

TCP 是传输层的协议,是建立在物理层、数据链路层、网络层之上的协议,而底层的网络是不可靠的,路由可能会出问题,网关可能会出问题,网线可能会出问题,A 没法保证自己发出来的消息 B 一定能收到,所以一定要反馈机制,即 ACK,这样才能在不可靠的网络上构建可靠的传输层。


四次挥手

TCP三次握手和四次挥手
a 时刻,A 向 B 发出 FIN 包,表示自己没有数据要发送了

b 时刻,B 收到 FIN 包,回复 FIN ACK,表示收到了 A 的 FIN 包,不会再接收 A 的数据了

B 在发完 FIN ACK 后,可能还有数据要发给 A,这个数据是不能停止发送的,有数据还是需要继续发送

d 时刻,B 发完了数据,也发出 FIN 包,告诉 A 自己的数据发完了,不再发送数据了

e 时刻,A 收到了 B 的 FIN 包,知道 B 也没有数据要发送了,回复 FIN ACK,连接断开

TCP三次握手和四次挥手
为什么是四次呢?

其实断开连接和建立连接还是不一样的。建连的时候,只要双方都告知对方自己准备好了就可以,但是断连的时候,一方提出要断开连接,不再发数据,另一方不能立即断开,因为这一方可能还有数据要发送,直到数据全部发送完成后才能确认断开。


TCP的6个标志位

SYN(synchronous),建立联机

ACK(acknowledgement),确认

PSH(push),传输

FIN(finish),结束

RST(reset),重置

URG(urgent),紧急