下面是一个简化的TCP数据传输过程的具体数据例子,相较之前的文章《TCP协议工作原理详细介绍(形象举例版)》,作者在此将相关的形象说明进行了数据化,同时也基于Wireshark抓取的TCP数据进行了关键参数抽取,便于大家能够更快的了解TCP的建立过程。感兴趣的朋友可以下载软件“Wireshak”自行抓取解析一下,该软件对16进制报文做了充分的解析,也通过更直观的UI界面展示相关内容,同时也提取出了相关的关键参数。
目录
1、三次握手(建立连接)
1.1、第一次握手(SYN)
1.2、第二次握手(SYN-ACK)
1.3、第三次握手(ACK)
2、数据传输
2.1、发送数据
2.2、接收数据
3、四次挥手(终止连接)
3.1、第一次挥手(FIN)
3.2、第二次挥手(ACK)
3.3、第三次挥手(FIN)
3.4、第四次挥手(ACK)
4、总结
1、三次握手(建立连接)
1.1、第一次握手(SYN)
A的计算机发送一个TCP段:
名称 | 参数 |
源端口 | 12345 |
目的端口 | 80 |
序列号 | 1000(ISN,Initial Sequence Number) |
SYN标志 | 设置 |
1.2、第二次握手(SYN-ACK)
B的计算机响应:
名称 | 参数 |
源端口 | 80 |
目的端口 | 12345 |
序列号 | 2000(B的ISN) |
确认号 | 1001(A的序列号+1) |
SYN标志 | 设置 |
ACK标志 | 设置 |
1.3、第三次握手(ACK)
A的计算机确认:
名称 | 参数 |
源端口 | 12345 |
目的端口 | 80 |
序列号 | 1001(A的序列号) |
确认号 | 2001(B的序列号+1) |
ACK标志 | 设置 |
2、数据传输
2.1、发送数据
A的计算机发送数据 “Hello, Bob!”:
名称 | 参数 |
源端口 | 12345 |
目的端口 | 80 |
序列号 | 1001(A的序列号) |
确认号 | 2001(B的序列号) |
数据长度 | 11 |
数据内容 | “Hello, Bob!” |
PSH标志 | 设置 |
ACK标志 | 设置 |
2.2、接收数据
B的计算机收到数据:
名称 | 参数 |
源端口 | 80 |
目的端口 | 12345 |
序列号 | 2001(B的序列号) |
确认号 | 1012(A的序列号+数据字节长度) |
数据长度 | 11 |
数据内容 | “Hello, Bob!” |
PSH标志 | 设置 |
ACK标志 | 设置 |
3、四次挥手(终止连接)
3.1、第一次挥手(FIN)
A的计算机发送结束连接请求:
名称 | 参数 |
源端口 | 12345 |
目的端口 | 80 |
序列号 | 1012(A的序列号) |
确认号 | 2001(B的序列号) |
FIN标志 | 设置 |
ACK标志 | 设置 |
3.2、第二次挥手(ACK)
B的计算机确认收到结束连接请求:
名称 | 参数 |
源端口 | 80 |
目的端口 | 12345 |
序列号 | 2001(B的序列号) |
确认号 | 1013(A的序列号+1) |
ACK标志 | 设置 |
3.3、第三次挥手(FIN)
B的计算机发送自己的结束连接请求:
名称 | 参数 |
源端口 | 80 |
目的端口 | 12345 |
序列号 | 2001(B的序列号) |
确认号 | 1013(A的序列号) |
FIN标志 | 设置 |
ACK标志 | 设置 |
3.4、第四次挥手(ACK)
A的计算机确认B的结束连接请求:
名称 | 参数 |
源端口 | 12345 |
目的端口 | 80 |
序列号 | 1013(A的序列号) |
确认号 | 2002(B的序列号+1) |
ACK标志 | 设置 |
4、总结
在上述例子中,序列号和确认号是用来确保数据的有序传输和可靠性。每个TCP段都包含一个序列号,用于标识该段中的第一个字节,而确认号则是期望收到的下一个TCP段的序列号。通过这种方式,TCP协议能够确保数据的完整性和正确性。