累计通过CCIE学员人数:自2011年起累计1001人 当年156人 当月5人
咨询热线:0571-86959638咨询QQ:804990984
思唯网络学院

TCP分析总结

1.1.     TCP的概述

TCP提供了一个类似点到点的连接,但是实际上这条连接并不存在。TCP是建立在IP协议之上的,而IP协议又是无连接的,所以TCP使用序列号、确认、校验和、定时器以及窗口机制等措施在无连接的服务之上提供实现面向连接,尽力而为的转发服务。

1.2.     TCP报头格式


源端口和目的端口的字段长度各为16为,其作用是为封装的数据指定了源和目的应用程序。
序列号字段长度为32位,其作用是标记数据段,如果一个数据需要多个数据段段传送,那么接收者可以根据序列号对数据段进行重组。
确认序列号字段长度为32位,其作用是接收者告诉发送者下一次要收到的序列号,通过这样,发送者可以知道那些数据段没有到达,以便即时重传对应数据。
报头长度字段长度为4位,描述的是以32位为单位的报头长度。报头由于有可选项,所以长度是可变的。
保留字段为4位,通常设置为0。
标记字段长度位八位,包括 8个 1 bit的标记,用于流和连接控制。它们从左到右的分别是:拥塞窗口减少(Congestion Window Reduced,CWR)、ECN-Echo(ECE)、紧急(URG)、确认(ACK)、弹出(PSH)、复位(RST)、同步(SYN)、结束(FIN)。必须的标记字段是SYN、ACK、FIN。
窗口大小字段长度为16位,其作用是为了能够在传输几段数据之后对这几段的数据进行确认,可以优化TCP的通信。
紧急指针字段只有在标记字段中的URG位置位时才被使用。
 

1.3.     SYN/ACK/FIN/RST作用

(1)借助一个telnet不登陆的会话来进行分析:

TELNET是基于TCP的,所以TELNET的通信先要经过TCP的三次握手。从上图可以看到,SYN仅仅出现在第一个数据帧中,序列号字段为0,发起者是12.1.1.1,目标是12.1.1.2。这表明SYN代表一个会话的开始建立。
第二个数据帧是目标向发起者回复的,可以看到SYN和ACK被置位。ACK置位是对发起者的SYN进行确认,TCP是期望确认,也就是用希望收到的下一个报文的序列号来进行确认,由上图可以看到确认序号为1,证实了这一点。TCP看似是一个双向通信,其实是由两个通信组成的。所以目标主机会向发起者发送一个SYN,而这个SYN和ACK在同一个报文中被置位,节省资源。
第三个数据帧是对目标主机发起的SYN进行确认。
至此TCP连接建立成功,可以传输数据。由上图可知,紧接着就是传输TELNET的数据。
正如TCP建立连接一样,是建立两个单向连接,则断开连接则是断开两个单向连接。这里关注最后四个数据帧。可以看出是目标主机主动断开。所以FIN被置位。因为要对上一个数据帧进行确认,所以ACK被置位。因为TENLNET失败,需要马上把连接断开,所以PSH被置位。然后发起者对这个数据帧进行确认,回复一个ACK,至此,目标主机到发起者的单向会话关闭。同理,发起者到目标主机会话关闭。
(2)不开启TELNET服务的TCP会话

可以看到目标主机回复报文中RST被置位。代表发起者的报文目标主机并不接受,RST置位告诉发起者所发起的TCP连接被重置了。

1.4.     总结

  1. TCP是基于IP的,由于IP本身不可靠,TCP只能在不可靠的基础上利用序列号、确认、校验和窗口等机制做到面向连接,尽力而为的转发服务。
  2. TCP看似一条点到点的双向连接,实际上是由两个单向连接组成的双向连接。

Copyright © 2011-2018 杭州思唯网络 QM_Network All Rights Reserved. | 浙ICP备17056685号