网络模型及IP地址
OSI模型将网络分为7层进行解释,从下至上依次为:
- 物理层:负责在物理介质上传输原始比特流;如网线、光纤、无线信号调制等,物理层确定了电压电平、物理连接器、线缆类型、传输速率和物理拓扑结构等,确保比特流的正确传输;
- 数据链路层:负责在同一物理网络内的两个直接相连的节点之间进行数据帧传输;数据链路层将网络层的数据包封装成帧,添加物理地址(如MAC地址);网卡和以太网交换机工作在数据链路层;
- 网络层:负责在不同网络之间进行数据的逻辑寻址和路由;定义逻辑地址(如IP地址),将传输层的报文段封装成数据包,并选择最佳路径将数据包从源主机通过一个或多个网络传输到目的主机;路由器工作在这一层;
- 传输层:负责提供端到端(源主机到目的主机或进程到进程)的可靠或不可靠数据传输服务;将网络层数据分割成更小的报文段(TCP)或数据报(UDP)进行传输;端口号用于区分同一主机上的不同应用程序;
- 会话层:负责建立、管理和终止应用程序进程之间的会话;提供会话控制机制,如会话建立、同步点设置、会话恢复和释放;
- 表示层:负责数据的表示、加密和压缩;进行数据格式转换,确保一个系统的应用层发送的数据能被另一个系统的应用层理解;
- 应用层:用户和应用程序与网络服务之间的接口;包含各种用户应用程序使用的协议,如HTTP, HTTPS, FTP, SMTP等,实现特定的网络应用功能;
TCP/IP 模型将会话层、表示层、应用层合并为应用层;其余不变。
简单来说,网络的基础连接可以想象成一条线;比如将两台电脑通过网线连接在一起,就可以在两台电脑间进行数据传输了,这就是最简单的网络。
但是由于现实世界里需要连接的设备太多,就需要一种机制来唯一标识网络中的设备并指明其位置,以保证传输的数据能够到达正确的终端,这个机制就是IP地址;IP地址是用于在网络中唯一标识一台主机(如电脑、服务器、路由器等)的逻辑地址,并指示该主机在网络中的位置,从而实现数据包的正确路由和交付。
IPv4(Internet Protocol version 4)是互联网协议(IP)的第四个版本,也是目前全球互联网和大多数计算机网络最核心、使用最广泛的网络层协议。由 32 位二进制数组成,通常用点分十进制表示,如192.168.1.1。
可以使用ip -br a显示所有接口的简洁信息:
ip命令完整语法:ip [选项] [网络格式] [show [dev [接口名称]]]
| ip命令常用属性 | 作用 |
|---|---|
| -br | 以简洁表格格式输出 |
| -c | 彩色显示输出结果 |
| -h | 显示人类可读的统计信息 |
| [网络格式] | 指定操作对象为网络地址 |
| show | 显示信息(可省略,可单独使用) |
| show dev [接口名称] | 指定要显示的具体网络接口 |
[root@CentOS79 ~]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 192.168.1.10/24 fe80::f6c0:93b2:9d52:9904/64
ens36 UP 192.168.2.10/24 fe80::db4:dc82:30a7:96a2/64
ens37 UP 192.168.8.10/24 fe80::615f:af31:6697:9579/64
virbr0 DOWN 192.168.122.1/24
virbr0-nic DOWN
[root@CentOS79 ~]# ip -c -h address show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:37:c1:be brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::f6c0:93b2:9d52:9904/64 scope link noprefixroute
valid_lft forever preferred_lft forever
在上面的例子中,可以看到ens33的IP为192.168.1.10/24;后面的/24代表子网掩码。之前说到IP地址由 32 位二进制数组成,子网掩码也一样,且通常也有点分十进制表示;但子网掩码的作用是表示IP地址有前几位数不可更改。
详细解释:
子网掩码中0代表可更改,1代表不可更改;/N代表前N位不可更改(即子网掩码前N位都是1,后面都是0);
192.168.1.10换算成二进制就是11000000.10101000.00000001.00001010;
/24换算成二进制就是11111111.11111111.11111111.00000000(255.255.255.0);
一位子网掩码二进制符对应一位IP地址二进制符,1代表不可变;也就是说IP地址192.168.1.10/24只允许最后的8位二进制数可以改变;
已知8位二进制数最小为0,最大为255(00000000=0,11111111=255),那么192.168.1.N/24最多只能允许给出256个不同的IP地址(192.168.1.0=11000000.10101000.00000001.00000000,192.168.1.255=11000000.10101000.00000001.11111111);
假设一台设备只会占用一个IP地址,那么理论上192.168.1.N/24最多能给256台设备分配不同的IP地址,即最多256台设备可以通过该网络互相传递数据;这样一个基础局域网就形成了。具有相同连续的IP地址前缀的IP集合被称为同一个网段,192.168.1.N/24中的所有IP都在同一个网段。
(实际上 192.168.1.0 是网络地址,192.168.1.255 是广播地址;可用主机地址范围是从192.168.1.1 到 192.168.1.254 共 254 个地址)
子网掩码除了/24还有/16,/8,/0等;/0代表整个IP可变范围都是子网,正常情况不会使用。
IPv4 地址共有32位,理论上可以提供约 43 亿个唯一地址。然而,现实里连接网络的设备数肯定远远大于这个值;为了解决这个问题,IPv4地址空间被划分为公网IP和私有IP两大类,这也使网络可分为公网和子网。
- 公网IP:全球唯一,由IANA统一分配,用于互联网上的设备识别,可以直接访问互联网;
- 私有IP:保留用于内部网络,无法直接访问互联网,需要在局域网边界通过网络地址转换(NAT) 映射为公网IP;常见的私有IP段包括10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等;
由于公网IP地址有限,而内部设备众多,NAT技术应运而生。它通常部署在连接子网和公网的路由器上,核心作用是将内部网络的多个私有IP地址,映射到一个或少数几个公网IP地址上,从而实现内网设备共用公网IP访问互联网。
以家庭网络为例,NAT工作存在三个阶段:
- 地址映射:当子网设备(如IP为192.168.1.10的电脑)要访问公网服务器(如203.0.113.5)时,数据包首先到达路由器;
- 端口转换:路由器不仅将数据包的源IP从私有IP(192.168.1.10)改为自己的公网IP(如198.51.100.10),还会替换源端口号,并记录下这个映射关系(192.168.1.10:1234 -> 198.51.100.10:54321);
- 回程转发:当公网服务器返回响应时,数据包目的地址是路由器的公网IP和端口(198.51.100.10:54321)。路由器根据之前记录的映射表,将目的IP和端口转换回子网设备的私有IP和端口(192.168.1.10:1234),再将数据包转发给子网设备;
通过这种方式,一个公网IP就可以通过不同的端口号,为数以百计的子网设备提供互联网访问服务。
而想要实现子网IP与公网IP的交换与数据传输,则需要路由器与交换机。
路由器维护一个路由表,其中存储了目标网络的路由信息(如目标IP地址范围、下一跳地址等)。当路由器收到一个数据包时,它会检查数据包的目的IP地址,并在路由表中查找最佳路径。
使用netstat -nr命令可以检查路由:
[root@CentOS79 ~]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.8.2 0.0.0.0 UG 0 0 0 ens37
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens36
192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
最上方一行Gateway表示网关IP;
每一个子网都要设置一个IP作为该子网与公网连接的唯一出口,这个IP被称为网关;子网中的每个用户想要发送数据到公网,首先要把数据发送到网关。
网关IP必须和其他用户IP在同一网段中,否则用户无法将数据传输到子网外。如果网段中的IP之间进行数据传输,可以直接通信,不需要经过网关。
网关通常由路由器实现,但不限于路由器(防火墙、服务器也可作为网关)。
交换机维护一个MAC地址表,记录每个端口对应的MAC地址(物理地址);当交换机收到一个数据帧时,它会检查帧的目的MAC地址,并在表中查找对应的端口,然后将帧只转发到该端口。
交换机通过“自学习”机制构建MAC地址表;当交换机收到一个帧时,它会记录源MAC地址和接收端口的映射。如果目的MAC地址不在表中,交换机会广播帧到所有端口(泛洪),直到学习到地址。
MAC地址(Media Access Control address)是一个硬件标识符,用于在数据链路层唯一标识网络设备;它是48位的二进制数,通常以十六进制表示,如00:1A:2B:3C:4D:5E。MAC地址确保了数据帧能在子网中准确送达目标设备。
可以使用ip -br link查看MAC地址:
[root@CentOS79 ~]# ip -br link
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
ens33 UP 00:0c:29:37:c1:be <BROADCAST,MULTICAST,UP,LOWER_UP>
ens36 UP 00:0c:29:37:c1:c8 <BROADCAST,MULTICAST,UP,LOWER_UP>
ens37 UP 00:0c:29:37:c1:d2 <BROADCAST,MULTICAST,UP,LOWER_UP>
virbr0 DOWN 52:54:00:d1:3a:c5 <NO-CARRIER,BROADCAST,MULTICAST,UP>
virbr0-nic DOWN 52:54:00:d1:3a:c5 <BROADCAST,MULTICAST>
网络连通性测试
可以通过ping 命令进行网络连通性测试;
Linux语法:ping [选项 [参数]] [网址信息]
| ping常用选项 | 作用 |
|---|---|
| -c [数] | 发送指定数量的数据包 |
| -i [时间] | 设置数据包发送间隔(秒) |
| -w [时间] | 设置超时时间(毫秒) |
| -s [字节数] | 指定数据包大小(字节) |
| -v | 详细输出 |
| -q | 只显示摘要 |
| -I [接口名称] | 指定网络接口 |
| -D | 在每个输出行前显示时间戳 |
如果能够解析出IP,说明DNS配置正确;如果能ping,说明网关配置正确。
[root@CentOS79 ~]# ping baidu.com -c 4 -w 2
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=128 time=34.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=128 time=31.9 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=128 time=32.9 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=128 time=32.2 ms
^C
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 31.985/32.808/34.118/0.839 ms
[root@CentOS79 ~ 17:20:52]# ping 192.168.8.2
PING 192.168.8.2 (192.168.8.2) 56(84) bytes of data.
64 bytes from 192.168.8.2: icmp_seq=1 ttl=128 time=0.204 ms
64 bytes from 192.168.8.2: icmp_seq=2 ttl=128 time=0.648 ms
64 bytes from 192.168.8.2: icmp_seq=3 ttl=128 time=0.581 ms
64 bytes from 192.168.8.2: icmp_seq=4 ttl=128 time=0.929 ms
^C
--- 192.168.8.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.204/0.590/0.929/0.259 ms
如果ping不成功,可以使用mtr -n 1.1.1.1来查看数据最远到达的位置;
mtr命令可以实时显示数据包从源主机到目标主机的完整路径,并监测每一跳节点的延迟和丢包率。
[root@CentOS79 ~]# mtr -n 1.1.1.1
ss命令是Linux系统中用于查看套接字统计信息的工具,是netstat命令的现代替代品,提供更详细和高效的网络连接信息展示;
语法:ss [选项] [过滤条件]
| ss常用选项 | 作用 |
|---|---|
| -t | 显示TCP连接 |
| -u | 显示UDP连接 |
| -l | 仅显示监听状态的套接字 |
| -a | 显示所有套接字(监听和非监听) |
| -n | 以数字形式显示地址和端口(不解析域名) |
| -4 | 仅显示IPv4连接 |
| -p | 显示使用套接字的进程信息 |
选项之间可以直接连接;
[root@CentOS79 ~]# ss -ntp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.10:22 192.168.1.1:59525 users:(("sshd",pid=7256,fd=3))
ESTAB 0 0 192.168.1.10:22 192.168.1.1:61655 users:(("sshd",pid=7096,fd=3))
网络配置
Linux系统图形化配置网络的命令是nmtui(直接用就会有操作界面出现,可以直接更改网络属性)。
而使用代码进行网络配置的命令是nmcli;
语法:nmcli [选项] [对象] [命令]
使用nmcli networking on/off可以启用或停用网络,但不会停止NetworkManager服务。
| nmcli常用属性 | 作用 |
|---|---|
| general | 查看 NetworkManager 常规状态和权限 |
| networking | 控制网络连接总开关 |
| radio | 管理无线网络开关 |
| connection | 管理网络连接配置 |
| device | 管理网络设备 |
| agent | 管理 NetworkManager 代理 |
| -t | 简洁输出 |
| -f | 指定显示字段 |
[root@CentOS79 ~]# nmcli networking on
[root@CentOS79 ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens37 ethernet 已连接 有线连接 2
ens33 ethernet 已连接 ens33
ens36 ethernet 已连接 有线连接 1
virbr0 bridge 已断开 --
lo loopback 未托管 --
virbr0-nic tun 未托管 --
上方输出中的device列代表设备,也就是网卡;可以使用nmcli connection命令显示更详细的信息。
[root@CentOS79 ~]# nmcli connection
NAME UUID TYPE DEVICE
有线连接 2 8cbaecd3-d58a-376a-8247-11f041507fca ethernet ens37
ens33 7b3dbfb7-b293-4f43-ac8a-260b6ccbd466 ethernet ens33
有线连接 1 4b4e3af4-9dbf-3f88-ab98-68e4605aa5af ethernet ens36
UUID是网卡的唯一编号,建议通过UUID对网卡进行操作;
首先断开有线连接1、2:
[root@CentOS79 ~]# nmcli connection delete {4b4e3af4-9dbf-3f88-ab98-68e4605aa5af,8cbaecd3-d58a-376a-8247-11f041507fca}
成功删除连接 "有线连接 1" (4b4e3af4-9dbf-3f88-ab98-68e4605aa5af)。
成功删除连接 "有线连接 2" (8cbaecd3-d58a-376a-8247-11f041507fca)。
# 可能出现无法删除的情况,是因为 NetworkManager 存在自动连接机制。
[root@CentOS79 ~]# nmcli device disconnect {4b4e3af4-9dbf-3f88-ab98-68e4605aa5af,8cbaecd3-d58a-376a-8247-11f041507fca}
[root@CentOS79 ~]# nmcli connection
NAME UUID TYPE DEVICE
ens33 7b3dbfb7-b293-4f43-ac8a-260b6ccbd466 ethernet ens33
# 如果想重新启用自动连接,可以用 nmcli device set [设备名] autoconnect yes
断开后,使用nmcli命令重新配置ens36、ens37网络连接:
创建一个新的以太网连接配置语法:nmcli connection add type [连接类型] [属性名 属性值]…
| 属性 | 示范 | 作用 |
|---|---|---|
| type | type ethernet | 指定连接类型为以太网 |
| ifname | ifname ens36 | 指定网络接口名称 |
| con-name | con-name ens36-auto | 指定连接配置文件的名称 |
| ipv4.method | ipv4.method auto | 自动获取IP (DHCP) |
| ipv4.gateway | ipv4.gateway 192.168.8.2 | 默认网关 |
| ipv4.dns | ipv4.dns 8.8.8.8,8.8.4.4 | DNS服务器 |
| ipv4.addresses | ipv4.addresses 192.168.1.100/24 | 静态IP地址和子网掩码 |
| connection.autoconnect | connection.autoconnect yes | 系统启动时自动连接 |
各属性之间可以使用 /+[Enter] 连接的写法:
[root@CentOS79 ~]# nmcli connection add type ethernet ifname ens36 con-name ens36-auto connection.autoconnect yes ipv4.method auto
连接 "ens36-auto" (827c3877-69be-453e-b826-c47915895e3b) 已成功添加。
[root@CentOS79 ~]# nmcli connection
NAME UUID TYPE DEVICE
ens33 7b3dbfb7-b293-4f43-ac8a-260b6ccbd466 ethernet ens33
ens36-auto 827c3877-69be-453e-b826-c47915895e3b ethernet ens36
[root@CentOS79 ~]# nmcli connection add type ethernet ifname ens37 con-name ens37 ipv4.gateway 192.168.8.2 connection.autoconnect yes ipv4.address 192.168.8.10/24 ipv4.method manual
连接 "ens37" (bc9f83f6-63e8-4d1a-8f05-32b2d74332d2) 已成功添加。
[root@CentOS79 ~]# nmcli connection
NAME UUID TYPE DEVICE
ens37 bc9f83f6-63e8-4d1a-8f05-32b2d74332d2 ethernet ens37
ens33 7b3dbfb7-b293-4f43-ac8a-260b6ccbd466 ethernet ens33
ens36-auto 827c3877-69be-453e-b826-c47915895e3b ethernet ens36
[root@CentOS79 ~]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.8.2 0.0.0.0 UG 0 0 0 ens37
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 ens36
192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
网卡和网关都配好后,还需要配置DNS服务器才能正常连接外网;
DNS 服务器负责将我们输入的域名翻译成计算机需要的 IP 地址,如将www.baidu.com解析为220.181.38.148;如果没有DNS,电脑就不知道域名所对应的IP地址,也就无法进行连接;
dns服务器可以在添加网络连接时使用ipv4.dns属性直接设置,如果没有直接设置,则需要在/etc/resolv.conf中手动添加:
[root@CentOS79 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search gc.cloud
nameserver 1.1.1.1 # Cloudflare DNS
nameserver 8.8.8.8 # Google Public DNS
nameserver 223.5.5.5 # 阿里云公共DNS
nameserver 114.114.114.114 # 中国电信公共DNS
全部配置好就可以连接网络了;
[root@CentOS79 ~]# ping www.baidu.com
PING www.wshifen.com (103.235.46.102) 56(84) bytes of data.
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=1 ttl=128 time=331 ms
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=2 ttl=128 time=329 ms
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=4 ttl=128 time=330 ms
64 bytes from 103.235.46.102 (103.235.46.102): icmp_seq=5 ttl=128 time=329 ms
^C
--- www.wshifen.com ping statistics ---
6 packets transmitted, 4 received, 33% packet loss, time 5024ms
rtt min/avg/max/mdev = 329.594/330.262/331.091/0.947 ms
Linux网络管理与配置详解
4023

被折叠的 条评论
为什么被折叠?



