计算机网络之网际IP协议

在上一篇文章中提到IP协议,它属于五层协议当中的网路层。它的主要作用有两个。一是负责为分组交换网不同的主机提供通信服务,在发送数据时,网络层是把运输层产生的报文段或者用户数据报分装成报进行传输。二是为源主机寻找合适的路由从而找到目的主机。
一、采用面向连接还是无连接
在讲解之前先来一段IP协议的历史。在计算机网络初期,很多人争论网络层应该采用“面向连接”还是“无连接”。面向连接意味着传输的可靠性交给了网络。无连接意味着可靠性交给了主机。举个栗子,我们打电话就是通过面向连接方式的,在我们进行通信的时候电信网通过昂贵的交换机为我们建立了一个虚电路来保持连接,这样我们的语音信号就能无差错地按序到达堆放的电话。当然上面说了,这是个昂贵的交换机,这个适合电话这种不智能的设备,因为电话没有所谓的纠错能力,你万一在传输中出现错误就是一串杂乱的声音了。但是计算机是智能的,有一定得纠错能力,而且采用二进制进行传输在通信过程中的抗干扰能力强,纠错能力进一步提升。
所以最后网络层采用了一种无连接方式。网络层向上只提供简单灵活的、无连接的、尽最大努力交付数据报服务。也就是网络发送分组时不需要先建立连接,而且每一个分组都是独立发送的,与前后分组无关(这个很自然地想到HTTP协议也是一种无状态的、每次请求独立的机制)。这也就是说网络层不会提供一种服务质量的承诺。所以在传输过程中传送的分组就可以会出错、丢失、重复、失序。这其中也会有个好处就是路由的工作就轻松多了(不用像交换机一样建立虚电路)。那么是不是说这样就不能有效传输正确的数据了呢?不是的,这就要计算机的纠错能力出马了,比如说你采用的是可靠性传输,那么你的运输层就必须有差错处理和流量控制等机制来提高传输过程中的容错性。

二、IP地址的组成
IP地址有三个历史阶段的表示方法:
1、分类的IP地址:这是最基本的编址方式。
2、子网的划分:分类IP地址的改进版
3、构成超网:无分类编址方式。
先来讲一下分类IP地址:
分类IP地址由网络号加上主机号构成,有以下几种分类:
这里写图片描述
从IP地址的结构来看,IP地址并不仅仅指明一个主机,还指明了主机所连接到的网络。
常用的三种类别的IP地址
A类地址的网络号字段占一个字节,只用7位可供使用(第一位已固定),但可指派的网络号是126个(即2^7 - 2)。减2的原因:IP地址中的全0表示“这个(this)”。网络号字段为全0的IP地址是个保留地址,意思是“本网络”。网络号为127(即01111111)保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。这也是为什么我们在访问80端口的时候直接可以使用127.0.0.1.

B类地址的网络号字段由2字节,由14位可以进行分配。由于前两位(1 0)使不可能出现网络号字段成为全0或全1,因此不存在网络总数减2的问题。但实际上B类网络地址128.0.0.0是不指派的。C类网络地址192.0.0.0也不指派。最大主机数是2^16-2,因为也要去除全0和全1.

全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络,而全1表示“所有的(all)“,因此全1的主机号字段表示该网络上的所有主机。则三类的主机数均要减2
IP地址的指派范围

IP地址的特点
(1)IP地址由网络号和主机号两部分组成。这种分等级的机制有两个优点。一是IP管理机构只要分配IP地址的网络号(第一级)就可以了,剩下的主机名由网络好的单位自行分配。分配的范围需要根据上图参考,不可以超出范围。二是路由器只要根据网络号来转发分组,可以减小路由表的项目数。从而减小路由表存储空间以及查找路由表的时间。(主机号都存放在了响应的路由里面了)
(2)路由器属于一种多归属主机。多归属主机就是说一个主机或者路由器同时连接两个不同的网络,也就是需要两个不同的IP地址(网络号也不同)。路由器就属于一种多归属主机。因为它至少需要两个不同的IP地址(网络号也不同)才能连接两个不同的网络。如下图所示。
(3)一个网络是指具有相同的网络号主机的集合。通过转发器或者网桥连接起来的网络具有相同的网络号,所有数据同一个网络(即使分成若干个局域网)。具有不同网络的主机必须有路由器进行互连。
(4)IP地址之间是平等的。不会说优先考虑哪个IP地址的。
这里写图片描述

三、IP地址和硬地址
什么叫硬地址?硬地址在哪里有运用到?
硬地址又称为物理地址,是存放在主机网卡ROM中的一个物理地址。作用:我们在数据链路层和物理层的中使用的就是物理地址。在IP数据报传给数据链路层之后就被封装成MAC帧,这个帧使用的源地址和目的地址都是物理地址。这个物理地址被放在首部。所以在网络层以及网络层以上使用的是IP地址。在数据链路层以及物理层使用的是物理地址。如下图:
IP地址与硬件地址的区别

四、地址解析协议 ARP
作用:寻找硬件地址。根据IP地址我们已经可以找到目的主机了,但是我们不知主机的硬件地址是什么,无法进行传输。
这时候需要ARP协议了.
ARP地址解析协议主要是解决通过IP得到物理地址,在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常更新。

当主机A要向局域网中的B发送IP数据报时,在ARP缓存中查看是否有B的IP地址,如果有,在ARP高速缓存中查出它的硬件地址,把地址写入MAC帧,通过局域网把该MAC帧发送此硬件地址。也可能查不到,可能是B才入网,也可能是主机A刚刚加电,缓存是空的。这样A自动运行ARP,按照以下步骤找B的硬件地址。
1,ARP进程在本局域网广播发送一个ARP请求分组。
2,在本局域网上的所有主机上运行的ARP进程都收到此请求分组。
3,主机B在ARP请求分组中见到自己的IP地址,向主机A发送ARP相应分组,写入自己的硬件地址。其余的不理睬这个请求。
4,主机A收到主机B的ARP响应分组后,在ARP高速缓存中写入主机B的IP地址到硬件地址映射。

为了减少网络上的通信量,主机A发送ARP请求分组,就把自己的IP地址到硬件地址的映射写入ARP请求分组。

ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间。超过生存时间的项目就从高速缓存中删掉。这在主机物理地址发生更改时很有效,因为当B的物理地址改变时,A存储了旧的的物理地址导致找不到B了,但是过了生存时间旧的记录就没了。

ARP是解决局域网上的主机或路由器的IP地址映射。如果不在同一个局域网,H1就无法解析出主机2的硬件地址。

ARP四种情况
1发送方是主机,把IP数据报发送给本网络另一台主机,用ARP找到目的主机的硬件地址。
2发送方是主机,把IP数据报发送到另一个网络的主机,用ARP找到另一个路由器的硬件地址,剩下由路由器完成。
3发送方是路由器,把IP数据报发送到本网络的主机,用ARP找到目的主机硬件地址。
4发送方是路由器,把IP数据报发送另一个网络的主机,ARP找到本网络上的路由器硬件地址,剩下由路由器处理。

五、IP数据报
这里写图片描述
IP数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,
由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,
是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,
其长度是可变的。首都中的源地址和目的地址都是 IP 协议地址。
那么IP数据报格式又是怎样要求的呢?
1. IP数据报首部的固定部分中的各字段
①版本:占4位,指IP协议的版本。通信双方使用的
IP协议版本必须一致。日前广泛使用的 IP协议版本号为 4 (即 IPv4)。
IPv6 目前还处于起步阶段。

②首部长度:占 4 位,可表示的最大十进制数值是 15。请注意,

这个字段所表示数的单位是32位字 ( 1 个32位字长是4 字节),
因此,当 IP 的首部长度为 1111 时 (即十进制的 15),
首部长度就达到 60字节。当 IP 分组的首部长度不是4字节的整数倍时,
必须利用最后的填充字段加以填充。因此数据部分永远在 4字节的整数倍开始,这样在实现 IP协议时较为方便。首部长度限制为 60字节的缺点是有时可能不够用。这样做的目的是希望用户尽量减少开销。
最常用的首部长度就是 20 字节 (即首部长度为 0101),
这时不使用任何选项。

③服务:占 8 位,用来获得更好的服务。

这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
1998年IETF把这个字段改名为区分服务 DS (DifferentiatedServices)。
只有在使用区分服务时,这个字段才起作用。

④总长度:总长度指首都及数据之和的长度,单位为字节。

因为总长度字段为 16位,所以数据报的最大长度为 216-1=65 535字节。 在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

⑤标识 (Identification):占 16位。

IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。但这个“标识”并不是序号,因为 IP是无连接的服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

⑥标志 (Flag):占3 位,但目前只有2位有意义。   

标志字段中的最低位记为 MF (More Fragment)。
MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为 DF(Don’t Fragment),意思是“不能分片”。只有当 DF=0时才允许分片。

⑦片偏移:占 13位。较长的分组在分片后,

某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以 8个字节为偏移单位。这就是说,每个分片的长度一定是 8字节 (64位)的整数倍。

⑧生存时间:占 8位,生存时间字段常用的英文缩写是

TTL (Time To Live),其表明数据报在网络中的寿命。由发出数据报的点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜围子,因而白白消耗网络资源。最初的设计是以秒作为 TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于 1 秒,就把TTL值减 1。
当 TTL值为 0时,就丢弃这个数据报。

⑨协议:占 8 位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

⑩首部检验和:占 16位。这个字段只检验数据报的首部,

但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算一下首都检验和 (一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

⑾源地址:占32位。
⑿目的地址:占 32位。

2. IP数据报首部的可变部分

IP首都的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从 1 个字节到40个字节不等,取决于所选择的项目。某些选项只需要 1 个字节,它只包括 1 个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0 的填充字段补齐成为 4字节的整数倍。    增加首都的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的 IPv6就将 IP数据报的首部长度做成固定的。

IP数据包指的是第三层的PDU,

IP首部只是其中的一部分,是在第三层网络层上加上去的,是给路由器看的。

IP数据包的总长度过大,超过链路的最大MTU时,数据包就会被分成多片。
为了更加直观地描述IP数据报的格式,我在本地利用WireShark进行一次抓包,将IP数据报抓取下来,结果如下:
这里写图片描述
上图蓝色字体45开始到f2就是首部字体。而上面一部分是对报文的一个解读。
接下来对照上下两部分进行解读:
1、第一个字节为45,一个字节8位,所以对应的是版本信息和首部长度各4位,那么可以知道版本信息表示为4,也就是采用的的版本号为ipv4,首部长度表示为5,也就是说首部长度为5*4=20字节(首部长度单位为32位也就是4字节),对应上图的
这里写图片描述
2、接下来00对应的是区分服务(占8位),这里表示没有使用,再接下来是00 34对应的是总长度(表示首部和数据之和,总长为16位,单位为字节),00 34表示的总长度为3*16+4=52字节。对应下图
这里写图片描述
3、再接下来是17 48表示标识(占16位,用来重装分片)表示现在表示为5960(数据报产生次数),再接下来表标志位占3位,片偏移为13位,所以这段应该一起来看。接下来的为40 00,表示的二进制为:0100 0000 0000 0000,可以看到前3位为010,最后一位(More Fragment ,MF)为0,说明没有分片。中间一位为(Dont Fragment,DF)1,表示不能再分片。既然没有分片那么片偏移肯定为0,所以后面全为0,对应如图:
这里写图片描述
4、接下来是40 06,分别对应生存时间的8位和协议的8位,首先生存时间为50,代表最大跳数限制为4*16=64.也就是数据报在因特网中经过的路由器数量不能超过64个。接下来是协议表示为06,也就是采用了TCP协议。如下图:
这里写图片描述
这里写图片描述
5、接下来的为ea 9e为首部检验和(16位,IP协议只对首部进行检验)
这里写图片描述
6、最后是ac 1d 19 18 dc b5 96 f2分表代表源地址和目的地址的32位,可以看到主机名和主机IP地址
这里写图片描述
7、以上就是IP数据报的首部,接下来就是数据部分了
注:至于为什么要从45开始进行判断呢,来看我捕获的数据包总和:
这里写图片描述
可以看到分为4部分,其中第三部分就是刚刚分析的网络层,第四部分表示的是传输层,因为这里是使用TCP协议,所以表示的是TCP报文(下一章将讲解TCP报文)。那就很自然地想到了五层协议,所以第二个以太网代表的是数据链路层。那第一部分当然是物理层了。
(接下来的文章再进行讲解)

六、虚拟互联网
这里写图片描述
简单理解就是互联网是通过各种中间设备将不同系统结构的主机互联起来。让我们整体感觉就是有个虚拟的IP网,而且在这个IP网中,各种异构的网络都能连在一起。比如你可以通过你的电脑给你的手机(比如4G网)发微信。也就是任意类型的网络都能都互联。这也要归功于五层协议中各层的中间设备比如:
1:物理层使用的中间设备叫做转发器
2:数据链路层使用的中间设备叫做网桥或桥接器
3:网络层使用的中间设备叫做路由器
4:在网络层以上使用的中间设备叫做网关。用网关连接两个不兼容的系统需要在高层进行协议的转换。

当然IP协议还有比如路由选择等功能。。。鉴于篇幅太长,下次再载。下一篇先讲解TCP/UDP协议

相关内容推荐