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;