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

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。

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所示。

网络掩码也可以写成点分四组的形式。比如网络掩码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):一个唯一的标识数字,用来识别一个数据包或者被分片数据包的次序。

标记(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。

为什么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。

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所示)。

你可以立刻注意到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,意味着这个数据包是这一系列分片中的第一个。

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

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

时间: 2024-08-08 03:48:30

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

《Wireshark数据包分析实战(第2版)》—第6章6.1节地址解析协议

第6章 通用底层网络协议 Wireshark数据包分析实战(第2版) 无论是处理延迟问题,还是甄别存在错误的应用,抑或对安全威胁进行聚焦检查,都是为了发现异常的流量,而你必须首先了解正常的流量.在下面的几章中,你将会学到正常的网络流量在数据包级别是如何工作的. 我们将介绍最常见的几种协议,包括最基础的TCP.UDP和IP,以及如HTTP.DHCP.DNS等最常用的应用层协议.在每个协议的相关部分,都会至少有一个捕获文件供你下载,并可以让你直接上手分析.在这一章中,我们将着重关注在OSI分层模型中

《Wireshark数据包分析实战(第2版)》目录—导读

版权声明 Wireshark数据包分析实战(第2版) Copyright 2011 by Chris Sanders. Title of English-language original:Practical Packet Analysis:Using Wireshark to Solve Real-World Network Problems(2nd Edition), ISBN 978-1-59327-266-1, published by No Starch Press. Simplifi

《Wireshark数据包分析实战(第2版)》—第3章3.1节Wireshark简史

第3章 Wireshark入门Wireshark数据包分析实战(第2版)在第1章中,我们介绍了几种可以进行网络分析的数据包嗅探工具软件,但在本书中我们将只使用Wireshark,并在此章进行简要的介绍. 3.1 Wireshark简史Wireshark的历史相当久远,其最初的版本叫做Ethereal,由毕业于密苏里大学堪萨斯城分校计算机科学专业的Gerald Combs出于项目需要而开发,并于1998年以GNU Public Licence(GPL)开源许可证发布. 在发布了Ethereal 8

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

6.5 互联网控制消息协议互联网控制消息协议(Internet Control Message Protocol, ICMP)是TCP/IP协议族中的一个效用协议,负责提供在TCP/IP网络上设备.服务以及路由器可用性的信息.大多数网络检修技巧和工具都是基于常用的ICMP消息类型.ICMP在RFC792中定义. 6.5.1 ICMP头ICMP是IP的一部分并依赖IP来传递消息.ICMP头相对较小并根据用途而改变.如图6-29所示,ICMP头包含了以下几个域. 类型(Type):ICMP消息基于R

《Wireshark数据包分析实战(第2版)》—第3章3.2节Wireshark的优点

3.2 Wireshark的优点Wireshark在日常应用中具有许多优点,无论你是初学者还是数据包分析专家,Wireshark都能通过丰富的功能来满足你的需要.在第1章中,我们为挑选数据包嗅探工具提出过一些重要的判断特征,让我们来检查一下Wireshark是否具有这些特征. 支持的协议:Wireshark在支持协议的数量方面是出类拔萃的--于本书截稿时Wireshark已提供了超过850种协议的支持.这些协议包括从最基础的IP协议和DHCP协议到高级的专用协议比如AppleTalk和BitTo

《Wireshark数据包分析实战(第2版)》—第3章3.4节Wireshark初步入门

3.4 Wireshark初步入门当你成功地在你的系统中装好了Wireshark,你就可以开始熟悉它了.当你终于打开了这个功能强大的数据包嗅探器,却会发现你什么都看不见! 好吧,Wireshark在刚打开的时候确实不太好玩,只有在拿到一些数据之后事情才会变得有趣起来. 3.4.1 第一次捕获数据包为了能让Wireshark得到一些数据包,你可以开始你的第一次数据包捕获实验了.你可能会想:"当网络什么问题也没有的时候,怎么能捕获数据包呢?" 首先,网络总是有问题的.如果你不相信,那么你去

《Wireshark数据包分析实战(第2版)》—第6章6.3节传输控制协议

6.3 传输控制协议传输控制协议(Transmission Control Protocol, TCP)的最终目的是为数据提供可靠的端到端传输.TCP在RFC793中定义,在OSI模型中的第4层工作.它能够处理数据的顺序和错误恢复,并且最终保证数据能够到达其应到达的地方.很多普遍使用的应用层协议都依赖于TCP和IP将数据包传输到其最终目的地. 6.3.1 TCP头TCP提供了许多功能,并且反映在了其头部的复杂性上面.如图6-16所示,以下是TCP头的域. 源端口(Source Port):用来传

《Wireshark数据包分析实战(第2版)》—第3章3.3节安装Wireshark

3.3 安装WiresharkWireshark的安装过程极其简单.但在你安装之前要确保你的机器满足如下要求. 400MHz及以上的处理器128MB内存至少75MB的可用存储空间支持混杂模式的网卡WinPcap驱动WinPcap驱动是Windows对于pcap数据包捕获的通用程序接口(API)的实现,简单来说就是这个驱动能够通过操作系统捕捉原始数据包.应用过滤器,并能够让网卡切入或切出混杂模式. 尽管你也可以单独下载安装WinPcap(http://www.winpcap.org),但一般最好使

《Wireshark数据包分析实战(第2版)》—第6章6.4节用户数据报协议

6.4 用户数据报协议用户数据报协议(User Datagram Protocol, UDP)是在现代网络中最常使用的另外一种第4层协议.如果说TCP是为了满足带有内在错误检测的可靠数据传输,那么UDP主要是为了提供高速的传输.出于这个原因,UDP是一种尽力服务,通常会被称为无连接协议.一个无连接协议并不会正式地建立和结束主机之间的连接,也不会像TCP那样存在握手和终止过程. 无连接协议意味着不可靠服务,这将使得UDP流量一点都不稳定.事实上正是如此,但依赖于UDP的协议通常都会有其内置的可靠性