摘自 趣谈网络协议 | 极客时间

目录

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 类

IP 地址的分类
IP 地址的分类
A、B、C 三类地址所能包含的主机数量
A、B、C 三类地址所能包含的主机数量

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/24192.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 租用更新就完成了。

参考文章

  1. 趣谈网络协议 | 极客时间