下面通过分析用iris捕获的包来分析一下TCP/IP的工作过程,为了更清晰的解释数据传送的过程,我们按传输的不同阶段抓了四组数据,分别是查找服务器、建立连接、数据传输和终止连接。每组数据,按下面三步进行解释。
1)下图显示的是1、2行的数据
图9
2)解释数据包
这两行数据就是查找服务器及服务器应答的过程。
在第1行中,源端主机的MAC地址是00:50:FC:22:C7:BE。目的端主机的MAC地址是FF:FF:FF:FF:FF:FF,这个地址是十六进制表示的,F换算为二进制就是1111,全1的地址就是广播地址。所谓广播就是向本网上的每台网络设备发送信息,电缆上的每个以太网接口都要接收这个数据帧并对它进行处理,这一行反映的是步骤5)的内容,ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。网内的每个网卡都接到这样的信息“谁是192.168.113.1的IP地址的拥有者,请将你的硬件地址告诉我”。
第2行反映的是步骤6)的内容。在同一个以太网中的每台机器都会"接收"到这个报文,但正常状态下除了1号机外其他主机应该会忽略这个报文,而1号的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。告知自己的IP地址和MAC地址。第2行可以清楚的看出1号回答的信息__自己的MAC地址00:50:FC:22:C7:BE。
这两行反映的是数据链路层之间一问一答的通信过程。这个过程就像我要在一个坐满人的教室找一个叫“张三”的人,在门口喊了一声“张三”,这一声大家都听见了,这就叫广播。张三听到后做了回应,别人听到了没做回应,这样就与张三取得了联系。
3)头信息分析
如下图左栏所示,第1数据包包含了两个头信息:以太网(Ethernet)和ARP。
图10
下表2是以太网的头信息,括号内的数均为该字段所占字节数,以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0806。
第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是1号机的(00 50 FC 22 C7 BE)。ARP应答是直接送到请求端主机的。
行 |
以太网目的地址(6) |
以太网源地址(6) |
帧类型(2) |
1 |
FF FF FF FF FF FF |
00 50 FC 22 C7 BE |
06 06 |
2 |
00 50 FC 22 C7 BE |
00 50 27 F6 50 53 |
06 06 |
表2
下表3是ARP协议的头信息。硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0800即表示IP地址。它的值与包含I P数据报的以太网数据帧中的类型字段的值相同。接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。Op即操作(Opoperation),1是ARP请求、2是ARP应答、3是RARP请求和4为RARP应答,第二行中该字段值为2表示应答。接下来的四个字段是发送端的硬件地址、发送端的IP地址、目的端的硬件地址和目的端IP地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。
表3的第2行为应答,当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
行 |
硬件类型 (2) |
协议类型 (2) |
硬件地址 长度(1) |
协议地址 长度(1) |
Op (2) |
发送端以太网地址(6) |
发送端IP地址(4) |
目的以太网地址(6) |
目的IP地址(4) |
1 |
00 00 |
08 00 |
06 |
06 |
00 01 |
0050FC22C7BE |
C0A871D0 |
000000000000 |
C0A871D1 |
2 |
00 00 |
08 00 |
06 |
06 |
00 02 |
005027F65053 |
C0A871D1 |
0050FC22C7BE |
C0A871D0 |
表3
第二组 建立连接
1)下图显示的是3-5行的数据
图11
2)解释数据包
这三行数据是两机建立连接的过程。
这三行的核心意思就是TCP协议的三次握手。TCP的数据包是靠IP协议来传输的。但IP协议是只管把数据送到出去,但不能保证IP数据报能成功地到达目的地,保证数据的可靠传输是靠TCP协议来完成的。当接收端收到来自发送端的信息时,接受端详发送短发送一条应答信息,意思是:“我已收到你的信息了。”第三组数据将能看到这个过程。TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。建立连接的过程就是三次握手的过程。
这个过程就像要我找到了张三向他借几本书,第一步:我说:“你好,我是担子”,第二步:张三说:“你好,我是张三”,第三步:我说:“我找你借几本书。”这样通过问答就确认对方身份,建立了联系。
下面来分析一下此例的三次握手过程。
1))请求端208号机发送一个初始序号(SEQ)987694419给1号机。
2)) 服务器1号机收到这个序号后,将此序号加1值为987694419作为应答信号(ACK),同时随机产生一个初始序号(SEQ)1773195208,这两个信号同时发回到请求端208号机,意思为:“消息已收到,让我们的数据流以1773195208这个数开始。”
3))请求端208号机收到后将确认序号设置为服务器的初始序号(SEQ)1773195208加1为1773195209作为应答信号。
以上三步完成了三次握手,双方建立了一条通道,接下来就可以进行数据传输了。
下面分析TCP头信息就可以看出,在握手过程中TCP头部的相关字段也发生了变化。
3)头信息分析
如图12所示,第3数据包包含了三头信息:以太网(Ethernet)和IP和TCP。
头信息少了ARP多了IP、TCP,下面的过程也没有ARP的参与,可以这样理解,在局域网内,ARP负责的是在众多联网的计算机中找到需要找的计算机,找到工作就完成了。
以太网的头信息与第1、2行不同的是帧类型为0800,指明该帧类型为IP。
图12