eNewsTree.com

标题: 教程转载系列四:TCP_IP协议详解 [打印本页]

作者: mjordan    时间: 2015-5-27 05:27
标题: 教程转载系列四:TCP_IP协议详解
TCP/IP 协议详解
第一组 查找服务器
目前,网络的速度发展非常快,学习网络的人也越来越多,稍有网络常识的人都知道
TCP/IP 协议是网络的基础,是 Internet 的语言,可以说没有 TCP/IP 协议就没有互联网的
今天。目前搞网络的人非常多,许多人就是从一把夹线钳,一个测线器联网开始接触网络的,
如果只是联网玩玩,知道几个 Ping 之类的命令就行了,如果想在网络上有更多的发展不管
是黑道还是红道,必须要把 TCP/IP 协议搞的非常明白。
学习过 TCP/IP 协议的人多都有一种感觉,这东西太抽象了,没有什么数据实例,看完
不久就忘了。本文将介绍一种直观的学习方法,利用分析监测工具 IRIS 学习TCP/IP,在学
习的同时通过 IRIS 能直观的看到数据的具体传输过程,这对学习 TCP/IP 能起到事半功倍
的效果。
为了初学者更容易理解,本文将搭建一个最简单的网络环境,不包含子网。
二、试验环境
1、网络环境
如图 1 所示
为了表述方便,下文中 208 号机即指地址为 192.168.113.208 的计算机,1 号机指地址
为 192.168.113.1 的计算机。
2、操作系统
两台机器都为 Windows 2000 ,1 号机机器作为服务器,安装 FTP 服务
3、协议分析工具
Windows 环境下常用的工具有:Sniffer Pro、Natxray、IRIS 以及windows 2000 自带
的网络监视器等。本文选用 IRIS 作为协议分析工具。
在客户机 208 号机安装 IRIS软件.
三、测试过程
1、测试例子:将 1 号机计算机中的一个文件通过 FTP 下载到 208 号机中。
2、IRIS 的设置。
由于 IRIS 具有网络监听的功能,如果网络环境中还有其它的机器将抓很多别的数据包,
这样为学习带来诸多不便,为了清楚地看清楚上述例子的传输过程首先将 IRIS 设置为只抓
208 号机和 1 号机之间的数据包。设置过程如下:
1) 用热键 CTRL+B 弹出如图所示的地址表,在表中填写机器的 IP 地址,为了对抓的包看
得更清楚不要添主机的名字(name),设置好后关闭此窗口。
图 2
2)用热键 CTRL+E 弹出如图所示过滤设置,选择左栏“IP address”,右栏按下图将 address
book 中的地址拽到下面,设置好后确定,这样就这抓这两台计算机之间的包。
图 3
3、抓包
按下 IRIS 工具栏中 开始按钮。在浏览器中输入:FTP://192.168.113.1,找到要下载
的文件 ,鼠标右键该文件,在弹出的菜单中选择“复制到文件夹”开始下载,下载完后在 IRIS
工具栏中按按钮停止抓包。图 4 显示的就是 FTP 的整个过程,下面我们将详细分析这个过
程。
图 4
说明:为了能抓到 ARP 协议的包,在 WINDOWS 2000 中运行 arp –d 清除 arp 缓存。
四、过程分析
1、TCP/IP 的基本原理
本文的重点虽然是根据实例来解析 TCP/IP,但要讲明白下面的过程必须简要讲一下
TCP/IP 的基本原理。
A.网络是分层的,每一层分别负责不同的通信功能。
TCP/IP 通常被认为是一个四层协议系统,TCP/IP 协议族是一组不同的协议组合在一起
构成的协议族。尽管通常称该协议族为 TCP/IP,但 TCP 和 IP 只是其中的两种协议而已,
如表 1 所示。每一层负责不同的功能:
TCP/IP 层描述 主要协议 主要功能
应用层 Http、Telnet、FTP 和e-mail 等 负责把数据传输到传输层或接收从传输层返回
的数据传输层 TCP 和 UDP 主要为两台主机上的应用程序提供端到端的通信,TCP 为两台
主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块
交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。UDP 则为
应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主
机,但并不保证该数据报能到达另一端。
网络层 ICMP、IP 和 IGMP 有时也称作互联网层,主要为数据包选择路由,其中 IP
是 TCP/IP 协议族中最为核心的协议。所有的 TCP、UDP、ICMP 及 IGMP数据都以 IP 数
据报格式传输
链路层 ARP 、RARP 和设备驱动程序及接口卡 发送时将 IP 包作为帧发送;接收时把
接收到的位组装成帧;提供链路管理;错误检测等
表 1
分层的概念说起来非常简单,但在实际的应用中非常的重要,在进行网络设置和排除故
障时对网络层次理解得很透,将对工作有很大的帮助。例如:设置路由是网络层 IP 协议的
事,要查找 MAC 地址是链路层 ARP 的事,常用的 Ping 命令由 ICMP协议来做的。
图 5 显示了各层协议的关系,理解它们之间的关系对下面的协议分析非常重要。
图 5
b. 数据发送时是自上而下,层层加码;数据接收时是自下而上,层层解码。
当应用程序用 TCP 传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当
作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾
部信息),该过程如图 6 所示。TCP 传给 IP 的数据单元称作 TCP 报文段或简称为 TCP 段。
IP 传给网络接口层的数据单元称作 IP 数据报。通过以太网传输的比特流称作帧(Frame)。
数据发送时是按照图 6 自上而下,层层加码;数据接收时是自下而上,层层解码。
C. 逻辑上通讯是在同级完成的
垂直方向的结构层次是当今普遍认可的数据处理的功能流程。每一层都有与其相邻层的接
口。为了通信,两个系统必须在各层之间传递数据、指令、地址等信息,通信的逻辑流程与
真正的数据流的不同。虽然通信流程垂直通过各层次,但每一层都在逻辑上能够直接与远程
计算机系统的相应层直接通信。
从图 7 可以看出,通讯实际上是按垂直方向进行的,但在逻辑上通信是在同级进行的。
2、过程描述
为了更好的分析协议,我们先描述一下上述例子数据的传输步骤。如图 8 所示:
1) FTP 客户端请求 TCP 用服务器的 IP 地址建立连接。
2) TCP 发送一个连接请求分段到远端的主机,即用上述 IP 地址发送一份 IP 数据报。
3) 如果目的主机在本地网络上,那么 IP 数据报可以直接送到目的主机上。如果目的主机在
一个远程网络上,那么就通过 IP 选路函数来确定位于本地网络上的下一站路由器地址,并
让它转发 IP 数据报。在这两种情况下,IP 数据报都是被送到位于本地网络上的一台主机或
路由器。
4) 本例是一个以太网,那么发送端主机必须把 32 位的 IP 地址变换成 48 位的以太网地址,
该地址也称为 MAC 地址,它是出厂时写到网卡上的世界唯一的硬件地址。把 IP 地址翻译
到对应的 MAC 地址是由 ARP 协议完成的。
5) 如图的虚线所示,ARP 发送一份称作 ARP 请求的以太网数据帧给以太网上的每个主机,
这个过程称作广播。ARP 请求数据帧中包含目的主机的 IP 地址,其意思是“如果你是这个
IP 地址的拥有者,请回答你的硬件地址。”
6) 目的主机的 ARP 层收到这份广播后,识别出这是发送端在寻问它的 IP 地址,于是发送
一个 ARP 应答。这个 ARP 应答包含 IP 地址及对应的硬件地址。
7) 收到 ARP 应答后,使 ARP 进行请求—应答交换的 IP 数据包现在就可以传送了。
8) 发送 IP 数据报到目的主机。
3、实例分析
下面通过分析用 IRIS 捕获的包来分析一下 TCP/IP 的工作过程,为了更清晰的解释数据传
送的过程,我们按传输的不同阶段抓了四组数据,分别是查找服务器、建立连接、数据传输
和终止连接。每组数据,按下面三步进行解释。
显示数据包
解释该数据包
按层分析该包的头信息
第一组 查找服务器
1)下图显示的是 1、2 行的数据。
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。
下表 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 08 06
2 00 50 FC 22 C7 BE 00 90 27 F6 54 53 08 06
表 2
下表 3 是 ARP 协议的头信息。硬件类型字段表示硬件地址的类型。它的值为 1 即表示以太
网地址。协议类型字段表示要映射的协议地址类型。它的值为 0800 即表示 IP 地址。它的
值与包含 IP 数据报的以太网数据帧中的类型字段的值相同。接下来的两个 1 字节的字段,
硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以
太网上 IP 地址的 ARP 请求或应答来说,它们的值分别为 6 和 4。Op 即操作(Opoperation),
1 是 ARP 请求、2 是 ARP 应答、3 是 RARP 请求和 4 为 RARP 应答,第二行中该字段值
为 2 表示应答。接下来的四个字段是发送端的硬件地址、发送端的 IP 地址、目的端的硬件
地址和目的端 IP 地址。注意,这里有一些重复信息:在以太网的数据帧报头中和 ARP 请求
数据帧中都有发送端的硬件地址。对于一个 ARP 请求来说,除目的端硬件地址外的所有其
他的字段都有填充值。
表 3 的第 2 行为应答,当系统收到一份目的端为本机的 ARP 请求报文后,它就把硬件地址
填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为 2,最后把它
发送回去。
行 1 2
硬件类型(2) 00 01 00 01
协议类型(2) 08 00
08 00
硬件地址长度(1) 06 06
协议地址长度(1) 04 04
Op(2) 00 01 00 02
发送端以太网地址(6) 00 50 FC 22 C7 BE 00 90 27 F6 54 53
发送端 IP 地址(4)C0 A8 71 D0 C0 A8 7101
目的以太网地址(6) 00 00 00 00 00 00 00 50 FC 22 C7 BE
目的 IP 地址(4)C0 A8 71 01 C0 A8 71 D0
表 3
第二组 建立连接
1)下图显示的是 3-5 行的数据。
2)解释数据包
这三行 数据是两机建立连接的过程。
这三行的核心意思就是 TCP 协议的三次握手。TCP 的数据包是靠 IP 协议来传输的。但 IP
协议是只管把数据送到出去,但不能保证 IP 数据报能成功地到达目的地,保证数据的可靠
传输是靠 TCP 协议来完成的。当接收端收到来自发送端的信息时,接受端详发送短发送一
条应答信息,意思是:“我已收到你的信息了。”第三组数据将能看到这个过程。TCP 是一个
面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。
建立连接的过程就是三次握手的过程。
这个过程就像要我找到了张三向他借几本书,第一步:我说:“你好,我是担子”,第二步:
张三说:“你好,我是张三”,第三步:我说:“我找你借几本书。”这样通过问答就确认对方
身份,建立了联系。
下面来分析一下此例的三次握手过程。
A.请求端 208 号机发送一个初始序号(SEQ)987694419给 1 号机。
B.服务器 1 号机收到这个序号后,将此序号加 1 值为987694419 作为应答信号(ACK),
同时随机产生一个初始序号(SEQ)1773195208,这两个信号同时发回到请求端 208 号机,
意思为:“消息已收到,让我们的数据流以 1773195208 这个数开始。”
C.请求端 208 号机收到后将确认序号设置为服务器的初始序号(SEQ)1773195208加 1
为 1773195209 作为应答信号。
以上三步完成了三次握手,双方建立了一条通道,接下来就可以进行数据传输了。
下面分析 TCP 头信息就可以看出,在握手过程中 TCP 头部的相关字段也发生了变化。
3)头信息分析
如图 12 所示,第 3 数据包包含了三头信息:以太网(Ethernet)和 IP 和 TCP。
头信息少了 ARP 多了 IP、TCP,下面的过程也没有 ARP 的参与,可以这样理解,在局域
网内,ARP 负责的是在众多联网的计算机中找到需要找的计算机,找到工作就完成了。
以太网的头信息与第 1、2 行不同的是帧类型为 0800,指明该帧类型为 IP。
IP 协议头信息
IP 是 TCP/IP 协议族中最为核心的协议。从图 5 可以看出所有的 TCP、UDP、ICMP 及 IGMP
数据都以 IP 数据报格式传输的,有个形象的比喻 IP 协议就像运货的卡车,将一车车的货物
运向目的地。主要的货物就是 TCP 或 UDP 分配给它的。需要特别指出的是 IP 提供不可靠、
无连接的数据报传送,也就是说 IP 仅提供最好的传输服务但不保证 IP 数据报能成功地到达
目的地。看到这你会不会担心你的 E_MAIL 会不会送到朋友那,其实不用担心,上文提过
保证数据正确到达目的地是 TCP 的工作,稍后我们将详细解释。
如表 4 是 IP 协议的头信息。
32 位 20


4 位版本 4 位首部长度 8 位服务类型(TOS) 16 位总长度(字节数)
16 位标识 3 位标志 13 位片偏移
8 位生存时间(TTL) 8 位协议 16 位首部检验和
32 位源 IP 地址
32 位目的 IP 地址
选项(如果有)
数据
表 4 IP 数据报格式及首部中的各字段
图 12 中所宣布分 45 00—71 01 为 IP 的头信息。这些数是十六进制表示的。一个数占 4 位,
例如:4 的二进制是 0100
4 位版本:表示目前的协议版本号,数值是 4 表示版本为 4,因此 IP 有时也称作 IP v 4;
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 位首部检验和:当收到一份 IP 数据报后,同样对首部中每个 16 位进行二进制反码的求
和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过
程中没有发生任何差错,那么接收方计算的结果应该为全 1。如果结果不是全 1,即检验和
错误,那么 IP 就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并
进行重传。
32 位源 IP 地址和 32 位目的 IP 地址:实际这是 IP 协议中核心的部分,但介绍这方面的文
章非常多,本文搭建的又是一个最简单的网络结构,不涉及路由,本文对此只做简单介绍,
相关知识请参阅其它文章。32 位的 IP 地址由一个网络 ID 和一个主机 ID 组成。本例源 IP
地址为 C0 A8 71 D0,转换为十进制为:192.168.113.208; 目的 IP 地址为 C0A8 71 01,
转换为十进制为:192.168.113.1。网络地址为 192.168.113,主机地址分别为 1 和 208,
它们的网络地址是相同的所以在一个网段内,这样数据在传送过程中可直接到达。
TCP 协议头信息
如表 5 是 ICP 协议的头信息。
32 位 20


16 位源端口号 16 位目的端口号
32 位序号
32 位确认序号
4 位首部长度 保留(6 位) URGACK PSH RST SYN FIN 16 位窗口大小
16 位检验
16 位紧急指针
选项
数据
表 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 字节字段,因而窗口大小最大为 6 5 5 3 5 字节。
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 字节传送的。
小结
上面我们分开讲了三次握手,看着有点散,现在小结一下。
第三组 数据传输
1)下图显示的是 57-60 行的数据
2)解释数据包
这四行数据是数据传输过程中一个发送一个接收的过程。
前文说过,TCP 提供一种面向连接的、可靠的字节流服务。当接收端收到来自发送端的信
息时,接受端要发送一条应答信息,表示收到此信息。数据传送时被 TCP 分割成认为最适
合发送的数据块。一般以太网在传送时 TCP 将数据分为 1460 字节。也就是说数据在发送
方被分成一块一块的发送,接受端收到这些数据后再将它们组合在一起。
57 行显示 1 号机给 208 号机发送了大小为 1514 字节大小的数据,注意我们前文讲过数据
发送时是层层加协议头的,1514 字节=14 字节以太网头 + 20 字节 IP 头 + 20 字节 TCP 头
+ 1460 字节数据 58 行显示的应答信号 ACK 为:1781514222,这个数是 57 行得 SEQ 序
号 1781512762 加上传送的数据 1460,208 号机将这个应答信号发给 1 号机说明已收到发
来的数据。
59、60 行显示的是继续传送数据的过程。
这个过程就像我向张三借书,借给我几本我要说:“我已借了你几本了。”,他说:“知道了”。
3)头信息
图 15-1 和图 15-2分别是 57 行和 58 行的头信息,解释参考第二组。
第四组 终止连接
1)下图显示的是 93-96 行的数据
2)解释数据包
93-96 是两机通讯完关闭的过程。
建立一个连接需要三次握手,而终止一个连接要经过 4 次握手。这是因为一个 TCP 连接是
全双工(即数据在两个方向上能同时传递),每个方向必须单独地进行关闭。4 次握手实际
上就是双方单独关闭的过程。
本例文件下载完后,关闭浏览器终止了与服务器的连接图 16 的93-96 行显示的就是终止连
接所经过 4 次握手过程。
93 行数据显示的是关闭浏览器后,如图 17-1 所示 208 号机将 FIN 置 1 连同序号
(SEQ)987695574 发给 1 号机请求终止连接。
94 行数据和图 17-2 显示 1 号机收到 FIN 关闭请求后,发回一个确认,并将应答信号设置为
收到序号加 1,这样就终止了这个方向的传输。
95 行数据和图 17-3 显示 1 号机将 FIN 置 1 连同序号(SEQ)1773196056 发给 208 号机请求
终止连接。
96 行数据和图 17-4 显示 208 号机收到 FIN 关闭请求后,发回一个确认,并将应答信号设
置为收到序号加 1,至此 TCP 连接彻底关闭。
3)头信息
六、扫描实例
下面我们再举个 ping 的实例,测试某台计算机是否通,最常用的命令就是 ping 命令。Ping
一台计算机,出现如图 18 所示界面就是通,出现如图 19 所示界面就是不通,不通有两种
情况,一是该计算机不存在或没接网线,二是该计算机安装了防火墙并设置为不允许 ping。
如何区别这两种情况呢?下面还是利用 iris 跟踪上述情况。
如图 20 是 ping 通的情况。
如图 21 是 ping不通该计算机不存在的情况。从图可以看出 ARP 请求没有回应。
如图 22 是 ping不通,该计算机存在但安装了防火墙的情况。从图可以看出 ARP 请求有回
应。但 ICMP 请求没回应。
从分析可以看出虽然后两种情况的表面现象是一样的,但实质确是截然相反的。通过头信息
可以清楚的看出 PING 是 ICMP协议来完成的,通讯过程是在第三层完成的,没有用到第四
层的 TCP 协议。
七、后记
本文不是个教程,许多问题都没有涉及到,比如 TCP 重发、IP 分解、路由等,只是提出个
学习思路,希望能起到抛砖引玉的作用。TCP/IP 协议族是非常复杂的,但只要理解了还是
不难学的。最后向感兴趣的朋友提个问题:分别 telnet 三台机器,一台正常 23 端口开放,
一台网是通的但 23 端口没开放,另外一台是不存在的。用我们学过的方法跟踪一下,比较
三个的不同。其实这就是用 TCP 扫描判断对方机器是否在线的一种方法。






欢迎光临 eNewsTree.com (https://www.enewstree.com/discuz/) Powered by Discuz! X3.2