目录
- 目录
- 1. 网络请求概览
- 2. 各层常用网络协议
- 3. 层与层之间的关系
- 4. 查看 IP 地址
- 5. 初识 IP 地址
- 6. CIDR 无类型域间选路
- 7. MAC 地址
- 8. 配置 IP 地址
- 9. DHCP 动态主机配置协议
- 10. 解析 DHCP 的工作方式
- 11. IP 地址的收回和续租
- 参考文章
1. 网络请求概览
2. 各层常用网络协议
- 应用层:DHCP、HTTP、HTTPS、DNS、RPC、P2P、SMTP
- 传输层:TCP、UDP
- 网络层:IP、ICMP、OSPF、BGP
- 链路层:ARP、VLAN、STP
- 物理层:网络跳线
3. 层与层之间的关系
- 只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层
- 对 TCP 协议来说,三次握手也好,重试也好,只要想发出去包,就要有 IP 层和 MAC 层,不然是发不出去的
4. 查看 IP 地址
net-tools
中的ifconfig
iproute2
中的ip address
net-tools
起源于 BSD,自 2001 年起,Linux 社区已经对其停止维护。而iproute2
旨在取代net-tools
,并提供了一些新功能。一些 Linux 发行版已经停止支持net-tools
,只支持iproute2
。
net-tools
通过 procfs(/proc
) 和 ioctl
系统调用去访问和改变内核网络配置,而iproute2
则通过netlink
套接字接口与内核通讯。
net-tools
中工具的名字比较杂乱,而iproute2
则相对整齐和直观,基本是ip
命令加后面的子命令。
虽然取代意图很明显,但是这么多年过去了,net-tool
依然还在被广泛使用,最好还是两套命令都掌握。
> ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 4c:cc:6a:70:fc:d9 brd ff:ff:ff:ff:ff:ff
inet 116.56.129.153/24 brd 116.56.129.255 scope global noprefixroute dynamic enp5s0
valid_lft 1313sec preferred_lft 1313sec
inet6 2001:250:3000:2b80:7171:519:ba83:4ff9/64 scope global noprefixroute dynamic
valid_lft 2591975sec preferred_lft 604775sec
inet6 fe80::f646:5a2b:929:108c/64 scope link noprefixroute
valid_lft forever preferred_lft forever
注意:
lo
全称是loopback
,又称环回接口,往往会被分配到127.0.0.1
这个地址,用于本机通信,经过内核处理后直接返回,不会在任何网络中出现
5. 初识 IP 地址
- IPv4 总共
32
位 - IPv6 总共
128
位
IP 地址总共分为以下 5 类:
6. CIDR 无类型域间选路
无类型域间选路,简称 CIDR,打破了原来设计的几类地址的做法,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。例如10.100.122.2/24
,表示在 32 位地址中,前 24 位是网络号,后 8 位是主机号。
伴随 CIDR 而来的还有两个概念:广播地址10.100.122.255
和子网掩码255.255.255.0
。
如果发送广播地址,所有10.100.122
网络里面的机器都可以收到。
将子网掩码和 IP 地址进行AND
计算,结果得到10.100.122.0
,即为网络号。
举个例子
例如16.158.165.91
这个 CIDR,网络号为16.158.<101001>
,而机器号为<01>.91
。
第一个地址是16.158.<101001><00>.1
,即16.158.164.1
。子网掩码是255.255.<111111><00>.0
,即255.255.252.0
。广播地址是16.158.<101001><11>.255
,即16.158.167.255
。
7. MAC 地址
打个比方,IP 是地址,有定位功能;MAC 是身份证,无定位功能。
MAC(Media Access Control)地址是一个网卡的物理地址,用十六进制,6 个 byte 表示,例如fa:16:3e:c7:79:75
。
一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。而 MAC 地址更像是身份证,是一个唯一的标识。
MAC 地址是有一定定位功能的,不过通信范围比较小,局限在一个子网里面。例如,从192.168.0.2/24
访问192.168.0.3/24
是可以用 MAC 地址的。一旦跨子网,即从192.168.0.2/24
到192.168.1.2/24
,只用 MAC 地址就不行了,还需要 IP 地址才能起作用。
8. 配置 IP 地址
使用 net-tools:
> sudo ifconfig eth1 10.0.0.1/24
> sudo ifconfig eth1 up
使用 iproute2:
> sudo ip addr add 10.0.0.1/24 dev eth1
> sudo ip link set up eth1
9. DHCP 动态主机配置协议
动态主机配置协议(Dynamic Host Configuration Protocol),简称 DHCP。
数据中心里面的服务器,IP 一旦配置好,基本不会变,相当于买房自己装修。DHCP 的方式相当于租房,自己不用装修,都是帮你配置好的,暂时用一下,用完退租就可以。
10. 解析 DHCP 的工作方式
- DHCP Discover:当一台新机器新加入一个网络的时候,只知道自己的 MAC 地址。这时需要在本地网络先吼一句“我来啦”,即向广播地址发送请求包
- DHCP Offer:如果网络管理员在网络里面配置了 DHCP Server 的话,它就相当于这些 IP 的管理员。只有 MAC 唯一,IP 管理员才能知道这是一个新人,需要租给它一个 IP 地址。同时,DHCP Server 为此客户端保留为它提供的 IP 地址,从而不会为其他 DHCP 客户分配此 IP。DHCP Server 仍然使用广播地址作为目的地址,除此之外还发送了子网掩码、网关和 IP 地址租用期 等信息
- DHCP Request:如果有多个 DHCP Server,新来的机器一般会选择最先到达的那个,并且会向网络发送一个 DHCP Request 广播数据包,包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址 等,并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址
- DHCP ACK:当 DHCP Server 接收到客户机的 DHCP Request 后,会广播返回给客户机一个 DHCP ACK 消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息 都放入该广播包,发给客户机
最终租约达成的时候,还需要广播通知网络内的所有机器。
11. IP 地址的收回和续租
客户机会在租期过去 50% 的时候,直接向为其提供 IP 地址的 DHCP Server 发送 DHCP Request 消息包。客户机接收到服务器回应的 DHCP ACK 消息包,会根据包中所提供的新的租期以及其他已经更新的 TCP/IP 参数,更新自己的配置。这样,IP 租用更新就完成了。