摘要:
本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析。
一、概述
TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,中间的分组交换机不维护任何连接状态信息。连接建立整个过程如下(即三次握手协议):
首先,客户机发送一个特殊的TCP报文段;
其次,服务器用另一个特殊的TCP报文段来响应;
最后,客户机再用第三个特殊报文段作为响应。
图1 三次握手协议示意图[1]
二、TCP报文格式
2.1 概述
为了提供可靠的数据传输,TCP报文首部字段有较多的字段,TCP报文格式如下图:
图2 TCP报文格式
源和目标端口
用于多路复用/多路分解来自或送至上层应用的数据,可以这样理解,端口用来标识同一台计算机的不同进程。
序列号和确认号
这两个字段是TCP可靠传输服务的关键部分,序列号是该报文段首字节的字节流编号(TCP把数据看成是有序的字节流,TCP隐式地对数据流的每个字节进行编号)。这样理解可能更直观,当报文被分解成多个报文段时,序列号就是报文段首字节在整个报文的偏移量。确定号指定下一个期待的字节。TCP是全双工的,假设从主机A接收到主机B的数据,则主机A填充进报文段的确认号是主机A期望从主机B收到的下一个字节序号。还没理清这两者的关系?见下图(三次握手):
图3 正常情况下TCP连接建立过程
首部长度(4位)
因为选项是不定长的,这就需要标识整个首部字段的