TCP从建立到关闭的数据流分析(包括序列号和确认序列号的计算)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yeguiyou002/article/details/52724467

        客户端和服务器的TCP连接的建立通过3步TCP发送和接收完成的。当建立了TCP连接后,客户端和服务器就可以通过TCP传输数据了。当数据传输完成后,如果要关闭TCP连接,那么要通过4步TCP发送和接收完成的。

客户端IP 192.168.1.103,TCP端口为58178,服务器的IP为183.61.49.185,服务器端口号是80

TCP连接建立的第一步:客户端发送SYN数据报给服务器,客户端的初始序列号是3033681289,确认序列号是0(因为新建连接,所有没有要确认的数据,所以为0)。SYN=1;

TCP连接建立的第二步:服务器收到客户端发送的SYN报文后,也发送一个SYN数据报给客户端,同时包含对客户端发送的SYN数据报的确认信息。服务器端的初始序列号是1128834323,确认序列号是3033681290(客户端的初始序列号是3033681289+1,因为SYN也占用一个序号)。SYN=1;ACK=1

TCP连接建立的第三步:客户端发送ACK数据报给服务器,确认服务器发送的SYN报文。发送序列号是3033681290,确认序列号是1128834324(服务器的初始序列号是1128834323+1,因为SYN也占用一个序号)ACK=1

至此,客户端和服务器的TCP连接就建立起来了。

客户端开始发送数据,数据报的序列号是3033681290,确认序列号是1128834324,PSH=1;ACK=1;发送的正文长度726字节。

服务器在收到客户端发送的数据后发送ACK给客户端,服务器发送的确认报文序列号是1128834324,确认序列号变成了3033382016(3033681290 + 726),ACK=1;

服务器接着发送162字节的数据给客户端,发送的序列号是1128834324,确认序列号是3033382016,正文长度162字节,PSH=1;ACK=1;

服务器发送FIN给客户端,发送序列号是1128834486(1128834324 + 162),确认序列号是3033382016,FIN=1;ACK=1;

客户端返回ACK报文,发送序列号3033382016,确认序列号1128834487(1128834486 + 1,FIN也要占用一个序号),ACK=1.——客户端确认了服务器发送的162字节数据和FIN信号

客户端也发送FIN报文给服务器,发送序列号是3033382016,确认序列号是1128834487,FIN=1;ACK=1。

最后服务器在收到客户端发送的FIN后,直接发送RST报文给客户端,通过发送RST复位TCP连接,客户端在收到RST后不再响应,而是通知应用程序TCP连接已经终止了。

至此一个TCP建立、发送数据和关闭连接的过程就此结束。

附件是Wireshark抓取的TCP数据流。(去掉后缀.jpeg)


展开阅读全文

没有更多推荐了,返回首页