2.1.1 TCP协议基础(2)
源端口:16bit源端口指的是发起通信的端口号。
目的端口:16bit目的端口指的是传输目的地的端口号。
序号:该序号是32bit的无符号数,到达232-1后又从0开始,表示在这个报文段中的第一个数据字节的编号。利用序号段可以纠正传输导致的乱序,从而重组分段报文。
确认序号:TCP使用32确认号标识下一个希望收到的报文的第一个字节的编号。因此,确认号应当是上一次成功接收到的数据字节序号加1。
首部长度:4bit,该字段以字为单位计量TCP头长度。
保留:6bit恒为0,将来定义新的用途。
URG:紧急指针有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:同步序号,用来发起一个连接。
FIN:发送端完成发送任务。
窗口:该16bit字段表明接收端声明可以接收的TCP数据段大小,最大为65535字节。
校验和:该16bit由发送端计算存储,由接收端进行验证。验证整个TCP,包括首部和数据。
紧急指针:只有当URG置1时才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。通常用于发送紧急数据。
选项:常见可选字段是最长报文大小。
数据:TCP数据部分可选。建立和释放连接时,双方交换的只有TCP首部。
3. TCP通信
(1) 在使用TCP进行通信时,首先需建立连接。建立连接需要经过如下3次握手。
① 请求端(客户)发送一个SYN段,指明客户打算连接的服务器的端口以及SEQ(初始序号)。
② 服务器发回包含服务器的SEQ的SYN报文段作为应答。同时序号(ISN)加1,用以对客户的SYN报文段进行确认。
③ 客户将确认服务器的ISN加1,用以对服务器的SYN报文段进行确认。
具体过程如图2-2所示。
建立连接之后需要停止连接,停止连接需要经过4次握手,这是由TCP的半关闭(Half-close)造成的。停止连接的具体过程如图2-3所示。
为了加深读者对TCP处理过程的理解,接下来通过一个简单例子来说明,此例的运行过程如图2-4所示。
|
| 图2-2 TCP建立连接 |
|
| 图2-3 TCP停止连接 |