linux网络编程之TCP三次握手和四次挥手

1.在TCP连接的过程中,有三个阶段,分别是建立连接,传递数据和断开连接,通讯时序图如下所示:

                                   

2.结合TCP数据报格式分析建立连接的三次握手

  

               1)首先客户端发送一个带有SYN标志的TCP报文给服务器端,询问服务器端是否可以通信。其中32位序号为1000,数据大小为0,数据报文的最大长度为1460;

               2)服务器端接收到客户端的数据,回应客户端,想客户端发送一个报文,同时携带了SYN和ACK标志,其中SYN标志后的数据序号为服务器端给客户端发送的报文的32位序号为8000,询问客户端是否可以通信。ACK后面的数据为服务器端接受客户端数据后的确认序号(表示1001以前的数据报,服务器端都接收到了)。

               3)客户端再向服务器端发送一个ACK数据报,表示可以通信,此时通信开始。

3.数据传输

           数据传输的过程中,可能因为数据太大,超出了数据包可以容纳的最大数据,此时会将数据包分包处理,所以数据的传输过程并不是服务器和客户端的一来一回的通信。

4.TCP关闭连接的四次挥手

            由于TCP连接采用的是全双工的方式,因此每个方向都必须单独关闭,此时指定FIN标志来终止某个方向的连接。收到一个FIN意味着这个方向没有数据流动,另一个方向仍然可以发送数据(半关闭)。

           1)客户端发送FIN请求。

           2)服务端接收请求并发送ACK来允许请求关闭。

           3)服务器端向客户端发送FIN请求关闭连接。

           4)客户端发送ACK允许关闭。

5.注意事项

            TCP通信是面向连接的可靠数据包传递,相对于UDP的无连接不可靠报文传输而言,数据传递更加有保证。但是,TCP和UDP在数据传输中,都会出现丢包现象,只是TCP在出现丢包的时候,可以通过ACK后面的确定序号来告诉用户收到了哪些数据,如果出现丢包,则需要重新发送。

            TCP规定SYN位和FIN位都要占一个序号,虽然没有发送数据,但是发送了SYS/FIN位,所以下次发送数据时使用的序号需要+1;

发布了72 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/82596560
今日推荐