【Linux 网络】网络层


网络层

网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

IP协议

IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接和不可靠的传输功能。
对于网络传输来说,TCP负责决策,IP负责执行。 IP协议是以较大概率将数据跨网络传输到对端主机上,TCP在此基础上负责可靠性和效率。

1.1 IP协议段格式

在这里插入图片描述

版本:IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6。
首部长度:IP报头的长度。固定部分的长度(20字节)和可变部分的长度之和。共占4位。最大为1111,即10进制的15,代表IP报头的最大长度可以为15个32bits(4字节),也就是最长可为15*4=60字节,除去固定部分的长度20字节,可变部分的长度最大为40字节。服务类型:Type Of Service。
总长度:IP报文的总长度。报头的长度和数据部分的长度之和。
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。
片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL 字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL 设为最大值 255。
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
首部校验和:计算IP头部的校验和,检查IP报头的完整性。
源IP地址:标识IP数据报的源端设备。
目的IP地址:标识IP数据报的目的地址|

1.2 网段划分

网络号和主机号

IP地址分为两个部分,网络号和主机号:

  • 网络号:保证相互连接的两个网段具有不同的标识。
  • 主机号:同一网段内的主机,具有不同的主机号。

根据网络号查找目标网络,进入目标网络后,再查找并对比IP中的主机号,就确定了目标主机。

在这里插入图片描述

分类划分法

最开始时提出一种划分网络号和主机号的方案,把所有IP地址分为五类,如下图所示:

在这里插入图片描述

什么是 A、B、C 类地址?

其中对于 A、B、C 类主要分为两个部分,分别是网络号和主机号。这很好理解,好比小林是 A 小区 1 栋 101 号,你是 B 小区 1 栋 101 号。

我们可以用下面这个表格, 就能很清楚的知道 A、B、C 分类对应的地址范围、最大主机个数。
img

A、B、C 分类地址最大主机个数是如何计算的呢?

最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:2^8-2=254

为什么要减 2 呢?

因为在 IP 地址中,有两个 IP 是特殊的,分别是主机号全为 1 和 全为 0 地址。

  • 主机号全为 1 指定某个网络下的所有主机,用于广播
  • 主机号全为 0 指定某个网络

因此,在分配过程中,应该去掉这两种情况。

广播地址用于什么?

广播地址用于在同一个链路中相互连接的主机之间发送数据包
在这里插入图片描述

播地址可以分为本地广播和直接广播两种。

  • 在本网络内广播的叫做本地广播。例如网络地址为 192.168.0.0/24 的情况下,广播地址是 192.168.0.255 。因为这个广播地址的 IP 包会被路由器屏蔽,所以不会到达 192.168.0.0/24 以外的其他链路上。
  • 在不同网络之间的广播叫做直接广播。例如网络地址为 192.168.0.0/24 的主机向 192.168.1.255/24 的目标地址发送 IP 包。收到这个包的路由器,将数据转发给 192.168.1.0/24,从而使得所有 192.168.1.1~192.168.1.254 的主机都能收到这个包(由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发。) 。

什么是 D、E 类地址?

img

而 D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。

多播地址用于什么?

多播用于将包发送给特定组内的所有主机。

在这里插入图片描述

多播使用的 D 类地址,其前四位是 1110 就表示是多播地址,而剩下的 28 位是多播的组编号。

从 224.0.0.0 ~ 239.255.255.255 都是多播的可用范围,其划分为以下三类:

  • 224.0.0.0 ~ 224.0.0.255 为预留的组播地址,只能在局域网中,路由器是不会进行转发的。
  • 224.0.1.0 ~ 238.255.255.255 为用户可用的组播地址,可以用于 Internet 上。
  • 239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效。
IP分类的缺点

缺乏地址层次性: 在同一网络中使用了B类地址,但是无法按照生产、测试、开发等环境来划分地址层次。这种情况下,缺少地址的层次性划分,使得IP地址的管理和分配缺乏灵活性和有效性。

A、B、C类地址的限制:

  • C类地址主机数量少: C类地址只能容纳最多254个主机,对于需要较多IP地址的场景,数量明显不足。
  • B类地址主机数量多: B类地址能容纳的主机数量超过6万台,对于大多数企业来说,这种规模过大,导致IP地址资源的浪费。

1.3 CIDR无分类地址解决方案

CIDR(Classless Inter-Domain Routing,无分类域间路由)是一种现代的IP地址分配和路由技术,它取代了传统的A类、B类、C类地址的分类方式。CIDR允许网络管理员更加灵活地分配IP地址,有效地利用IP地址空间。

CIDR的表示方法:

这种方式不再有分类地址的概念,32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号

CIDR地址表示通常采用IP地址加上斜线后跟随的子网掩码位数,比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。

在这里插入图片描述

10.100.122.2/24 表示IP地址为 10.100.122.2,属于一个使用子网掩码 /24 的网络,该网络的范围是 10.100.122.010.100.122.255,可以支持最多254台主机连接(因为0和255分别是网络地址和广播地址,不能用于主机)。

子网掩码

还有另一种划分网络号与主机号形式,那就是子网掩码,掩码的意思就是掩盖掉主机号,剩余的就是网络号。

将子网掩码和 IP 地址按位计算 AND,就可得到网络号。

子网掩码用于将IP地址分成网络部分和主机部分。对于IP地址 10.100.122.2/24,子网掩码 /24 表示前面24位是网络部分,后面8位是主机部分。现在让我解释一下如何计算子网掩码和网络地址:

  • 将IP地址和子网掩码进行逻辑与操作,以确定网络地址。

  • 将IP地址 10.100.122.2 和子网掩码 255.255.255.0 进行与操作:

    IP地址:   00001010.01100100.01111010.00000010
    子网掩码: 11111111.11111111.11111111.00000000
    ----------------------------------------------
    网络地址:  00001010.01100100.01111010.00000000
    
  • 得到的网络地址是 10.100.122.0

在上面我们知道可以通过子网掩码划分出网络号和主机号,那实际上子网掩码还有一个作用,那就是划分子网

子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址

img

  • 未做子网划分的 ip 地址:网络地址+主机地址
  • 做子网划分后的 ip 地址:网络地址+(子网网络地址+子网主机地址)

1.4 公网IP和私有IP

局域网IP地址只用于局域网内的通信,不能直接连到公网上。规定用于局域网的私有IP地址:

IP地址数
10.*/8共16,777,216个地址
172.16.*/12 ~ 172.31.*/12共1,048,576个地址
192.168.*/16共65,536个地址

在这里插入图片描述

公网IP在整个网络都不能重复,但私网IP在不同网段内是可以重复的。

公有 IP 地址由谁管理呢?

私有 IP 地址通常是内部的 IT 人员管理,公有 IP 地址是由 ICANN 组织管理,中文叫「互联网名称与数字地址分配机构」。

IANA 是 ICANN 的其中一个机构,它负责分配互联网 IP 地址,是按州的方式层层分配。

img

有兴趣的友友们可以去了解一下。

1.5 IP报文分片与重组

链路层限制有效载荷的大小,一般为1500字节。每种数据链路的最大传输单元 MTU 都是不相同的,如 FDDI 数据链路 MTU 4352、以太网的 MTU 是 1500 字节等。如果IP报文过大,就必须分成多个数据包交给链路层。

分片和组装都是IP协议的任务。

分片与重组

分片会提高报文丢失的风险,所以一般不分片。传输层控制会报文的大小,这样IP层就不需要分片。

一旦数据包丢失,所有数据包都会丢弃,反映到传输层就是触发重传。

字段解释
16位标识报文的标识各不相同,分片报文的标识是一致的,可以根据标识查找分片的报文
13位片偏移片偏移表示分片报文的有效载荷距原始有效载荷起始位置的偏移量
3位标志1位保留,1位禁止分片,1位更多分片:为1表示中间报文,为0表示为结尾报文

如果报文丢失了,如何检验呢?

  1. 如果没有查找到片偏移为0的报文,就说明首位报文丢失。
  2. 如果当前报文片偏移加上报文长度不等于下一个报文的片偏移,则说明中间报文丢失。
  3. 如果3位标志中最后一位为0,表示当前报文就是结尾报文。

一个3420字节的IP报文,可以分成3个分别是1480、1480、440,再给加上报头即可。

3420 = 20 + 3400 = 20 + ( 1480 + 1480 + 440 ) = > ( 20 + 1480 ) + ( 20 + 1480 ) + ( 20 + 440 ) 3420=20+3400=20+(1480+1480+440)=>(20+1480)+(20+1480)+(20+440) 3420=20+3400=20+(1480+1480+440)=>(20+1480)+(20+1480)+(20+440)

在这里插入图片描述

接收端如何判断收到的报文是普通报文还是分片报文?

  1. 如果片偏移不为零,一定是分片报文,
  2. 如果片偏移为0,但3位标志最后一位为1,则一定是分片报文;
  3. 除此以外,都是普通报文。

1.6 IPv6

IPv4 的地址是 32 位的,大约可以提供 42 亿个地址,但是早在 2011 年 IPv4 地址就已经被分配完了。

但是 IPv6 的地址是 128 位的,这可分配的地址数量是大的惊人,说个段子 IPv6 可以保证地球上的每粒沙子都能被分配到一个 IP 地址。

但 IPv6 除了有更多的地址之外,还有更好的安全性和扩展性,说简单点就是 IPv6 相比于 IPv4 能带来更好的网络体验。

但是因为 IPv4 和 IPv6 不能相互兼容,所以不但要我们电脑、手机之类的设备支持,还需要网络运营商对现有的设备进行升级,所以这可能是 IPv6 普及率比较慢的一个原因。

IPv4 首部与 IPv6 首部

IPv4 首部与 IPv6 首部的差异如下图:

img

IPv6 相比 IPv4 的首部改进:

  • 取消了首部校验和字段。 因为在数据链路层和传输层都会校验,因此 IPv6 直接取消了 IP 的校验。
  • 取消了分片/重新组装相关字段。 分片与重组是耗时的过程,IPv6 不允许在中间路由器进行分片与重组,这种操作只能在源与目标主机,这将大大提高了路由器转发的速度。
  • 取消选项字段。 选项字段不再是标准 IP 首部的一部分了,但它并没有消失,而是可能出现在 IPv6 首部中的「下一个首部」指出的位置上。删除该选项字段使的 IPv6 的首部成为固定长度的 40 字节。

1.7 路由

路由器能横跨两个网络,所以要配两个IP,LAN口连接内网,WAN口连接外网。

IP数据包的传输时,路由器将目的IP与路由表进行对比:

  1. 如果对应得上就说明目标主机就在自身子网内,就直接发送到目标主机
  2. 如果访问的不是子网内的主机,就将源IP替换成路由器的WAN口IP,也就是将报文转发到外网。

在这里插入图片描述

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuhyOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值