Linux网络编程——详解网络层IP协议、网段划分、路由

发布于:2025-04-15 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

一、前言

二、IP协议的认识

1、什么是IP协议?

2、IP协议报头

 三、网段划分

1、初步认识IP与路由

2、IP地址

I、DHCP动态主机配置协议

3、IP地址的划分

I、CIDR设计

II、子网数目的计算

III、子网掩码的确定 

四、特殊的IP地址

五、IP地址的数量限制

六、私有IP地址与公网IP地址

1、私有IP地址

2、公网IP地址

七、路由器

八、路由

1、路由表 

八、总结


一、前言

在之前的文章中,出去物理层,我们已经针对TCP/IP五层模型中的应用层、传输层的要点做了介绍。

  • 其中应用层 HTTP/HTTPS 协议主要是针对数据请求的一个超文本传输协议,目的是为了保证服务端和客户端之间的数据传输安全可靠且高效。
  • 传输层的 UDP协议就是应用于像我们平时看直播刷视频一样,它并不保证数据的可靠传输,而是能容忍一定的数据丢失的传输层协议TCP协议则是通过一系列的机制来保证数据传输的可靠性和完整性。

学习完了应用层和传输层,接下来就是网络层的协议和数据链路层了。

  • 网络层主要负责的是路径规划,为数据的传输规划好最优的路径。
  • 数据链路层则是负责真正意义上的传输数据,例如以太网、网卡、交换机等都是属于该层。

这篇文章我们主要探讨网络层的IP协议。

二、IP协议的认识

在我们之前学习的时候已经简单了解过了IP,知道了源IP和目的IP,才能将数据包发送到指定的地址。

1、什么是IP协议?

IP(Internet Protocol)是一种网络通信协议,是互联网的核心协议之一,负责在计算机网络中路由数据包,使得数据包能够在不同的设备之间进行有效传输。IP协议的主要作用包括寻址、分组、路由和转发数据包

从一台主机A向主机B发送消息时,需要经历很多的跳转,所以在路径选择中,IP是非常重要的,它决定了路径如何走。

2、IP协议报头

        我们知道在网络协议栈中,各层独立是互相不受影响的,数据包从一个主机发到另一个主机的时候,需要先从自己的网络协议栈自顶向下在每一层进行封装,然后到对方主机时,再自底向上进行解包。我们已经看到过了应用层和传输层的协议格式,同样数据包在走到网络层时,也需要对其封装上IP的协议报头协议格式如下:

  • 4位版本号(Version)标识IP协议版本,4表示IPV4,6表示IPV6.
  • 4位首部长度(Header Length): IP报头总长度,与TCP一样,这里4位16个数据的单位并不是1字节,而是4字节,所以说它的最小值为5(20个字节),最大值为15(60个字节)。
  • 8位服务类型(Differentiated Services):3位优先权字段(已经弃用),4位TOS字段,,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选择一个。对于 ssh/telnet 这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
  • 16位总长度(Total Length):表示IP数据报整体占多少个字节,包括首部和数据部分。这个是报文,不是字节流,所以这个能有效保证有效载荷分离。
  • 16位标识(Identification)用于唯一地标识一个IP数据段,常用于分片和重组。如果IP报文因为数据链路层被分片了,那么每一片里面的这个id都是相同的。
  • 3位标志(Flags):用于指示数据报的处理状态,包括是否可以分片和是否是最后一片。第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。 第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文(也就是过滤大的报文)。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。
  • 13位片偏移(Fragment Offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值*8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 8位生存时间(Time to Live,TTL)表示数据报到达目的地的最大报文跳数,防止数据报在网络中无限循环,一般是64,每经过一个路由器,该值减1,直到为0,数据报将被丢弃。
  • 8位协议(Protocol)指示封装在IP数据报中的上层协议,如TCP、UDP等,因为需要向上层传输。
  • 16位首部校验和(Header Checksum):使用CRC进行校验,用于检验IP首部中是否发生错误,如果出现问题直接丢掉就行,后面会有重传等一系列措施。
  • 32位源地址和32位目标地址:表示发送端和接收端。这两个是IP协议头中最关键的信息。采用点分十进制的形式来表示,分为四组,一组8位。例如1.2.3.4。
  • 可选项(Options):可选字段,包括记录路由路径、时间戳、安全和加密等信息。最多40字节。
  • 数据:数据部分是IP协议传输的实际数据,可以是TCP、UDP等上层协议封装的数据,包含着来自上层的TCP或者UDP的报头段。

 三、网段划分

1、初步认识IP与路由

首先我们需要知道的是网段划分是什么?为什么需要网段划分?网段划分是怎么样划分的?

我们先通过一个例子引入这个话题:

        在我们学校中每一个人都有自己的学号,学号总是一长串的数字,它被分为好多段,每一段数字都代表着不同的含义,比如前四个数字表示入学年份,接着两个数字表示所在的院系,接着两个数字表示所在专业,接着后面的数字才表示你是该专业几号。同时,我们每个院系每个专业的负责人都有着自己的小群以便交流。

假设我们现在知道一个人的学号要找这个人,有什么方法呢?第一种就是见人就问学号,看看能否对应上,但是这个方法太粗暴了,效率也低。还有一种方法就是通过该学号找到对应的院系负责人,由院系负责人在自己的小群里一问,找到对应的专业的负责人,再由专业的负责人也在小群里一问,于是就找到了那个人。        

        可以看到第二种方法的效率很高,这是因为我们可以根据学号一步一步能排除掉大部分不相关的人。所以IP也是同理。


我们都知道通过IP就能找到对应的主机,但是世界上有着那么多的主机,存在着海量的IP地址,我们主机是怎么通过网络找到的呢?

网络地址的划分实际上是按照人口、接入的网络设备等因素划分的,但是为了便于理解,我们就用国家划分。

我们将整个世界类比成一个很大的学校,而学校中的院系就是各个国家,院系中的不同专业就代表了各个国家的不同的地区。而各个负责人的小群就是路由器,通过学号找人的过程也就是通过IP找主机的过程。

所以网段划分就是将IP合理分配的技术,比如所有属于中国的IP的第一位都是1,格式就是1.x.x.x ,属于河北的IP 第二位都是2 ,格式为 1.2.x.x ,所有属于美国的IP的第一位都是2,格式为2.x.x.x  等等,以此类推。当然这些各个国家的IP地址都存在国际路由器中。

通过这样的技术我们就可以很快定位想要寻找的主机。

2、IP地址

我们一般提到的网络地址其实不等于IP地址,网络地址是指IP地址中的网络号的,

 IP地址 ::= {<目标网络号>, <目标主机号>}
  • 目标网络号:就是用来划分不同的网段,即划分不同的地区,且保证相连的两个网段具有不同的标识。
  • 目标主机号:标识同一网段内的不同主机。同一网段内的不同主机具有相同的网络号,所以必须存在不同的主机号来区分它们。

所以IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。包括主机地址和网络地址两部分。如11000000 10101000 00000001 00000110(192.168.1.6)

如上图所示,图中上半部分的两个主机处于同一网段内, 他们的网段号都是 192.168.128,后面的 10 11 表示的就是主机号/24 表示的是子网掩码(后面讲)的前24位是网络标识,剩下的8位都是主机标识。

需要注意的是上图中的路由器也是主机,他是连接两个子网的节点主要负责在不同的子网之间转发数据包,同时属于两个子网,所以它也有着两个IP,路由器每个接口都会配置一个IP地址,这个IP地址属于该接口所连接的子网。因此,图中的路由器连接了两个子网,所以它拥两个接口,每个接口配置有一个在这个子网内的唯一IP地址。

通过上面的图示我们不难发现:

  1. 子网是从一个大的IP网络中划分出来的较小的网络部分。
  2. 不同的子网其实就是将网络号相同的主机放在一起
  3. 如果我们想要在该子网中增添一台新的主机,则该主机的网络号必须和子网的网络的号一致,且该主机的主机号必须不同于子网内其他主机。 

I、DHCP动态主机配置协议

通过合理地设置主机号和网络号,我们就可以保证在互相连接的网络中,每台主机的IP地址都不相同,但实际上,手动管理子网内IP是一种很麻烦的事情。

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络管理协议,用于自动化地分配IP地址和其他网络配置参数给子网内新增的节点,如计算机、智能手机等,使其能够与网络中的其他设备进行通信,避免了我们的手动管理。我们要知道在手机或者计算机联网之前它是没有IP的,联网的过程其实就是向子网申请IP的过程。

一般的路由器都带有DHCP功能,因此路由器也可以看作是一个DHCP服务器。

3、IP地址的划分

上面我们已经知道了什么是网段划分和为什么需要网段划分,下来我们就要着重探讨IP地址是如何进行划分的。

过去提出的一种IP地址的划分方案是:将IP地址通常分为五个主要类别,即A、B、C、D、E类,如下

这些类别都是按照IP地址的第一个字节(8位) 来划分的,其中不同类别具有不同的网络号和主机号分配方式。

  1. A类地址1.0.0.0 ~126.255.255.255,最大主机数约 16,777,214(2^24 - 2,减去两个保留地址:全0和全1),该地址通常分配给大型组织或者大型的服务提供商,它们允许大量主机。
  2. B类地址128.0.0.0 ~191.255.255.255, 最大主机数约 65,534(2^16 - 2),该地址通常分配给中等规模的组织或者网络。
  3. C类地址: 192.0.0.0 ~ 223.255.255.255,最大主机数:约 254(2^8 - 2),该地址通常分配给小型的组织或私人网络。
  4. D类地址: 224.0.0.0 ~ 239.255.255.255,该地址用于多播,不分配给单独的主机或者网络,用于一次向多个目标发送数据包,例如视频流或音频流。
  5. E类地址: 240.0.0.0 ~255.255.255.255,该类地址是实验性地址,不常用,保留用于特定用途,用于实验、研究或未来网络发展。

但是上面的地址分配存在着许多的弊端,如

  1. IP地址浪费:A、B、C类地址的划分方式导致了地址的浪费,特别是在A类地址中,每个网络中都有着大约 16,777,214 个主机地址,而大多数网络远远不需要这么多地址。这导致了 IPv4 地址枯竭的问题。
  2. 不灵活:由于固定的地址类型,会导致一些网络可能会浪费大量的IP地址,而其他网络的IP地址不够用。
  3. 无法满足中小型网络需求:B类地址太大,而C类地址又太小,这使得中小型网络在选择合适的地址类别时很难找到平衡点。
  4. 不适合特定应用:D 类地址是多播地址,而 E 类地址是实验性地址,它们在常规网络中的使用非常有限。这也导致了资源浪费。

        随着互联网的快速发展,IPv4 地址越来越不够用了。这并不是直接与地址类别划分相关的弊端。但是 IPv4 地址空间有限,而且已经耗尽了大部分可用地址。这迫使网络行业采用了更高效的地址分配策略,如网络地址转换(NAT) IPv6 的广泛采用

        为了解决这些问题,现代网络提出了新的地址分配策略,例如 CIDR(无类别域间路由)采用 IPv6 地址空间,以更好地满足不同规模和类型的网络需求,减少资源浪费,提供更多的灵活性,并支持现代网络功能。

I、CIDR设计

针对上面的网络划分出现的种种弊端,CIDR(Classless Inter-Domain Routing,无类别域间路由)被提出,它允许将IP地址按需分配给网络,而不受固定类别的限制

  • 他引入了一个额外的子网掩码(subnet mask)来区分网络号和主机号
  • 子网掩码也是一个32位的正整数,与IP地址编址格式相同,网络部分和子网络部分对应的位全为“1”主机部分对应的位全为“0”
  • 将IP地址和子网掩码进行 ‘按位与’ 操作,得到的就是网络号(包括子网络号)
  • 网络号和主机号的划分与这个IP地址是A类、B类还是什么类无关
  • CIDR使用前缀表示法来表示IP地址范围。这个前缀表示法包括IP地址,后面跟着一个斜线和一个数字,表示子网掩码的长度。所以它是由两部分组成 : 网络前缀 + 子网掩码,例如,192.168.1.0/24,其中IP地址表示为192.168.1.024就表示子网掩码,表示32位中 高24位是1,其他位是0.它的二进制形式是 11111111.11111111.11111111.00000000,转换为十进制就是255.255.255.0
  • CIDR允许多个连续的IP地址范围被聚合成一个更大的范围。这有助于减小路由表的大小,提高路由效率。

子网掩码的格式为前24个比特位全为1,后8个比特位全为0,将来进行子网划分的时候,我们只需要调整子网掩码中从左侧开始的 1 的个数就可以很方便地对IP地址进行比特位级别地子网划分。

下面举个例子:

  • 首先给定一个CIDR地址:172.31.128.255 /18
  • 表示IP地址是172.31.128.255,二进制为10101100.00011111.10000000.11111111
  • 子网掩码地高18位是1,二进制表示为 11111111.11111111.11000000.00000000,所以表示将来得到的网络地址的高18位表示网络部分,剩下的14位表示主机部分。
  • 将上面的IP地址和子网掩码的二进制进行‘按位与’运算(全1为1,其余为0)得到网络地址: 10101100.00011111.10000000.00000000,按点分十进制表示为 172.31.128.0
    ip:        10101100.00011111.10000000.11111111  
    
    子网掩码:  11111111.11111111.11000000.00000000
    ----------------------------------------------------
    网络号:     10101100.00011111.10000000.00000000   & 
    网络号点分法表示: 172.31.128.0   
    
  • 所以得到的该网络地址的子网地址范围是网络地址二进制中低14位(主机部分)从全0 到全 1所表示的范围.即10101100.00011111.10000000.00000000~10101100.00011111.10111111.11111111,点分十进制表示为172.31.128.0~172.31.191.255,而我们通常对于全0和全1这两个是不使用的,因为网络号一般用全0表示即172.31.128.0,广播地址用全1表示,即172.31.191.255,所以子网中可用的IP地址的范围就是172.31.128.1-172.31.191.254,这也就是该网络号可以容纳的主机所在的范围。

下面是两个例子可以自行计算

II、子网数目的计算

首先将/18换成为我们习惯的表示法:
11111111.11111111.11000000.000000转为十进制就是255.255.192.0,可以看到这个掩码的左边两节和B类默认掩码是一致的,所以这个掩码是在B类默认掩码的范围内,意味着我们将对B类大网进行子网划分。B类掩码默类是用16位(16个0)来表示可分配的IP 地址,这里的掩码在B类默认掩码的基础上多出了两个表示网络号的1,也就是向主机位借了两个1这就是说是将B类大网划分为2的2次方个子网(2^n,n表示所借1的个数),所以最终的子网数目是4

III、子网划分的计算

 已知IP 192.168.1.133 ,子网掩码为255.255.255.192;求划分的子网的个数和范围

首先将子网掩码写为二进制的形式方便观察将其转换成二进制后和255.255.255.0对比可发现,前掩码的前24位没有变化,只是在原来表示主机号的部分头两位变成了1

192.168.1.113:	    11000000.10101000.00000001.10000101   (1)

255.255.255.192:   11111111.11111111.11111111.11000000    (2)
----------------------------------------------------
255.255.255.0:      11111111.11111111.11111111.00000000    (3)
   

我们把IP地址中的前24位(192.168.1)先不关注,因为前24位对应掩码没有变化它们始终表示网络号。

原本255.255.255.192在192为0,及255.255.255.0的情况下属于C类地址的默认子网掩码
按照子网掩码的定义,子网掩码1所对应的位为网络号位,而0所对应的位为主机号位
主机号中被借走了两位用来表示网络号了,这就是子网号。二进制一位用0或1表示,那么占用了两位就有2*2=4种表示,这里占用了2位,也就是说我们将原有的192.168.1.0这个网络分成了四份,即4个子网)这四段的网络号分别是00000000、01000000、10000000、11000000,现在我们将它们转换成10进制就分别是0、64、128、192,现在把前24位加进来。

192.168.1.0  

192.168.1.64  

192.168.1.128 

192.168.1.192 

至于后面的网络号和广播地址和之前的计算方法是一样的。可用IP为

192.168.1.1  ------> 192.168.1.62

192.168.1.65-------> 192.168.1.126  

192.168.1.129------> 192.168.1.190

192.168.1.193------> 192.168.1.254

IV、子网掩码的确定 

学校新建5个机房,每个房间有30台机器,如果给定一C类网络地址:192.168.1.0,问如何将其划分为5个子网,子网掩码该如何设置?

子网划分建议按以下步骤和实例计算子网掩码:

  1. 将要划分的子网数目转换为2的m次方。如要分8个子网,8=23。
  2. 取上述要划分子网数的2m的幂m。如2^3,即m=3。
  3. 将上一步确定的幂m按高序占用主机地址m位后转换为十进制。
  4. 如m为3 则是11100000,转换为十进制为224,即为最终确定的子网掩码。
  5. 如果是C类网,则子网掩码为255.255.255.224;如果是B类网,则子网掩码为255.255.224.0;如果是A类网,则子网掩码为255.224.0.0

2^3 =8(大于5的最小的2的整幂次数),向主机号中借走三位作为网络号,而剩下的5位主机号,每个网段内可容纳的主机数是25即32,可用主机需要再减2即为30,满足每个房间30台机器的题目要求。取23的幂,即3,即占用了主机号中的高3位即为11100000,转换为十进制为224,所以该地址为C类地址的子网掩码应该设置为255.255.255.224。各机房IP和子网掩码配置如下(已经去掉广播地址和主机地址):

机房号        子网掩码                 IP地址范围
机房1     255.255.255.224     192.168.1.1~192.168.1.30

机房2     255.255.255.224     192.168.1.33~192.168.1.62

机房3     255.255.255.224     192.168.1.65~192.168.1.94

机房4     255.255.255.224     192.168.1.97~192.168.1.126

机房5     255.255.255.224     192.168.1.129~192.168.1.158

一般在一个子网中,管理子网中IP的设备通常是路由器,目标网络和子网掩码及子网中的主机都会被路由器管理,目标网络和子网掩码都是在路由器中配置的。 

四、特殊的IP地址

现实中存在着一些特殊的IP地址,这些IP地址通常不用于一般的主机通信,而是用于特定的网络任务和服务。以下是一些常见的特殊IP地址类型及其详细解释:

  • 私有IP地址(下文会讲解):私有IP地址是在内部网络中使用的IP地址,不可从公共Internet访问。它们用于在局域网(LAN)内部进行通信。私有IP地址范围通常包括以下三个区段:            1.  10.0.0.010.255.255.255
            2.  172.16.0.0172.31.255.255
            3.  192.168.0.0 到 192.168.255.255
  • 回环IP地址:回环IP地址是127.0.0.1,通常表示本地主机或设备上的回环测试。当一个计算机发送数据到回环地址,数据会被发送到自己,用于测试和诊断网络连接和服务。
  • 广播地址:将IP地址中的主机地址全部设为1,就成为了广播地址。广播地址用于向同一网络中的所有设备发送数据包。在IPv4中,广播地址通常是特定网络的最大地址
  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。

五、IP地址的数量限制

我们知道,IP地址(IPv4)是一个4字节32位的正整。那么一共只有 2的32次方 个IP地址,大概是43亿左右。而TCP/IP协议规定,每个主机都需要有一个IP地址。现这意味着,一共只有43亿台主机能接入网络么?

        实际上,由于一些特殊的IP地址的存在,数量远不足43亿;另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址。那么一个家庭就会用掉很多IP地址。CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加),仍然不是很够用。这时候有三种方式来解决:

  1. 动态分配IP地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的。在入网时分配地址,退网时回收地址。
  2. NAT技术:通常用于将私有网络内部的多个设备共享单个公共IP地址的情况(下篇文章会讲解)。
  3. IPv6: IPv6并不是IPv4的简单升级版。这是互不相干的两个协议,彼此并不兼容。IPv6用16字节128位来表 示一个IP地址,但是目前IPv6还没有普及。  

六、私有IP地址与公网IP地址

1、私有IP地址

如果在一个组织内部组件局域网,IP地址只能用于局域网通信,而不是直接连接到Internet上,理论上使用任意的IP地址都是可以的,但是RFC 1918规定了用于组建局域网的私有IP地址如下:

  • 92.168.0.0 192.168.255.255
  • 172.16.0.0172.31.255.255
  • 10.0.0.0 10.255.255.255

它们可以在内部网络中自由使用,但不能直接在互联网上路由。这些地址主要用于家庭、企业或其他组织内部的局域网(LAN)或广域网(WAN)。私有IP地址的主要优点是可以重复使用,从而缓解了IPv4地址空间有限的问题。

2、公网IP地址

公网IP地址是全球唯一的IP地址,可以直接在互联网上路由。每个连接到互联网的设备或服务都需要一个唯一的公网IP地址来进行数据传输。

公网IP地址由互联网名称与数字地址分配机构(ICANN)或地区性的互联网注册机构(RIR)管理和分配给各个ISP(互联网服务提供商),再由ISP分配给其用户。

  • 公网IP地址可以确保任何两个设备之间能够在互联网上直接相互寻址。
  • 它们对于服务器来说特别重要,因为服务器需要拥有一个固定的公网IP地址以便客户端能够随时访问。

当我们需要使用Xshell连接到远端服务器时,如下图所示这个IP就是公网IP,这个IP标示了全网的、具有唯一性质的一台服务器

当我们登录我们自己的用户账号时,使用ifconfig命令查看,也会有一个IP地址,它就是一个私有IP,如下图 

 当有多个用户时,就会多个不同的私有IP。该私有IP地址只在该局域网内部有效,不能在互联网上直接访问。那私有IP怎么访问公网呢?通常在局域网中使用网络地址转换(NAT)技术,将多个内部设备共享一个公网IP地址,以便它们可以访问互联网

七、路由器

路由器是一种用于连接多个网络或网段的网络设备,它能够将数据从一个网络转发到另一个网络。路由器在互联网和许多私有网络中扮演着至关重要的角色,主要负责寻址、最佳路径选择以及数据包的转发。这是通过查找路由表来实现的,路由表中包含了不同网络之间的关系,以确定最佳路径。而且路由器本身天然的就会构建局域网(子网)。路由器的主要功能有:

  • 转发数据
  • DHCP分配
  • 组建局域网(配置无线网络)
  • NAT等

通过上面我们也知道了路由器也是一个主机,所以它也要有自己的IP地址,由于它承担着数据包转发的工作,所以它必然存在着多个接口,而路由器在其物理结构上是有着两种主要类型的网络接口: LAN口(局域网口)、WAN口(广域网口), 它们在网络连接和数据传输中扮演着不同的角色:

  • LAN口(局域网口)
    • 局域网接口:LAN口通常用于连接本地网络内的设备,如计算机、手机、智能家居设备等。这些设备通常位于同一个物理位置,例如您的家庭或办公室内,这是路由器对内的表现,即面对的是自己构建的子网。
    • 本地数据交换:LAN口用于在局域网内传输数据包,使本地设备能够相互通信,共享文件、打印机、互联网连接等。
  • WAN口(广域网口):
    • 广域网接口:WAN口通常用于连接到广域网,如互联网服务提供商(ISP)的网络。这是您的局域网与外部互联网之间的关键接口,这是对外的表现,即自己本身也是被人构建的一个子网内的一个主机。
    • 外部数据传输:WAN口负责将数据包从局域网传输到外部网络(互联网),并将来自外部网络的数据包传送回局域网。这是实现互联网连接的关键。

WAN口,也可理解为自己所在的上级子网所分配的IP。说是广域网口也不是很准确

所以说:

  • 一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)
  • 路由器LAN口连接的主机都从属于当前这个路由器的子网中
  • 不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1)。子网内的主机IP(私有IP)地址不能重复,但是子网之间的IP地址就可以重复了。
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP了。
  • 子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。这种技术称为NAT(Network Address Translation,网络地址转换)。
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上。这样的服务器可以在阿里云/腾讯云上进行购买。

因为有了私有IP,每个局域网内的私有IP是可以重复的,这样就大大缓解了IP地址不足窘迫。通常在局域网中使用网络地址转换(NAT)技术(本质上就是不断的将私有IP向上替换成公网IP进行通信),将多个内部设备共享一个公网IP地址,以便它们可以访问互联网。

八、路由

在网络中将数据从一台主机发往另一台主机的过程,本质上就是数据在网络中不断路由(找路)的过程。数据路由是指将数据从源地址传输到目标地址的过程。在路由的过程成,我们最主要的就是解决下一跳(从这个路由器跳到下一个路由器)问题。

数据包的路由过程其实就是在问路的过程,就像唐僧西天取经一样,有了源IP(长安城)和目的IP(西天大雷音寺),唐僧(数据包)每到一处找妖怪问路,就如同数据包每到一个路由器,如五指山妖怪、流沙河妖怪、火焰山妖怪等,这些路由器都有着自己的路由表,这些路由表中记录了去往目的IP所要经过的下一站的地址

  • 例如:
    • 五指山妖怪说:"去西天?往西走火焰山,或者绕道车迟国。"
    • 火焰山妖怪说:"去西天?过牛魔王的地盘,或者借铁扇公主的扇子。"

如果这个路由表中没有记录对应的目的IP(即该路由器也不知道路要怎么走),它会将数据包转发给自己的默认网关,也就是默认的下一站地址,然后从这个默认的路由器再开始上述的查找,就像唐僧在火焰山问牛魔王去西天的路,牛魔王说不知道,但是牛魔王说你去哪哪哪找一个老头,每次有人问我不知道的路的时候,我都会让它们去找老头。这个老头就是牛魔王路由器的默认路由器。

有了上面的形象的例子,我们现在详细解释一下路由的过程:

假设我们有一个简单的局域网(LAN)网络,其中包含3台计算机A、B和C,它们分别连接到一个路由器R。现在,计算机A想要向计算机C发送一些数据。

在网络中路由(找路)。数据路由是指将数据从源地址传输到目标地址的过程。在路由的过程成,我们最主要的就是解决下一跳(从这个路由器跳到下一个路由器)问题。在计算机网络中,数据通常以数据包的形式进行传输。下面我将举例详细解释数据的路由过程。

  假设我们有一个简单的局域网(LAN)网络,其中包含3台计算机A、B和C,它们分别连接到一个路由器R。现在,计算机A想要向计算机C发送一些数据。

  1. 数据封装:发送端的计算机A首先将要发送的数据封装成一个数据包。数据包通常包含源IP地址(计算机A的IP地址)、目标IP地址(计算机C的IP地址)以及实际的数据内容。
  2. 路由表查找:计算机A将数据包发送到路由器R。在路由器R上有一个路由表,它包含了关于如何将数据包从一个网络发送到另一个网络的信息。路由器R使用目标IP地址来查找路由表,确定下一跳的地址。
  3. 下一跳选择:路由器R根据路由表查找结果选择下一跳的地址。如果目标IP地址与路由表中的某个目标网络匹配,路由器R将选择将数据包发送到该目标网络所连接的下一个路由器或目标主机。如果没有匹配,则进行默认的下一跳,即默认路由。
  4. 数据转发:路由器R将数据包转发到下一个目标。这个过程涉及到查找最佳路径,根据网络拓扑、链路状态和其他因素来选择下一跳。
  5. 路由器之间的传递:数据包通过一系列的路由器从源地址传输到目标地址。每个路由器都会重复执行上述步骤,查找最佳路径并将数据包转发到下一个目标。
  6. 数据到达:最终,数据包到达目标计算机C。目标计算机C接收数据包,并解析其中的数据内容。

可以看着下图理解

1、路由表 

上述的路由过程重点是路由表的查询。 每个路由器都有维护的自己一张路由表。在Linux下使用 route 命令可以查询系统的路由表信息

  • Destination(目标地址):表示目标网络/主机的IP地址。
  • Gateway(网关):表示下一跳的网关地址,即将数据包发送到目标网络的下一跳路由器的IP地址。
  • Genmask(网络掩码):表示与目标地址相对应的网络掩码,用于确定网络范围。
  • 标志(Flags):表示该路由的状态和特殊标志。
         U(Up):表示路由处于活动状态,正在使用。此条目有效,可以用来禁用某些条目
         H(Host):表示目标为主机而非网络。
         G(Gateway):表示此条目的下一跳地址是某个路由器的地址,没有该标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经过路由器转发。
         D(Dynamic):表示路由是由动态路由协议学习得到的。
         M(Modified):表示路由已被手动修改。

  • Metric(优先级):表示路由的优先级,用于确定数据包选择哪条路由发送。
  • RefCnt(参考数):表示对该路由的引用计数,记录有多少个路由条目引用该项。
  • Use(使用数):表示该路由的使用计数,记录自系统启动以来有多少数据包通过该路由发送。
  • Iface(接口):表示将数据包发送到目标网络所使用的网络接口,如eth0、wlan0等,即数据包从该路由器哪一个接口发送出去。
  • 图中default表示默认路由

八、总结

网络层的IP协议主要负责从一台主机到另一台主机的数据传输提供决策。在网络山转发的是IP报文,但是实际上在网线上跑的是MAC帧,这就是属于数据链路层的内容了。下篇文章就会对该部分进行详解了。

感谢阅读!


网站公告

今日签到

点亮在社区的每一天
去签到