技术之道

长风破浪会有时,直挂云帆济沧海

  • 首页
  • 分类
  • 归档
  • 标签

  • 搜索
服务治理 k8s tabnine cursor github copilot ai chatgpt chatgpt ai sop 技术选型 bigdata 工具 多进程多线程 docker 计算机网络 mysql 事务 基础架构 kafka nio 分布式 服务搭建 监控 jvm 管理/成长 jenkins devops 云原生 nginx 架构 故障处理 hive spark mapreduce apm redis memcached java 性能 linux

网络FAQ

发表于 2022-12-22 | 分类于 计算机基础 | 0 | 阅读次数 426

网络FAQ

进制转换

二进制转十进制

现在有一个1字节的二进制:11000000,需要转换二进制为十进制

image-20221220112353649

什么是广域网和局域网?

  • 广域网:又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。广域网并不等同于互联网。
  • 局域网:又称内网。是指在某一区域内由多台计算机互联的计算机组。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。在阿里云,相同地域下的ECS实例可以采用同类型网络配置实现内网互通,不同地域的ECS实例之间的内网隔离。

什么是IP地址

我们知道,网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。那 IP 地址就类似于快递上填的收件地址和发件地址一样,有了它,路由器就可以开始充当快递员的角色,在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包。

image-20221220175651301

在网络通讯中,IP地址是一个32位的二进制数表示的地址,其中减去全0表示的无效地址,IP地址总共拥有2^32 -1个地址,它通常表现形式如下:

11000000101010000000000000000001

显而易见,直接展示完整 32 位的 IP 地址既不直观也不好记忆。所以为了方便使用,我们把这 32 位二进制数分成4个八位一组的二进制数,称之为八位组(octet)或者1个字节。每个八位组书写时用点分十进制的格式标识。每个八位组取值为 00000000~11111111(二进制数)。这就让 IP 地址变成了下面的样子:

11000000 10101000 00000000 00000001

由于二进制是机器识别的,所以为了方便人的识别,使用十进制表示,也既点分十进制。

点分十进制

点分十进制,全称点分(点式)十进制表示法**(英:Dotted decimal notation)**,是IPv4的IP地址标识方法,每一组数字都是十进制,每组数字按照十进制表示为0~255,组与组之间用“.(点)”分隔,因此称为“点分十进制”。

最终,IP地址十进制表示:

image-20221220113239338

IP地址结构

IP地址结构划分为两个部分:

  • 网络号:表示主机所在的网络区域
  • 主机号:主机在网络区域中的具体逻辑位置

image-20221223104705160

为什么要区分网络号和主机号

在日常生活中,我们要收发快递必须写发件人地址、收件人地址。比如收件人地址为北京市朝阳区望京街道XX小区XX栋XX单元。这里面北京市朝阳区望京街道就代表具体某一个地区,XX小区XX栋XX单代表收件人具体地址。

在IP协议中,IP地址也有类似的定义。当 IP 数据包在网络中传递时,路由器只关心目的 IP 地址的网络地址,通过识别 IP 地址的网络地址,来为 IP 数据包进行路由操作。当数据包达到了目的的网段以后,才通过 IP 地址的主机号部分查找具体的接收主机。

IP地址的网络号

分类网络

这种地址结构也叫分类网络(Classful Addressing)或称“分级式定址”,是1981年至1993年引入无类别域间路由(CIDR)之前在互联网中使用的一种网路位址架构。该方法将互联网协议第4版(IPv4)的IP地址空间根据前四位地址位划分为五个地址类别。A类、B类和C类为三种不同网络规模的网络提供单播地址。D类用于组播网络,E类地址范围是为未来或实验性目的保留的。

image-20221223104912507

IP地址编码规范中规定:

  • 网络地址:主机号标识全为0的IP地址为网络地址。网络地址是用来标识网络号的,便于路由器寻址操作的
  • 广播地址:主机号标识全为1的IP地址为广播地址。广播地址用于在同一个链路中相互连接的主机之间发送数据包,比如ARP广播。

现有在一个C类地址:192.168.1.125,网络号为前21位、主机号位后8位,通过计算点分十进制计算:

  • 网络地址:192.168.1.0
  • 广播地址:192.168.1.255

img

因此,在分配过程中,最大主机数需要减2,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:

img

通过上述用例,可计算出ABC三类IP地址的网络地址范围以及每个网络地址对应主机数,如下表中:

  • n 表示该二进制位是网络号
  • H 表示该二进制位是主机号
  • X 表示该二进制位无特定作用
类别 IP地址范围 默认子网掩码 最大网络号数 最大主机数
A类 0. 0. 0. 0 = 00000000.00000000.00000000.00000000 127.255.255.255 = 01111111.11111111.11111111.11111111 0nnnnnnn.HHHHHHHH.HHHHHHHH.HHHHHHHH 255.0.0.0 2^7-1=127 2^24-2=16,777,214
B类 128. 0. 0. 0 = 10000000.00000000.00000000.00000000 191.255.255.255 = 10111111.11111111.11111111.11111111 10nnnnnn.nnnnnnnn.HHHHHHHH.HHHHHHHH 255.255.0.0 2^14=16,384 2^16-2=65,534
C类 192. 0. 0. 0 = 11000000.00000000.00000000.00000000 223.255.255.255 = 11011111.11111111.11111111.11111111 110nnnnn.nnnnnnnn.nnnnnnnn.HHHHHHHH 255.255.255.0 2^21=2,097,152 2^8-2=254
D类 224. 0. 0. 0 = 11100000.00000000.00000000.00000000 239.255.255.255 = 11101111.11111111.11111111.11111111 1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX 未定义 未定义 未定义
E类 240. 0. 0. 0 = 11110000.00000000.00000000.00000000 255.255.255.255 = 11111111.11111111.11111111.11111111 1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX 未定义 未定义 未定义

可用看到IP地址的分配把IP地址的32位按每8位为一段分开。这使得前缀必须为8,16或者24位。因此,可分配的最小的地址块有256(24位前缀,8位主机地址,28=256)个地址,而这对大多数企业来说太少了。大一点的地址块包含65536(16位前缀,16位主机,216=65536)个地址,而这对大公司来说都太多了。这导致不能充分使用IP地址和在路由上的不便,因为大量的需要单独路由的小型网络(C类网络)因在地域上分得很开而很难进行聚合路由,于是给路由设备增加了很多负担。

取而代之的是方案是,将所谓的 ABC 分类直接取消,只保留网络号和主机号,并且网络号的位数也不像以前限制的那么死,用一个斜杠告诉用户多少位是网络号,其余的都是主机号。比如 172.20.61.69/20,那网络号的位数就是20位,主机号的位数是 32-20=12位,能放 4096 台机子,很灵活,很够用。

上述这种方式就是CIDR

什么是无类别域间路由(CIDR)

正因为 IP 分类存在许多缺点,所以后面提出了无分类地址的方案,即无类别域间路由(英语:Classless Inter-Domain Routing,简称CIDR)。它是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。它是基于**可变长子网掩码(VLSM)**来进行任意长度的前缀的分配的。

这种方式不再有分类地址的概念,32 比特的 IP 地址被划分为两部分,前面是网络号,后面是主机号。表示形式 a.b.c.d/x,其中 /x 表示前 x 位属于网络号, x 的范围是 0 ~ 32,这就使得 IP 地址更加具有灵活性。

  • 示例一:CIDR格式换算为IP地址网段

    比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。

    img

  • 示例二:IP地址网段换算为CIDR格式

    例如192.168.0.0~192.168.31.255
    image-20221223113648658

什么是子网掩码

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。

子网掩码是一个32位地址,是与IP地址结合使用的一种技术。它的主要作用有两个:

  • 用于屏蔽IP地址的一部分以区别网络号标识和主机号标识,并说明该IP地址是在局域网上,还是在远程网上。
  • 用于将一个大的IP网络划分为若干小的子网络。
    • 使用子网是为了减少IP的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网。使用子网可以提高网络应用的效率。

比如:

A类的默认子网掩码 255.0.0.0 对应二进制 11111111.00000000.00000000.00000000
B类的默认子网掩码 255.255.0.0 对应二进制 11111111.11111111.00000000.00000000
C类的默认子网掩码 255.255.255.0 对应二进制 11111111.11111111.11111111.00000000

可见A类地址:

  • 前8位:11111111标识主机所在的子网,也就是IP地址网络号标识
  • 后24位:00000000 00000000 00000000 标识主机的位掩码,也就是IP地址主机号标识

B、C类依次类推

根据子网掩码计算网络地址

通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段。

image-20221223112012506

根据子网掩码计算最大可划分的子网数

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

image-20221223140705034

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

假设对B类IP地址168.195.0.100/20进行子网划分,它最大能划分多少个子网

  1. 将子网掩码转换成二进制
  2. 计算网络号位数
  3. 网络号- B类地址基础网络号,二者之间位差值N为子网网络号位数
  4. 最大有效网络数就时2的N次方
# 转换二进制子网掩码
11111111.11111111.11110000.00000000(255.255.240.0)
# 统计网络号位数
20
# B类网络号位数
16
# 计算子网网络号位数
N=20-16=4
# 最大可划分子网数
2^4=16

image-20221223142723055

由于子网网络号被划分成 4 位,那么子网地址就有 16 个,分别是0000、0001、0010、0011、0100、0101、0110、0111、1000、1010、1011、1100、1101、11111,如下图:

image-20221223144937910

根据子网数计算网络、广播地址、可用IP

  1. 将子网数目转化为二进制来表示

  2. 取得该二进制的位数,为 L(注意:当二进制数中只有一个1的时候,所统计的位数需要减1(例如:10000要统计为4位))

  3. 取得该IP地址的类子网掩码,将其主机地址部分的前N位置1 即得出该IP地址划分子网的子网掩码。

  4. 子网掩码为1的位数是网络号、为0的位数是主机号

如欲将B类IP地址168.195.0.100划分成32个子网:

# 子网数:十进制转二进制
32 = 100000
# 该二进制为五位数(当二进制数中只有一个1的时候,所统计的位数需要减)
L = 5 
#  计算子网掩码(B类地址默认子网掩码,其主机号包括后两个字节,所以这里要把后2个字节的前5位置1)
255.255.0.0(11111111.11111111.00000000.00000000)---> 255.255.248.0 (11111111.11111111.11111000.00000000)
# 网络号
n = 21
# 主机号
H = 11
# 计算网络地址/子网(IP地址与子网掩码AND运算)
10101000.11000011.00000000.01100100(168.195.0.100)
						AND
11111111.11111111.11111000.00000000(255.255.248.0)
-----------------------------------
10101000.11000011.00000000.00000000 (168.195.0.0)
# 计算广播地址(把网络地址主机号全标识为1)
10101000.11000011.00000111.11111111 (168.195.7.255)
# 可用IP数
2^11-2=2046

根据主机数计算网络、广播地址、可用IP

  1. 将主机数目转化为二进制来表示
  2. 如果主机数小于或等于254(注意去掉保留的两个IP地址:网络地址/广播地址),则取得该主机的二进制位数,为 L,这里肯定L<8。如果大于254,则 L>8,这就是说主机地址将占据不止8位。
  3. 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。

如欲将B类IP地址168.195.0.100划分成若干子网,每个子网内有主机700台:

# 主机数:十进制转二进制
700 = 1010111100
# 该二进制为十位数
L = 10
# 将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255
11111111.11111111.11111111.11111111=255.255.255.255
# 计算子网掩码(从后向前将后10位置为0)
11111111.11111111.11111100.00000000=255.255.252.0
# 网络号
n = 22
# 主机号
H = 10
# 计算网络地址(IP地址与子网掩码AND运算)
10101000.11000011.00000000.01100100(168.195.0.100)
						AND
11111111.11111111.11111000.00000000(255.255.252.0)
-----------------------------------
10101000.11000011.00000000.00000000 (168.195.0.0)
# 计算广播地址(把网络地址主机号全标识为1)
10101000.11000011.00000011.11111111 (168.195.3.255)
# 可用IP数
2^10-2=1022

根据CIDR计算网络、广播地址、可用IP

X.X.X.X/N

  1. N为网络号,则主机号:32-N
  2. 设置32位字节,从后向前32-N主机号全为0,其余全位1,当作子网掩码

如CIDR标识IP地址:168.195.0.100/27

# 网络号
N=27
# 主机号
32 - 27 = 5
# 计算子网掩码
11111111.11111111.11111111.11100000 (255.255.255.224)
# IP地址与子网掩码AND运算
10101000.11000011.00000000.01100100(168.195.0.100)
						AND
11111111.11111111.11111111.11100000(255.255.255.224)
-----------------------------------
10101000.11000011.00000000.01100000 (168.195.0.96)
# 计算广播地址(把网络地址主机号全标识为1)
10101000.11000011.00000000.01111111 (168.195.0.127)
# 可用IP
可用IP: 2^5-2=30

什么是路由表转发

IP地址的网络地址是用来进行路由控制的。路由控制表中记录网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。

在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。

下面以下图的网络链路作为例子说明:

IP 地址与路由控制

  1. 主机 A 要发送一个 IP 包,其源地址是 10.1.1.30 和目标地址是 10.1.2.10,由于没有在主机 A 的路由表找到与目标地址 10.1.2.10 相同的网络地址,于是包被转发到默认路由(路由器 1 )
  2. 路由器 1 收到 IP 包后,也在路由器 1 的路由表匹配与目标地址相同的网络地址记录,发现匹配到了,于是就把 IP 数据包转发到了 10.1.0.2 这台路由器 2
  3. 路由器 2 收到后,同样对比自身的路由表,发现匹配到了,于是把 IP 包从路由器 2 的 10.1.2.1 这个接口出去,最终经过交换机把 IP 数据包转发到了目标主机

什么是NAT协议

我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址。

与之相对的,除了公有 IP 地址外,还有私有 IP 地址,私有 IP 地址就是我们在私有网络中使用的地址,比如局域网或者公司内部的网络。不知道你没有观察过自己家路由器所分配的 IP 地址,当你登上路由器的网关 192.168.1.1 时,在分配的网络下面一般会看到一些 IP 地址,都是 192.168.1.x ,这种地址就是私有 IP 地址。

# 计算机网络
深入剖析Parquet文件
Linux网络命名空间
  • 文章目录
  • 站点概览
lw‘Blogs

lw‘Blogs

自信人生二百年,会当水击三千里

80 日志
8 分类
40 标签
RSS
Github E-mail
Creative Commons
© 2025 京ICP备2022025426号-1