https://blog.csdn.net/z123canghai/article/details/107855399
4.1 IP协议概述
4.2 IP地址相关
4.3 IP路由控制
4.4 分包与组合
4.5 IPV4部首解析
这一章节主要是网络层内容的介绍。根据前面学习,知道本层有IP、ICMP和ARP等协议,本章主要阐述IP协议相关内容。
网络层是TCP/IP的核心内容,IP(Internet Protocol)网际协议是关键所在,通过该协议实现了终端节点间的数据交换。
这里应该再强调一下,数据链路层是实现相邻两个节点之间的通信,若要跨越多种数据链路就需要网络层来实现,如下图。
我们可以通过坐火车、包裹邮寄等多种方式来类比学习。这里作者特意为我们区分了“主机”和“节点”的概念。主机的定义应该是指配有IP地址但不进行路由控制的设备,路由器既有IP地址也具有路由控制功能节点是主机和路由器的统称。
另外,IP地址不同于IP。IP地址是IP协议的一部分内容,IP是指网络层的一种协议。
IP大致分为三个部分,即IP寻址、路由、IP的分包与组包。
这部分主要阐述IP地址的定义、分类以及应用。
IP地址如同链路层的MAC地址,是对节点设备的识别码,根据这个一信息可以实现网络各节点间的数据交换。
1、IP地址的定义
IP地址就是网络层的地址,是用来实现网络设备间数据交换的基石。IP地址是用一个32bit的数字来表示,并将这个数字分为“网络标识”和“主机标识”两个部分,网络标识要求保证网络中的每个网段地址不能重复,相同段内的主机必须拥有相同的网络地址。主机标识要求同一网段的主机必须不同,如下图。其中“/24”意思是从从头数到第几位是网络标识,“/24”就是前24bit是网络标志。
另外,我们还把IP地址分为了4类,分为A类、B类、C类和D类。其实还有E类,但未使用。每一类的网络标识和主机标识是不一样多的,目的是为了适应不同的网络大小。例如A类。网络标识范围是0.0.0.0~127.0.0.0,可以容纳128网段,主机标识就有2^24这么多,其他类也是这样
但并不是所有的主机标识都可以任意使用的,因为每个网段中还有广播地址一说。主机标识都是1就表示这是广播地址,任何网段内的主机均可接收。
广播还分为两种,本地广播和直接广播。本网络内的广播叫做本地广播,路由器会屏蔽盖IP地址的数据包,使其不能到达本网段之外。不同网段的广播叫做直广播,但这种功能是在路由器上进行的设置,一般是本地广播。
此外还有多播,实现将数据发送到本网段的特定主机,多播使用的是D类地址,如果从首位是“1110”就可以认为是多播。
2、子网掩码的诞生
将IP分为若干类的方法有个显著问题,就是造成资源浪费。例如B类,允许该网段内有6万多个主机,这个种网络结构实际是不存在的,所以,显著的IP是不受分类限制,而是采用了一种全新的识别方式。通过这种方式可以实现更小刻度的划分,这就是子网掩码。
引入子网掩码后,IP地址就有了两种识别码,分别是IP地址本身,另一个就是表示网络部分的子网掩码。其表示方式有两种,如下图所示,我们电脑一般采用第一种方式,子网掩码置一位表示为网络标识,第二种表示还是数位数。
3、全局地址和私有地址
起初,互联网中的任何一台主机或路由器必须配有一个唯一的IP,否则会发生冲突造成通信失败。然而IP地址已经不够分配了,为了解决这个问题,就有了私有地址和全局地址之分,但要注意的是,不是这样简单一分问题就解决了,还需配有NAT技术的配合。实现思路是全局IP保证整个互联网上保证唯一性,私有IP只需保证统一域内唯一即可。
私有IP分为三类,如下所示,除此之外的都称之为全局IP。
全局IP是由机构进行统一分配的,是谁不关心~
一包数据的传递,就如同我们的快递,要越过千山万水,这过程中需要有设备识别这包数据要去哪,这个设备就是路由器,它实现的功能就是路由控制。每个路由器里面都会有一张表或者说清单,叫做路由控制表,如下图所示
可见,路由控制表中存着本网段内主机设备IP所对应的下一网段的IP,路由器根据这个表格选择发送路径。如果存在许多相同的网络地址的记录,就选择最吻合的一个,这就涉及更复杂的路由控制,后面章节表述。这张路由表的形成有两种方式,一是手动设置,叫做静态路由控制,二是与其他路由器进行信息交换时的自动学习,叫做动态路由设置。
路由方式也有三种,叫做默认路由、主机路由和回环路由。
路由器还有一个聚合功能。如果一个网段内有很多主机,都要通过路由器与其他网段进行数据交换,那这个在路由表中的寻址过程是漫长的且不易维护的。所以我们可以对本网段的所有主机的IP地址分类,形成新的小的子网段。这样的查找表就很好找了。
前面说了,一包数据到达接收端可能要翻过大山越过大河,这也就不可以避免的会经过不同的设备。之所以有不同的设备,是因为其使用目的是不同的,如果同一一种向下兼容,即会造成极大的资源浪费,也非常的不灵活。基于此,每种链路承载的最大数据长度是不同的,所组成的链路的最大传输单元叫MTU。一包数据要经过不同设备组成的链路,就要考虑这包数据长度是否超过了某链路的最大承载量。如下表是不同链路的MTU
一开始解决方案是到一路由器,判断下一路径允许的最大MUT,也就是走一步看一步。但这种方式容易丢包,于是又发明了“路径MUT发现”技术,也就是首先预判收发之间的路径所所允许的最大MUT,然后在发送端将数据分为小片段。
如下图是IPV4的部首信息,接下来就逐个解析。
1、版本
4bit构成IP部首的版本号
2、部首长度(IHL:Internet HeaderLength)
部首长度也是由4bit构成,表示部首的长度,是以32bit为单位。例如IPV4的部首上长度是20byte,就要设置为5。
3、区分服务(TOS:Type Of Service)
由8bit构成,都不用。
4、总长度(Total Length)
表示IP首部与数据部分结合起来的总字节数。该字段长16bit.
5、标识(ID:Identification)
分片重组,同一分片的标志值相同,不同分片的标志值不同,当然,如果分片值相同IP地址不同也是不同的分片。每发送一个IP包,它的值也逐渐递增。
6、标志(Flags)
3bit构成,表示包被分片的相关信息。
7、片偏移(FO:Fragment Offset)
由13bit构成,用来标识被分片的每一个分段相对于原始数据的位置。
8、生存时间(TTL:Time To Live)
8bit构成,最初是以秒为单位表示当前包在网络上应该的生存期限。实际上指可以中转多少个路由器的意思,直到变成0则丢弃该包。这可以避免IP包在网络内无限传递的问题。
9、协议(Protocol)
由8bit构成,表示IP包传输层上的协议编号。
10、部首校验和(Header Checksum)
由16bit构成,也叫IP首部校验和。该字段只校验数据报的首部。不校验数据部分。确保IP数据报不被破坏。
11、源地址
发送端地址,32bit
12、目的地址
接收端地址,32bit
13、可选字段(Options)
长度可变,该字段包含如下信息,安全级别、源路径、路径记录和时间戳。
14、填充
补可选字段剩下的比特位。
这个部首的设计思路,也对我们进行程序设计时很有启发。