用协议分析工具学习TCP/IP 二[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

esized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" border="0" alt=""/>



表4 IP数据报格式及首部中的各字段


图12中所宣布分45 00—71 01为IP的头信息。这些数是十六进制表示的。一个数占4位,例如:4的二进制是0100

4位版本:表示目前的协议版本号,数值是4表示版本为4,因此IP有时也称作IPv4;

4位首部长度:头部的是长度,它的单位是32位(4个字节),数值为5表示IP头部长度为20字节。

8位服务类型(TOS):00,这个8位字段由3位的优先权子字段,现在已经被忽略,4位的TOS子字段以及1 位的未用字段(现在为0)构成。4位的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1位最多只能有一个为1,本例中都为0,表示是一般服务。

16位总长度(字节数):总长度字段是指整个IP数据报的长度,以字节为单位。数值为00 30,换算为十进制为48字节,48字节=20字节 的IP头+28字节的TCP头,这个数据报只是传送的控制信息,还没有传送真正的数据,所以目前看到的总长度就是报头的长度。

16位标识:标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1,第3行为数值为30 21,第5行为30 22,第7行为30 23。分片时涉及到标志字段和片偏移字段,本文不讨论这两个字段。

8位生存时间(TTL):TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。ttl的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去1。可根据TTL值判断服务器是什么系统和经过的路由器。本例为80,换算成十进制为128,WINDOWS操作系统TTL初始值一般为128,UNIX操作系统初始值为255,本例表示两个机器在同一网段且操作系统为WINDOWS。

8位协议:表示协议类型,6表示传输层是TCP协议。

16位首部检验和:当收到一份I P数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1,即检验和错误,那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

32位源IP地址和32位目的IP地址:实际这是IP协议中核心的部分,但介绍这方面的文章非常多,本文搭建的又是一个最简单的网络结构,不涉及路由,本文对此只做简单介绍,相关知识请参阅其它文章。32位的IP地址由一个网络ID和一个主机ID组成。本例源IP地址为C0 A8 71 D0,转换为十进制为:192.168.113.208; 目的IP地址为C0 A8 71 01,转换为十进制为:192.168.113.1。网络地址为192.168.113,主机地址分别为1和208,它们的网络地址是相同的所以在一个网段内,这样数据在传送过程中可直接到达。

TCP协议头信息

如表5是ICP协议的头信息。




表5 TCP包首部



第三行TCP的头信息是:04 28 00 15 3A DF 05 53 00 00 00 00 70 02 40 00 9A 8D 00 00 02 04 05 B4 01 01 04 02

端口号:常说FTP占21端口、HTTP占80端口、TELNET占23端口等,这里指的端口就是TCP或UDP的端口,端口就像通道两端的门一样,当两机进行通讯时门必须是打开的。源端口和目的端口各占16位,2的16次方等于65536,这就是每台电脑与其它电脑联系所能开的“门”。一般作为服务一方每项服务的端口号是固定的。本例目的端口号为00 15,换算成十进制为21,这正是FTP的默认端口,需要指出的是这是FTP的控制端口,数据传送时用另一端口,第三组的分析能看到这一点。客户端与服务器联系时随机开一个大于1024的端口,本例为04 28,换算成十进制为1064。你的电脑中了木马也会开一个服务端口。观察端口非常重要,不但能看出本机提供的正常服务,还能看出不正常的连接。Windows察看端口的命令时netstat。

32位序号:也称为顺序号(Sequence Number),简写为SEQ,从上面三次握手的分析可以看出,当一方要与另一方联系时就发送一个初始序号给对方,意思是:“让我们建立联系吧?”,服务方收到后要发个独立的序号给发送方,意思是“消息收到,数据流将以这个数开始。”由此可看出,TCP连接完全是双向的,即双方的数据流可同时传输。在传输过程中双方数据是独立的,因此每个TCP连接必须有两个顺序号分别对应不同方向的数据流。

32位确认序号:也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答,在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表示确实收到这些数据。在第三组的分析中将看到这一过程。

4位首部长度:。这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。

6个标志位。

URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据

ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。

PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。

RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。

SYN 置1时用来发起一个连接。

FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。


图13的3个图分别为3-5行TCP协议的头信息,这三行是三次握手的过程,我们看看握手的过程标志位发生了什么?

如图13-1请求端208号机发送一个初始序号(SEQ)987694419给1号机。标志位SYN置为1。

如图13-2服务器1号机收到这个序号后,将应答信号(ACK)和随机产生一个初始序号(SEQ)1773195208发回到请求端208号机,因为有应答信号和初始序号,所以标志位ACK和SYN都置为1。

如图13-3请求端208号机收到1号机的信号后,发回信息给1号机。标志位ACK置为1,其它标志为都为0。注意此时SYN值为0,SYN是标示发起连接的,上两部连接已经完成。





16位窗口大小:TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16字节字段,因而窗口大小最大为65535字节。

16位检验和:检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

16位紧急指针:只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

选项:图13-1和图13-2有8个字节选项,图13-3没有选项。最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。图13-1可以看出208号机可以接受的最大字节数为1460字节,1460也是以太网默认的大小,在第三组的数据分析中可以看到数据传送正是以1460字节传送的。

握手小结

上面我们分开讲了三次握手,看着有点散,现在小结一下。


 

本文关键:用协议分析工具学习TCP/IP 二
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top