《Wireshark数据包分析实战(第2版)》—第6章6.2节互联网协议

简介:

本节书摘来自异步社区《Wireshark数据包分析实战(第2版)》一书中的第6章6.2节互联网协议,作者【美】Chris Sanders,更多章节内容可以访问云栖社区“异步社区”公众号查看。

6.2 互联网协议
位于OSI模型中第3层的协议的主要目的就是使得网络间能够互联通信。正如你所知道的,MAC地址被用来在第2层处理单一网络中的通信。与其类似,第3层则负责跨网络通信的地址。在这层上工作的不止一个协议,但最普遍的还是互联网协议(IP)。在此,我们将介绍在RFC 791中所定义的IP协议版本4(IPv4)。

如果网络中的所有设备仅使用集线器或者交换机进行连接,那么这个网络称为局域网。如果你想将两个局域网连接起来,你可以使用路由器办到这一点。在复杂的网络中,可能会包含成千上万的局域网,而这些局域网是由世界各地成千上万的路由器连接起来的。互联网本身就是由无数局域网和路由器所组成的一个集合。

6.2.1 IP地址
IP地址是一个32位的地址,用来唯一标识连接到网络的设备。由于让人记住一串32位长的01字符确实比较困难,所以IP地址采用点分四组的表示法。

在点分四组表示法中,以A.B.C.D的形式,构成IP地址的四组1和0分别转换为十进制0到255之间的数(如图6-7所示)。我们拿这样一个IP地址11000000 10101000 00000000 00000001举例来说,这个值显然不容易记忆或者表示,但如果采用点分四组的表示法,我们就可以将其表示为192.168.0.1。


e271419b6764dbd87a8c174c4dfd4ce0b47de1e6

IP地址之所以会被分成4个单独的部分,是因为每个IP地址都包含着两个部分:网络地址和主机地址。网络地址用来标识设备所连接到的局域网,而主机地址则标识这个网络中的设备本身。用来决定究竟IP地址哪部分属于网络或者主机的划分通常并不唯一。这实际上是由另一组名为网络掩码(netmask, network mask)的地址信息所决定的,有时它也会被称为子网掩码(subnet mask)。

网络掩码用来标识IP地址中究竟哪一部分属于网络地址而哪一部分属于主机地址。网络掩码也是32位长,并且被设为1的每一位都标识着IP地址的对应部分是属于网络地址的,而剩下设为0的部分则标识着主机地址。

我们以IP地址10.10.1.22为例,其二进制形式为00001010 00001010 00000001 00010110。为了能够区分出IP地址的每一个部分,我们将使用网络掩码。在这个例子中,我们的网络掩码是11111111 11111111 00000000 00000000。这意味着IP地址的前一半(10.10或者00001010 00001010)是网络地址,而后一半(1.22或者00000001 00010110)标识着这个网络上的主机,如图6-8所示。


3945e8976de3314b81a045ecdf38f0d5076703fd

网络掩码也可以写成点分四组的形式。比如网络掩码11111111 11111111 00000000 00000000可以被写成255.255.0.0。

IP地址和网络掩码为简便起见,通常会被写成无类型域间选路(Classless Inter-Domain Routing, CIDR)的形式。在这个形式下,一个完整的IP地址后面会有一个左斜杠(/),以及一个用来表示IP地址中网络部分位数的数字。举例来说,IP地址10.10.1.22和网络掩码255.255.0.0,在CIDR表示法下就会被写成10.10.1.22/16的形式。

6.2.2 IPv4头
源IP地址和目的IP地址都是IPv4数据包头中的重要组成部分,但它们并不是你在数据包中能够找到的IP信息的全部。IP头比起我们刚刚介绍过的ARP数据包复杂得多。这其中包含很多额外的信息,以便IP完成其工作。

如图6-9所示,IPv4头有着下列几个域。

版本号(Version):IP所使用的版本。

首部长度(Header Length):IP头的长度。

服务类型(Type of Service):优先级标志位和服务类型标志位,被路由器用来进行流量的优先排序。

总长度(Total Length):IP头与数据包中数据的长度。

标识符(Identification):一个唯一的标识数字,用来识别一个数据包或者被分片数据包的次序。


8c6327affd2f4a330c5f61ff90ac2ee610b702ee

标记(Flags):用来标记一个数据包是否是一组分片数据包的一部分。

分片偏移(Fragment Offset):一个数据包是一个分片,这个域中的值就会被用来将数据包以正确的顺序重新组装。

存活时间(Time to Live):用来定义数据包的生存周期,以经过路由器的跳数/秒数进行描述。

协议(Protocol):用来识别在数据包序列中上层协议数据包的类型。

首部校验和(Header Checksum):一个错误检测机制,用来确认IP头的内容没有被损坏或者篡改。

源IP地址(Source IP Address):发出数据包的主机的IP地址。

目的IP地址(Destination IP Address):数据包目的地的IP地址。

选项(Options):保留作额外的IP选项。它包含着源站选路和时间戳的一些选项。

数据(Data):使用IP传递的实际数据。

6.2.3 存活时间
存活时间(TTL)值定义了在该数据包被丢弃之前,所能经历的时间,或者能够经过的最大路由数目。TTL在数据包被创建时就会被定义,而且通常在每次被发往一个路由器的时候减1。举例来说,如果一个数据包的存活时间是2,那么当它到达第一个路由器的时候,其TTL会被减为1,并会被发向第二个路由。这个路由接着会将TTL减为0,这时如果这个数据包的最终目的地不在这个网络中,那么这个数据包就会被丢弃,如图6-10所示。由于TTL的值在技术上还是基于时间的,一个非常繁忙的路由器可能会将TTL的值减去不止1,但通常情况下,我们还是可以认为一个路由设备在多数情况下只会将TTL的值减去1。


13ff8e412c1a8a47be1481d54d411c59debf25ff

为什么TTL的值会这样重要?我们通常所关心的一个数据包的生存周期,只是其从源前往目的地所花去的时间。但是考虑到一个数据包想要通过互联网发往一台主机需要经过数十个路由器。在这个数据包的路径上,它可能会碰到被错误配置的路由器,而失去其到达最终目的地的路径。在这种情况下,这个路由器可能会做很多事情,其中一件就是将数据包发向一个网络,而产生一个死循环。

如果你有任何编程背景,那么你就会知道死循环会导致各种问题,一般来说会导致一个程序或者整个操作系统的崩溃。理论上,同样的事情也会以数据包的形式发生在网络上。数据包可能会在路由器之间持续循环。随着循环数据包的增多,网络中可用的带宽就会减少,直至拒绝服务(DoS)的情况出现。IP头中的TTL域就为了防止出现这个潜在的问题。

让我们看一下Wireshark中的示例。文件ip_ttl_source.pcap包含着两个ICMP数据包。ICMP(我们会在这章之后介绍到)利用IP传递数据包,我们可以通过在Packet Details面板中展开IP头区段看到。

你可以看到IP的版本号为4图标1,IP头的长度是20字节图标2,首部和载荷的总长度是60字节图标3并且TTL域的值是128图标4。


d08670eb6209387d5926310a78fe1b0fe67ba1b4

ICMP ping的主要目的就是测试设备之间的通信。数据从一台主机发往另一台作为请求,而后接收主机会将那个数据发回作为响应。这个文件中,我们一台IP地址为10.10.0.3图标5的设备将一个ICMP请求发向了地址为192.168.0.128图标6的设备。这个原始的捕获文件是在源主机10.10.0.3上被创建的。

现在打开文件ip_ttl_dest.pcap。在这个文件中,数据在目的主机192.168.0.128处被捕获。展开这个捕获中第一个数据包的IP头,来检查它的TTL值(如图6-12所示)。


e7d8140d8a5b52ab89236750b4c182766cf5ff9e

你可以立刻注意到TTL的值变为127了,比原先的TTL减少了1。即使不知道网络的结构,我们也可以知道这两台设备是由一台路由器隔开,并且经过这台路由器的路径会将TTL值减1。

6.2.4 IP分片
数据包分片是将一个数据流分为更小的片段,是IP用于解决跨越不同类型网络时可靠传输的一个特性。

一个数据包的分片主要基于第2层数据链路协议所使用的最大传输单元(Maximum Transmission Unit, MTU)的大小,以及使用这些第2层协议的设备配置情况。在多数情况下,第2层所使用的数据链路协议是以太网。以太网的默认MTU是1500,也就是说,以太网的网络上所能传输的最大数据包大小是1500字节(并不包括14字节的以太网头本身)。

注意
 尽管存在着标准的MTU设定,但是一个设备的MTU通常可以手工设定。MTU是基于接口进行设定,其可以在Windows或者Linux系统上修改,或者在管理路由器的界面上修改。
当一个设备准备传输一个IP数据包时,它将会比较这个数据包的大小,以及将要把这个数据包传送出去的网络接口MTU,用于决定是否需要将这个数据包分片。如果数据包的大小大于MTU,那么这个数据包就会被分片。将一个数据包分片包括下列的步骤。

1.设备将数据分为若干个可成功进行传输的数据包。

2.每个IP头的总长度域会被设置为每个分片的片段长度。

3. 更多分片标志将会在数据流的所有数据包中设置为1,除了最后一个数据包。

4.IP头中分片部分的分片偏移将会被设置。

5.数据包被发送出去。

文件ip_frag_source.pcap从地址为10.10.0.3的计算机上捕获而来。它向一个地址为192.168.0.128的设备发送ping请求。注意在ICMP(ping)请求之后,Packet List面板的Info列中列出了两个被分段的IP数据包。

先检查数据包1的IP头(如图6-13所示)。

根据更多分片和分片偏移域,你可以断定这个数据包是分片数据包的一部分。被分片的数据包要么有一个大于0的分片偏移,要么设定了更多分片的标志位。在第一个数据包中,更多分片标志位被设定图标1,意味着接收设备应该等待接收序列中的另一个数据包。分片偏移被设为0图标2,意味着这个数据包是这一系列分片中的第一个。


e516993b60f8dcb361f1f81dd7d4b620f69dd8d9

第二个数据包的IP头(如图6-14所示),同样被设定了更多分片的标志位,但在这里分片偏移的值是1480。这里明显意味着1500字节的MTU,减去IP头的20字节。


9b75e10e8e0df97b75d20fd64bb47e09b8960ce7

第三个数据包(如图6-15所示),并没有设定更多分片标志位图标1,也就标志着整个数据流中的最后一个分片。并且其分片偏移被设定为2960图标2,也就是1480+(1500-20)的结果。这些分片可以被认为是同一个数据序列的一部分,是因为它们IP头中的标志位域拥有相同的值。

e04e4060643a72b841626d4c2b020fd85323e643
相关文章
|
缓存 网络协议 Linux
计算机网络——Wireshark软件使用与协议分析(ARP协议、IP与ICMP分析)
Wireshark软件使用与协议分析 ARP协议分析 使用 Wireshark 抓取局域网的数据包并进行分析: 1. 学习 Wireshark 基本操作:重点掌握捕获过滤器和显示过滤器。 2. 观察 MAC 地址:了解 MAC 地址的组成,辨识 MAC 地址类型。 3. 分析以太网帧结构:观察以太网帧的首部和尾部,了解数据封装成帧的原理。 4. 分析 ARP 协议:抓取 ARP 请求和应答报文,分析其工作过程。 IP与ICMP分析 启动 Wireshark,捕捉网络命令执行过程中本机接受和发送的数据报。
1745 0
计算机网络——Wireshark软件使用与协议分析(ARP协议、IP与ICMP分析)
|
2月前
|
存储 网络协议 网络安全
【网络安全 | 网络协议】结合Wireshark讲解IP协议
【网络安全 | 网络协议】结合Wireshark讲解IP协议
35 0
|
4月前
|
缓存 网络协议
Wireshark中的ARP协议包分析
Wireshark可以跟踪网络协议的通讯过程,本节通过ARP协议,在了解Wireshark使用的基础上,重温ARP协议的通讯过程。 ARP(Address Resolution Protocol)地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 在Wireshark界面,我们可以看到19、20号数据包,就是一对标准的ARP请求和响应包。
|
4月前
|
网络协议 网络架构
Wireshark中的ICMP协议包分析
Wireshark可以跟踪网络协议的通讯过程,本节通过ICMP协议,在了解Wireshark使用的基础上,重温ICMP协议的通讯过程。 ICMP(Internet Control Message Protocol)Internet控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP是TCP/IP模型中网络层的重要成员,与IP协议、ARP协议、RARP协议及IGMP协议共同构成TCP/IP模型中的网络层。 在Wireshark界面,我们可以看到
|
11月前
|
缓存 分布式计算 网络协议
大数据开发基础的计算机网络的ARP/RARP协议
计算机网络是大数据开发中不可或缺的一部分,它连接着我们所使用的各种设备,并实现了信息的传递和共享。在计算机网络中,ARP/RARP协议扮演着重要的角色。本篇文章将为大家介绍ARP/RARP协议的基本概念、工作原理以及应用场景。
179 0
|
网络协议 虚拟化
WireShark抓包报文结构分析
WireShark抓包报文结构分析
286 0
WireShark抓包报文结构分析
|
域名解析 缓存 自然语言处理
Wireshark网络抓包(三)——网络协议
IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信; 在通过以太网发生IP数据包时,先封装第三层(32位IP地址)和第二层(48位MAC地址)的报头; 但由于发送数据包时只知道目标IP地址,不知道其Mac地址,且不能跨越第二、三层,所以需要使用地址解析协议。
Wireshark网络抓包(三)——网络协议