TCP/UDP协议-三次握手、四次挥手

1、什么是TCP协议

 tcp可靠数据传输协议;为了实现可靠传输,在通信之前需要先建立连接,也叫"双向通路"
就是说客户端与服务端要建立连接,服务端与客户端也需要建立连接,当然建立的这个双向通路它只是一个虚拟的链路,不是用网线将两个设备真实的捆绑在一起;。

虚拟链路的作用︰由于每次通信都需要拿到IP和Port,那就意味着每次都需要查找,建立好虚拟通路,下次两台主机之间就可以直接传递数据;

2、三次握手

2.1、流程说明

第一次:客户端要与服务端建立连接,需要发送请求连接消息;
第二次︰服务端接收到数据后,返回一个确认操作(至此客户端到服务端链路建立成功);
第三次:服务端还需要发送要与客户端建立连接的请求;
第四次︰客户端接收到数据后,返回一个确认的操作(至此服务端到客户端的链路建立成功)﹔
由于建立连接时没有数据传输,所以第二次确认和第三次请求可以合并为一次发送;

2.2、流程图

2.3、序号(seq)和确认号(ack)

2.3.1、为什么有序号和确认号

TCP协议为了实现可靠传输,通信双方需要判断自己已经发送的数据包是否都被接收方收到,如果没收到,就需要重发。为了实现这个需求,就引出序号(seq)和确认号(ack)的使用。

2.3.2、序号和确认号的示例

发送方在发送数据包时,序列号(假设为123),那么接收方收到这个数据包以后,就可以回复一个确认号(124=123+1)告诉发送方“我已经收到了你的数据包,
你可以发送下一个数据包,序号从124开始”,这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到,需要重发。

2.3.3、序号和确认号流程图

3、四次挥手

3.1、流程说明

第一次挥手:客户端(服务端也可以主动断开)向服务端说明想要关闭连接;
第二次挥手∶服务端会回复确认。但不是立马关闭,因为此时服务端可能还有数据在传输中;
第三次挥手∶待到服务端数据传输都结束后,服务端向客户端发出消息,我要断开连接了;
第四次挥手:客户端收到服务端的断开信息后,给予确认。服务端收到确认后正式关闭。

3.2、流程图

4、转换状态

4.1、三次握手-转换状态

4.1.1、转换状态说明

三次握手状态转换:
1、客户端发送syn包向服务端请求建立TC连接,客户端进入SYN_SEND 状态;
2、服务端收到请求之后,向客户端发送SYN+ACK 的合成包,同时自身进入SYN_RECV状态;
3、客户端收到回复之后,发送ACK信息,自身进入ESTABLISHED状态;
4、服务端收到ACK数据之后,进入ESTABLISHED状态。

4.1.2、转换状态图

4.2、四次挥手-转换状态

4.2.1、转换状态说明

四次挥手过状态转换:
1、客户端发送完数据之后,向服务器请求断开连接,自身进入FIN_WAIT_1状态;
2、服务端收到FIN包之后,回复ACK包表示已经收到,但此时服务端可能还有数据没发送完成,自身进入CLOSE_WAIT 状态,表示对方已发送完成且请求关闭连接,自身发送完成之后可以关闭连接;
3、服务端数据发送完成后,发送FIN包给客户端,自身进入LAST_ACK 状态,等待客户端ACK确认;
4、客户端收到FIN包之后,回复一个ACK包,并进入TIME_WAIT 状态;
注意:TIME_WAIT状态比较特殊,当客户端收到服务端的FIN包时,理想状态下,是可以直接关闭连接了;

但是有几个问题: 问题1:网络是不稳定的,可能服务端发送的一些数据包,比服务端发送的FIN包还晚到; 问题2:如果客户端回复的ACK包丢失了,服务端就会一直处于LAST_ACK状态,如果客户端没有关闭,那么服务端还会重传FIN包,然后客户端继续确认;
所以客户端如果ACK后立即关闭连接,会导致数据不完整、也可能造成服务端无法释放连接。所以此时客户端需要等待2个报文生存最大时长,确保网络中没有任何遗留报文了,再关闭连接;
如果机器TIME_WAIT过多,会造成端口会耗尽,可以修改内核参数 tcp_tw_recycle
=1端口重用;

4.2.2、转换状态图

5、UDP协议

udp是不可靠传输协议;不可靠指的是传输数据时不可靠;
udp协议不需要先建立连接,只需要获取服务端的ip+port,发送完毕也无需服务器返回ack ;
udp协议如果在发送在数据的过程中丢了,那就丢了;

 

posted @ 2023-04-24 20:47  小粉优化大师  阅读(126)  评论(0)    收藏  举报