ip 地址

Internet Protocol Address——联网协议地址(又名网际协议地址),是IP Address的缩写。

192.168.1.1

子网掩码

子网掩码:又叫网络掩码,地址掩码。子网掩码不可以单独存在,它必须结合ip地址一起使用。

作用:只有一个,就是将某个IP地址划分成网络地址和主机地址两部分。

255.255.255.0

1
2
3
24 位掩码可用 ip 数 251 个 32-24=8 11111111 共 255 个
22 位掩码可用 ip 数 1019 个 1111111111 共 1023 个
20 位掩码可用 ip 数 4091 个 111111111111 共 4096 个

网段

网段:即为广播域。

效果:相同网段(广播域)可以通信 ,不同网段(广播域)不可通信。

区分不同网段的方法:

  • 子网掩码中 255 所对应的位相同即为相同网段,不同即为不同网段(有意外情况)
  • ……

如何判断两个 IP 地址是否在同一个网段

参考:

如何判断两个IP地址是否在同一个网段?什么是子网掩码? - 知乎 (zhihu.com)

什么是子网掩码

子网掩码不能单独存在,它必须结合 IP 地址一起使用。子网掩码只有一个作用,就是***将某个 IP 地址划分成网络地址和主机地址两部分。***

说的通俗的话,就是用来分割子网和区分哪些 ip 是同一个网段的,那些不是同一网段的。

例如,两个人都叫张三,但一个张三是张家村的,另一个张三是张村的,那么如何区分这两个张三分别是属于那个村的呢?得让村长来区分,就可以准确的把各自的张三领回村,那么子网掩码就相当于村长,它就是用来区分ip该ip地址是属于那个网段的。

在实际项目中,我们通常会遇到这样的 ip 地址。我们可以直接的判断,他们是同属于一个网段的 ip 地址。

1
2
3
ip地址:192.168.1.1 子网掩码:255.255.255.0

ip地址:192.168.1.2 子网掩码:255.255.255.0

那么对于下面这样的呢?

1
2
3
ip地址:192.168.1.1 子网掩码:255.255.255.0

ip地址:192.168.1.2 子网掩码:255.255.0.0

这两个ip地址虽然在不看掩码的情况下,比较像,但他们并不是同一个网段内的。

这个可以从子网掩码来判断,

1
2
3
192.168.1.1 255.255.255.0 是属于 192.168.1.0 网段的。

而 192.168.1.2 255.255.0.0 是属于 192.168.0.0 网段。

如何根据掩码来确定IP地址网段

如何确定子网掩码和**判断 ip 地址的网段**。

通常我们在划分 vlan 的时候会使用以下例子:

例1:

1
2
3
创建 vlan1:ip地址:192.168.1.1 子网掩码:255.255.255.0

创建 vlan2: ip地址:192.168.2.1 子网掩码:255.255.255.0

那么他们是不是在同一个网段呢?平时配置 ip 地址较多的朋友,可以直观的判断,他们并不是属于同一个网段,那么如何计算呢?要想判断两个 ip 地址是不是在同一个网段,只需将 ip 地址与子网掩码做与运算,如果得出的结果一样,则这两个 ip 地址是同一个子网当中。

详细计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
将ip地址 192.168.1.1 转换为二进制

11000000 10101000 00000001 00000001

将子网掩码255.255.255.0转换成二进制

11111111.11111111.11111111.00000000

然后将两者相“与(and)"运算:(与运算的运算规则:0&0=0;0&1=0;1&0=0;1&1=1,即:两位同时为“1”,结果才为“1”,否则为“0”。负数按补码形式参加按位与运算)

11000000 10101000 00000001 00000001

11111111.11111111.11111111.00000000

然后得到:

11000000 10101000 00000001 00000000

转换成网络号就是:192.168.1.0



将ip地址192.168.2.1转换为二进制

11000000 10101000 00000010 00000001

将子网掩码255.255.255.0转换成二进制

11111111.11111111.11111111.00000000

然后将两者相“与(and)"运算:

11000000 10101000 00000010 00000001

11111111.11111111.11111111.00000000

然后得到:

11000000 10101000 00000010 00000000

转换成网络号就是:192.168.2.0

很明显,二者的结果是不一样的,一个是网段192.168.1.0,一个是网段192.168.2.0,所以不是一个网段。

例2

1
2
3
ip地址1:192.168.1.1 子网掩码:255.255.252.0

ip地址2:192.168.2.1 子网掩码:255.255.252.0

很明显,我们这个和上面例1的 ip 地址是一样的,只是子网掩码不一样,如果不看子网掩码,首先可能就判断他们不是同一个网段。

这里面和上面例1中唯一变化就是子网掩码从255.255.255.0换成了255.255.252.0了,那我们来看下,他们是否属于同一个网段。

详细计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
将 ip 地址 192.168.1.1 转换为二进制

11000000 10101000 00000001 00000001

将子网掩码 255.255.252.0 转换成二进制

11111111.11111111.11111100.00000000

然后将两者相“与(and)"运算:

11000000 10101000 00000001 00000001

11111111.11111111.11111100.00000000

然后得到:

11000000 10101000 00000000 00000000

转换成网络号就是:192.168.0.0



将ip地址192.168.2.1转换为二进制

11000000 10101000 00000010 00000001

将子网掩码255.255.252.0转换成二进制

11111111.11111111.11111100.00000000

然后将两者相“与(and)"运算:

11000000 10101000 00000010 00000001

11111111.11111111.11111100.00000000

然后得到:

11000000 10101000 00000000 00000000

转换成网络号就是:192.168.0.0

很明显,二者的结果是一样的,都是属于 192.168.0.0 网段,所以他们是同属于一个网段。

当然,如果对子网较熟了就不需要经过这些运算了,大部分的网段可以通过分析子网掩码与 ip 地址就可以判断出来是否属于网一网段,但前提是你需要熟悉网段的原理与运算的方法。

如何根据 IP 地址推算子网掩码

确定ip地址子网掩码

大部分的情况下,我们网络中只要不超过 254 台主机的的话,子网掩码都可以设置成 255.255.255.0。那么超过了 254 台主机的话怎么办呢?

可以划分 vlan,也可以设置成一个大网段,划分 vlan 我们就不说了,上面有例子,设置成一个大网段就有一个难点,如何确定这个大网段里面的子网掩码呢?

例如

假设监控网络中有 600 个点位,我们现在也不想把它划分 vlan(实际项目中大部分是会划分vlan的),假设只想用一个大网段把这 600 个点位分配 ip 地址,如何设置 ip 地址,如何确实子网掩码?

**分析:**首先我们知道 600 个点位,可以使用 3 个 254 个 ip 地址段来分配。

可以使用

1
2
3
4
5
ip段一:192.168.0.1——192.168.0.254

ip段二:192.168.1.1——192.168.1.254

ip段三:192.168.2.1——192.168.2.254

每个网段有 254 个ip地址,完全够 600 个点位用的。
那么问题来了,如果要使这三个 ip 段在同一个网段内,那么这个大网段共同的子网掩码是多少呢?

我们来分析下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
将ip地址192.168.0.1转换为二进制

11000000 10101000 00000000 00000001

将ip地址192.168.1.1转换为二进制

11000000 10101000 00000001 00000001

将ip地址192.168.2.1转换为二进制

11000000 10101000 00000010 00000001

转换成了二进制,可以看得出,三个ip段的二进制前面22位的是不变的,那么可以将他们表示成:

ip段一:192.168.0.1/22

ip段二:192.168.1.1/22

ip段三:192.168.2.1/22

这种192.168.2.x/22形式的ip地址相信大家平时都见过,就是已经告诉了子网掩码了。

也就是说他们共同的子网掩码二进制前面22个都是1。

11111111 11111111 11111100 00000000

转换成十进制,那就是255.255.252.0,所以他们共同的子网掩码就是255.255.252.0。

认识网址

搜索关键字:

URL 编码

“…Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*'(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”

“只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。”

URL 编码

参考:

URL编码是什么? - 知乎 (zhihu.com)

URL——详解_正在过坎的博客-CSDN博客_url详解

URL中的保留和不安全字符 (bbsmax.com)

URL 路径,或者查询参数中带有中文、特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符(即没有特殊用途或者特殊意义的字符)去表示那些不安全的字符。

为什么需要URL编码

URL 的编码格式采用的是 ASCII 码而非 Unicode,这表明 URL 中不允许包含任何非 ASCII 字符(比如中文),否则就会造成 URL 解析错误。

URL 中的某些字符会引起歧义,比如若 URL 查询参数中包含”&”或者”%”就会造成服务器解析错误

URL 组成

一个 URL 的基本组件包括

协议 域名/主机 端口号 路径 查询字符串 锚点

其中路径和查询字符串之间使用问号?隔离,示例如下:

image-20221109113031321

image-20221109122322641

主机

主机(host)是资源所在的网站名或服务器的名字,又称为域名。上例的主机是www.example.com

有些主机没有域名,只有 IP 地址,比如192.168.2.15。这种情况常常出现在局域网。

端口

同一个域名下面可能同时包含多个网站,它们之间通过端口(port)区分。“端口”就是一个整数,可以简单理解成,访问者告诉服务器,想要访问哪一个网站。HTTP 协议的默认端口是80,如果省略了这个参数,服务器就会返回80端口的网站。

端口紧跟在域名后面,两者之间使用冒号分隔,比如www.example.com:80

虚拟目录

互联网的早期,路径是真实存在的物理位置。现在由于服务器可以*模拟这些位置*,所以路径只是虚拟位置。

路径可能只包含目录,不包含文件名,比如/foo/,甚至结尾的斜杠都可以省略。这时,***服务器通常会默认跳转***到该目录里面的index.html文件(即等同于请求/foo/index.html),但也可能有其他的处理(比如列出目录里面的所有文件),这取决于服务器的设置。一般来说,访问www.example.com这个网址,很可能返回的是网页文件www.example.com/index.html。

1
2
3
/app/user/
从第一个斜杠 / 开始,到最后一个斜杠 / 结束的那部分,即为虚拟目录
第一个 / 为根目录,每多一个 / 就多进入一层目录

文件名

1
2
3
从域名后开始算起的最后一个 / 开始,到 ? 为止
没有 ? 则到 # 为止
都没有就是到整个 URL 结束为止的那部分就为文件名

一般包含文件名和扩展名,用来指代一个 URL 所访问的具体文件或资源,它可以是图片、html 文件、css 文件,也可以是 js 文件、字体文件等等,它也可以不是某种文件,而是服务端后台执行的某段程序。
甚至可以省略不写虚拟目录和文件名,因为它们本来就不是必须的,服务器会在缺省的情况下给你定位到某个特定的文件或程序上去。

查询参数

1
从 ? 后到 # 结束,即图中的 ?uid=101&ty=2 为查询参数

查询参数,也称为 URL 参数、查询字符串,英文名为 Query,它是用来向服务端以字符串的形式传递参数和少数数据用的

URL的参数是一个个键值对,即一个key对应一个value,多个键值对应**&**连起来:例如a=1&b=2

URL编码:

但参数要传递的某些值往往带有特殊字符,这些字符和 URL 标准的格式冲突,比如要传a&b这样字符串,和查询参数键值对的连接符 & 冲突了,若不加以区分就会产生歧义

而最简单的办法,就是对参数值进行编码,称为 URL Encoding,通过编码,就不再包含会冲突的特殊字符a&b 可以改为 a%26b

锚点

1
#后面那部分字符串,#abc就是锚部分

锚,英文称做Reference,通常也是用来传递参数等信息,但与查询参数的本质区别就是这部分内容不会被传递到服务器端

锚一般用于页面,比如在浏览网页的时候,按个按钮突然帮你定位到页首或页面中的某个位子去了,这就是锚

现在随着前后端分离技术,尤其是 vue、reactjs 等前端框架的兴起,锚作为前端javascript程序处理的参数载体也越来越重要了

URL 字符

  • 查询字符串中空格被编码成+
1
2
3
4
5
6
7
8
URL 的各个组成部分,只能使用以下这些字符。
26个英语字母(包括大写和小写)
10个阿拉伯数字
连词号(-)
句点(.)
下划线(_)

此外,还有18个字符属于 URL 的保留字符,只能在给定的位置出现。比如,查询参数的开头是问号(?),也就是说,问号只能出现查询参数的开头,出现在其他位置就是非法的,会导致网址解析错误。网址的其他部分如果要使用这些保留字符,必须使用它们的转义形式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
URL 字符转义的方法是,在这些字符的十六进制 ASCII 码前面加上百分号(%)

字符 描述 用法 编码
; 分号 保留 %3B
/ 斜线 保留 %2F
? 问号 保留 %3F
: 冒号 保留 %3A
@ “at”符号 保留 %4O
= 等号 保留 %3D
& “和”符号 保留 %26
< 小于号 不安全 %3C
> 大于号 不安全 %3E
" 双引号 不安全 %22
# 井号 不安全 %23
% 百分号 不安全 %25
{ 左大括号 不安全 %7B
} 右大括号 不安全 %7D
| 竖线 不安全 %7C
\ 反斜线 不安全 %5C
^ 加字号 不安全 %5E
~ 波浪 不安全 %7E
[ 左中括号 不安全 %5B
] 右中括号 不安全 %5D
` 反单引号 不安全 %60
空格 不安全 %20

举例来说,有一个网页的 URL 是foo?bar.html,即文件里面包含一个问号,那么需要写成foo%3Fbar.html

URL 的合法字符,其实也可以采用这种转义方法,但是不建议使用。比如,字母a的十六进制 ASCII 码是61,转义形式后就是%61。因此,www.apple.com又可以写成www.%61pple.com,浏览器一样识别 。

既不属于合法字符、也不属于保留字符的其他字符(比如汉字),理论上不需要手动转义,可以直接写在 URL 里面,比如www.example.com/中国.html,浏览器会自动将它们转义,发给服务器。转义方法是使用这些字符的十六进制 UTF-8 编码,每两位算作一组,然后每组头部添加百分号(%)。

绝对 URL 和相对 URL

绝对 URL 指的是,只靠 URL 本身就能确定资源的位置。这意味着,URL 必须带有资源的完整信息,包含协议、主机、路径等部分。前面的例子都是绝对 URL。

相对 URL 指的是,URL 不包含资源位置的全部信息,必须结合当前网页的位置,才能定位资源。比如,当前网页的 URL 是

1
https://www.example.com/path/index.html

该网页上面有一个资源,URL 指向a.html,这个就是相对 URL。因为只知道a.html,并不能定位资源。浏览器假定,a.html与当前网址在同一个子目录下面,从而得到绝对 URL

1
https://www.example.com/path/a.html

相对 URL 如果以斜杠(/)开头,就表示网站的根目录。否则,必须以当前目录为起点,推算资源的位置。比如,相对 URL /foo/bar.html表示网站根目录的子目录foo,foo/bar.html表示在当前目录的foo子目录

URL 还可以使用两个特殊简写,表示特定位置。

  • .:表示当前目录,比如./a.html(当前目录下的a.html文件)
  • ..:表示上级目录,比如../a.html(上级目录下的a.html文件)
  • 这两种简写可以多个连用,比如../../表示上两级目录。
  • 绝对 URL 也可以使用这两个简写,比如www.example.com/./index.html等同于www.example.com/index.html,这时.相当于根目录的当前目录,即根目录本身。

实现 URL 的编码与解码编码转换工具

Linux网卡

Linux网卡配置与绑定

在linux系统中进行网络管理,使用 ifconfig 命令。

但 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了

一般来说,先通过ifconfig命令,先查看本机网卡配置

可以看到本机只有一个网卡ens33

1
2
3
4
5
6
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
ether 00:0c:29:61:cb:98 txqueuelen 1000 (Ethernet)
RX packets 1175 bytes 77066 (75.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 223 bytes 22817 (22.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

进入本机网卡配置文件,可以发现里面没有IP地址、子网掩码、网关和DNS等

1
vim /etc/sysconfig/network-scripts/ifcfg-ens33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TYPE="Ethernet" 			#网卡类型为以太网
BOOTPROTO="dhcp" #启用地址协议 –static:静态协议 –bootp:协议 –dhcp:协议 -none:不指定协议[最好指定]

DEFROUTE="yes" # 默认路由:是;就是default route,是否把这个eth设置为默认路由
PEERDNS="yes"
PEERROUTES="yes"


IPV4_FAILURE_FATAL="no" # 是不开启IPV4致命错误检测:否
IPV6INIT="yes" # IPV6是否自动初始化: 是
IPV6_AUTOCONF="yes" # IPV6是否自动配置
IPV6_DEFROUTE="yes" # IPV6是否可以为默认路由
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no" # 是不开启IPV6致命错误检测:否
IPV6_ADDR_GEN_MODE="stable-privacy" # IPV6地址生成模型:stable-privacy [这只一种生成IPV6的策略]

NAME="ens33" # 网卡物理设备名称
UUID="cc35a411-1918-4cad-9496-3474176e00f4" #通用唯一识别码
DEVICE="ens33" # 网卡设备名称, 必须和 `NAME` 值一样
ONBOOT="yes" #系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备

1
2
3
4
5
6
7
# 新增
IPADDR=192.168.103.203 #网卡对应的ip地址
PREFIX=24 # 子网 24就是255.255.255.0
GATEWAY=192.168.103.1 #网关
DNS1=114.114.114.114 # dns

HWADDR=78:2B:CB:57:28:E5 # mac地址
1
2
# 重启网卡
service network restart

PREFIX与NETMASK的作用一样

ip命令常用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Ip  [选项]  操作对象{link|addr|route...}

# ip link show # 显示网络接口信息
# ip link set eth0 upi # 开启网卡
# ip link set eth0 down # 关闭网卡
# ip link set eth0 promisc on # 开启网卡的混合模式
# ip link set eth0 promisc offi # 关闭网卡的混个模式
# ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
# ip link set eth0 mtu 1400 # 设置网卡最大传输单元
# ip addr show # 显示网卡IP信息
# ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
# ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址

# ip route list # 查看路由信息
# ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
# ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
# ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
# ip route del default # 删除默认路由

为什么要设置DNS

PING 外网其它主机,允许网卡访问外网主机

1
2
# 没设置 DNS 的话就失败了
[root@localhost ~]# ping baidu.com

为什么上不去网呢?这是因为当前 CentOS 还解析不了输入的 baidu.com 这个字符串, 我知道它是百度的域名, 你也知道, 但它就是不知道这是百度域名, 它解析 baidu.com 域名到底是对应哪一IP地址, 那好了, 去电脑本体下 ping 一下 baidu.com 这个域名, 给它加到 CentOS 系统的 hosts 文件这事也就靠谱了

配置网卡设备文件添加DNS域名解析服务器地址

1
2
DNS1=114.114.114.114   # 是国内移动、电信和联通通用的DNS
DNS2=8.8.8.8 # GOOGLE公司提供的DNS,适合国外以及访问国外网站的用户使用

添加DNS域名解析服务器地址, 就是让 CentOS7 在使用 ping 命令时, 一看给的是一个字串符而非IP地址, 就通过 域名解析服务器 查找对应的IP地址, 然后通过IP去 ping 对应的主机这事也就妥妥的了, 简单的说明这个问题它就是这样, 要想知道它具体都干什么事情了, 你还得去研究一下 网络参考模型 以及 协议 这些事!

交换机

参考:

「网络安全」网络设备篇_51CTO博客

交换机概述 - 博客园

交换机的简介及数据通信过程_51CTO博客

开宗明义,概念先行

交换机是一个扩大网络的设备,能为子网中提供更多的连接端口,以便连接更多的电脑。

通俗来说其起到的作用就是把一个网络端口分成多个网络端口,就像从一根水管里流出的水,你用多根水管同时去分流。·

交换机是一种开关,用于电信号转化成网络信号,可以接入任何两个网络节点,并且提供专门的电信号通路,最经常使用就是太网交换机。

交换机是构建局域网络不 可或缺的集线设备。作为局域网通信的重要枢纽和节点,其主要功能就是连接设备。交换机最主要的功能就是连接计算机、服务器、网络打印机、网络摄像头、IP电话 等终端设备,并实现与其他交换机、无线接入点、网络防火墙、路由器等网络设备的互连,从而构建局域网络,实现所有设备之间的通信

交换机工作在OSI模型的数据链路层

image-20221114144457044

交互机的工作原理

交换机位于OSI参考模型中的数据链路层(即第二层),是一种基于MAC地址识别的,用于完成数据的封装和转发的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。

因此,交换机就像是一个业务熟练的调度员,能够准确地将装载数据的汽车从出发路口直接派送至目的地路口。当然,要完成这样繁重和智能化的工作,交换机也需要一个学习和记忆的过程。计算机借助网卡连接到局域网络,而每块网卡都有其与生俱来的“胎记”——MAC地址。交换机通过“学习”,会把连接到每个端口的MAC地址记住,形成一个端口与MAC地址的对应表。

MAC 地址也称为物理地址,硬件地址和老化地址。

交换机工作过程

(1)当交换机从某个端口收到一个数据包时,先读取包头中的源MAC地址,从而建立源端口与源MAC地址的对应关系,并将其添加至地址表。由于交换机能够自动根据收到的以太网帧中的源MAC地址更新地址表的内容,所以交换机使用的时间越长,学习到的MAC地址就越多,未知的MAC地址就越少,因而广播的包就越少(如果目的MAC地址未知,则将该包作广播包处理),处理速度就越快。

(2)读取包头中的目的MAC地址,并在地址表中查找相应的端口。

(3)如果地址表中有与该目的MAC地址对应的端口,则把数据包直接复制到这端口上。由于不是将该帧发送到所有端口,从而使那些既非源端口又非目的端口的端口间仍然可以进行相互间的通信,进而提供了更高的传输速率。

(4)如果在MAC地址表中没有找到该MAC地址,也就是说,该目的MAC地址是首次出现,则将该帧发送到所有其他端口(源端口除外),相当于该帧是一个广播帧。拥有该MAC地址的网卡在接收到该广播帧后,将立即作出应答,从而使交换机将“端口号-MAC地址”对照表添加到地址表。不断重复上述过程,交换机即可实现所有数据的转发,并逐步学习和记忆整个网络中的MAC地址,不断丰富和完善自己的MAC地址表。

总结:由此可见,交换机的工作过程可以概括为“学习-记忆-接收-查找-转发”。 通过广播方式“学习”网卡MAC地址,并将“MAC地址-端口号”的对应关系创建为一个地址表“记忆”在内存中。 从源端口“接收”到数据后,在地址表中“查找”与目的MAC地址相对应的端口,然后将数据帧“转发”至目的端口。

注意:交换机不会永久性地记住所有的端口号―MAC地址关系。 由于交换机中的内存有限,因此能够记忆的MAC地址数量也是有限的。 既然不能无休止地记忆所有的MAC地址,那么也必须赋予其相应的忘却机制,从而吐故纳新。

事实上,交换机设计了一个自动老化时间(Auto-aging Time)机制,若某MAC地址在一定时间内(默认为300 s)不再出现,那么交换机将自动把该MAC地址从地址表中清除。 当下一次该MAC地址重新出现时,将会被当做新地址处理。

另外,由于地址表是保存在内存中的,因此当交换机断电或重新启动后,地址表数据将会全部丢失,必须重新学习。 交换机可以在任意一对端口之间建立临时专用通道,不同端口间的转发可以并行操作。 这就像是在各端口间建立起了一座立交桥,形成立体交叉结构,不同流向的数据各行其道,每个端口均能够独享固定带宽,传输速率几乎不受计算机数量的影响。

另外,当两个或两个以上的端口与同一目的端口进行通信时,交换机将把这些数据帧暂时保存在缓存中,然后根据顺序对其逐一处理和转发,从而实现“多”对“一”的通信。

路由器

参考:

路由器的基本原理与配置命令(静态路由和默认路由)

交换机和路由器的数据包转发流程简述_丿咫尺天涯的博客-CSDN博客

开宗明义,概念先行

路由器工作在OSI参考模型的网络层,它的作用是为数据包选择最佳路径,最终送达目的地。

路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。路由器是互联网络的枢纽,“交通警察”。

路由器(Router)又称***网关设备***(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。

路由器的工作原理

路由表是路由器的地图,指引路由器的方向。

在路由表中,包含了每个路由器所掌握的所有*目的地的网络地址*,以及通过此路由器到达这些网络的最佳路径

这个最佳路径是指路由器的***某个接口或下一跳路由器的地址***,由于路由表的存在,路由器才能高效的进行数据包的转发。

交换机和路由器的数据包转发流程

网络设备之间通信:

  • 发送端的数据向外发送一个数据包

    • 系统判断这个数据包的目标地址是否在*同一个网段*

      • 若与发送机属于同一网段,系统直接将数据包封装成帧,通过二层设备发送到本网段内的目标地址

      • 不在同一网段,系统将数据包转发到*网关*,重新封装

        • 网关查看数据包送达的目标ip地址

        • 系统根据目标ip地址查找路由表,决定转发端口

        • 重新封装转发到下一个路由器

        • 网关发现目标地址属于本网段,查找MAC表(ip与mac对应关系),封装成帧发送到目标机器网卡

        • 目标主机验证后传送给上层应用

具体路由器转发规则:

  • 主机A发向主机B的数据流在网络层封装成IP数据包IP数据包的首部包含了源地址和目标地址
  • 主机A会用本机配置的24IP网络掩码255.255.255.0与目标地址进行与运算,得出目标网络地址与本机的网络地址*是不是在同一个网段*中。如果不是将IP数据包转发到网关
  • 在发往网关前主机A还会通过ARP的请求获得默认网关的MAC地址。在主机A数据链路层IP数据包封装成以太网数据帧,然后才发住到网关……也就是路由器上的一个端口
  • 当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉。路由器认为这个IP数据包是要通过自己进行转发,接着它就在匹配路由表。匹配到路由项后,它就将包发往下一条地址。
  • 路由器转发数据包就是这样,所以它始终是不会改IP地址的。只会改MAC

image-20221118155409043

image-20221118155413123

VLAN

参考:

VLAN技术浅谈-新华三集团-H3C

开宗明义,概念先行

vlan的全称是Virtual Local Area Network,即“虚拟局域网”,把一个大的局域网,分成多个隔离的,小的局域网。

它的作用就是将物理上互连的网络在逻辑上划分为多个互不相干的网络,这些网络之间是无法通讯的,就好像互相之间没有连接一样,因此广播也就隔离开了。VLAN的实现原理非常简单,通过交换机的控制,某一VLAN成员发出的数据包交换机只发给同一VLAN的其它成员,而不会发给该VLAN成员以外的计算机。简言之,一个VLAN就是一个广播域。

为什么需要 vlan

  • 广播域被限制在一个 VLAN 内,节省了带宽,提高了网络处理能力。
  • 增强局域网的安全性:VLAN 间不能直接通信,即一个 VLAN 内的用户不能和其它 VLAN 内的用户直接通信,而需要通过路由器或三层交换机等三层设备。
  • 灵活构建虚拟工作组:用 VLAN 可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。

OSI 参考模型

参考:

[OSI七层模型与TCP/IP五层模型](https://www.cnblogs.com/qishui/p/5428938.html)

image-20221118112802670

TCP/IP五层协议

img

img

img

Http 头信息

HTTP headers - 腾讯云

Http头信息(一)——通用头信息(一)

Http头信息(二)——请求头信息(一)

Http头信息(三)——响应头信息(一)

这可能是最全的Http头信息资料了

请求和响应都有的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 对于请求来说,该指令的意思是:可以给我缓存,但是这个缓存必须是向服务器验证后证明是有效的。
对于响应来说,该指令的意思是:可以缓存这个响应,但使用前必须向服务器做有效性验证 */
Cache-Control:no-cache

/* 对于请求和响应来说,不得以任何形式存储请求或响应的内容 */
Cache-Control:no-store

/* 对于请求来说,可以接收:自响应被发送那一刻开始算起,不超过60秒的缓存
对于响应来说,这个响应可以缓存,且有效期为60秒 */
Cache-Control:max-age=60

/* 对于请求和响应来说,缓存不能改变其内的媒体类型。例如不能压缩等 */
Cache-Control:no-transform

请求专用的

1
2
3
4
5
6
7
8
/* 可以接收过了有效期(max-age指定),但是没过max-stale的缓存 */	
Cache-Control:max-stale=60

/* 可以接收在未来60秒内,处于有效期(max-age指定)的缓存 */
Cache-Control:min-fresh=60

/* 只接收缓存。如果没有缓存,则返回 504 Gateway Timeout */
Cache-Control:only-if-cached

响应专用的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* 此响应可以被任何中间者缓存 */
Cache-Control:public

/* 此缓存只能被发起请求的客户端缓存 */
Cache-Control:private

/* 缓存过期后,使用前,必须向服务器做有效性验证。
在Http 1.1规范里,是允许某些情况下直接使用过期缓存的。而加入这个命令,就决不允许使用过期缓存了 */
Cache-Control:must-revalidate

/* 与must-revalidate一致,区别为:这个指令不能作用于私有缓存上。什么是私有缓存?
Cache-Control:private会将缓存存在私有缓存中 */
Cache-Control:proxy-revalidate

/* 与max-age类似,这里的s代表共享,并且,这个指令仅用于CDNs或者其他中间者(intermediary caches)。这个指令会覆盖max-age和expires响应头 */
Cache-Control:s-maxage=60

http 头部

http 头部:

请求:

  • User-Agent——关于浏览器和它平台的信息,如 Mozilla4.0
  • Accept——客户能处理的页面的类型,如 text、html
  • Accept-Charset——客户可以接受的字符集,如 Unicode-1-1
  • Accept-Encoding——客户处理的页面编码方式,如 gzip
  • Accept-Language——客户能处理的自然语言,如 en(英语),zh-cn(简体中文)
  • Host——服务器的 DNS 名称,从 URL 中提取出来,必须
  • Referer——用户从改 URL 代表的页面触发访问当前请求的页面
  • Cookie——将以前设置的 Cookie 送回服务器,可用来作为会话信息

双向:

  • Date——消息被发送的日期和时间

响应:

  • Server——服务器的信息
  • Content-Encoding——内容是如何编码的
  • Content-Language——页面使用的自然语言
  • Content-Length——以字节计算的页面长度
  • Content-type——页面的 MIME 类型
  • Last-Modified——页面最后修改的时间和日期,在页面缓存机制中意义重大
  • Location——指示客户将请求发送给别处,即重定向到另一个 URL
  • Set-Cookie——服务器希望客户保存一个 Cookie

转义字符

1
在MYSQL中 '\'(反斜杠)被用来转义一个字符。转义一个字符意味着取消该字符的特殊用途。使用转义字符可以得到更清楚的图片

http 请求中的 payload

payload,翻译过来是有效载荷

抽象一下,payload 可以理解为一系列信息中最为关键的信息。
对于程序员来说就是在程序中 起关键作用的代码。

安全方面

通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,
比如数据量的大小、校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,
一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是 payload

Kali Linux 文件系统

默认的文件系统

/bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

/boot
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

**/dev **
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

/etc
etc 是 Etcetera(等等) 的缩写,这个目录用来存放*所有的系统管理所需要的配置文件和子目录。*

/home
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名

/lib
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

/media
Linux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

/opt
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个 Oracle 数据库则就可以放到这个目录下。默认是空的。

/root
该目录为系统管理员,也称作超级权限者的用户主目录。

/tmp
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

/usr
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和*文件*都放在这个目录下,类似于 windows 下的 program files 目录。

/usr/bin
系统用户使用的应用程序。

/usr/sbin
超级用户使用的比较高级的管理程序和系统守护程序。

/usr/src
内核源代码默认的放置目录。

/var
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

/run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。


© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k