跳转至

IP

IPv4

IPv4由32位二进制数组成,通常分割成4组,每组8位(以十进制数表示)

20210725152948

IP组成:起始位+网络号+主机号,据此分成5类

20210726230202

ABC类分别预留了三段IP用于不同规模组织作私有使用

D类为组播地址,向这个IP发送消息,组下的主机都可以收到

20210725153815

但通常使用更灵活的CIDR(无类型域间选路)来表示,类似 x.x.x.x/n 这种形式,/n表示,前n位为固定的网络号,后(32-n)位为主机号

最常用的为/24/16,比如最常见也最好理解的私有网络IP段:192.168.1.x/24,二进制为:11000000.10101000.00000001.x

前24位为网络号,后8位为主机号,网络号部分用1表示,主机号部分用0表示,即子网掩码:11111111.11111111.11111111.00000000,转换为10进制为:255.255.255.0

然后将二进制的IP和子网掩码按位逻辑与运算,即可得到网络地址:11000000.10101000.00000001.00000000,即:192.168.1.0

网络地址的主机号部分都置为1,则得到广播地址:11000000.10101000.00000001.11111111,即:192.168.1.255

  • 192.168.1.x/24 IP
  • 255.255.255.0 子网掩码
  • 192.168.1.0 网络地址
  • 192.168.1.255 广播地址(向这个地址发送消息所有主机都可以收到
  • 192.168.1.1 第一个地址,通常为默认网关(路由器的一个网口)

除去网络地址和广播地址后,8位主机号可分配2^8=256-2=254个主机IP,还要预留一个给默认网关,知道了这个规则之后,便可以通过主机数倒推子网掩码来规划网络

比如有10台主机,则至少需要10+2+1=13个IP,因为2^4=16 > 13,所以主机号至少要4位,即子网掩码为:11111111.11111111.11111111.11110000,十进制为:255.255.255.240

随着互联网用户数以及联网应用/设备数的爆炸式增长,可用的大约36.47亿个IPv4地址已经无法满足地球约75亿人口所使用了,于是升级迭代出IPv6协议

2011年2月3日,IANA宣布IPv4地址已经耗尽

IPv6

IPv6由128位二进制数组成,通常分割成8组,每组16位(以十六进制数表示)

可为地球的每一粒沙子提供唯一IP,但它与IPv4是两个完全不同的协议,需要转换和映射才能数据互通,完全取代IPv4可能还需要很长一段时间。

20210725152103

查看IP

# windows
ipconfig /all

# linux/mac
ifconfig  # 需要安装net-tools,已停止维护
ip addr  # 需要安装iproute2,逐渐取代net-tools,推荐

返回字段解析

# 第一行
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>  # net_device flags(网络设备状态标识)
    # BROADCAST 表示这个网卡有广播地址,可以发送广播包
    # MULTICAST 表示网卡可以发送多播包
    # UP 表示网卡处于启动的状态
    # LOWER_UP 表示L1是启动的,也即网线插着呢
mtu 1500  # 最大传输单元1500字节(这是以太网的默认值)
    # MAC头后面的正文(包括IP头、TCP头、HTTP头)不允许超过1500个字节,存不下则分片传输
qdisc pfifo_fast  # queueing discipline(排队规则)
    # 内核通过某个网络接口发送数据包时,需要按照这个排队规则将数据包加入队列
state UP

# 第二行
link/ether 00:15:5d:21:b9:ea brd ff:ff:ff:ff:ff:ff  # mac地址

# 第三行
xxx.xx.xxx.x scope global eth0  # ethernet 以太网卡,范围global,对外访问
127.0.0.1/8 scope host lo  # loopback 环回接口,范围host,供本机相互通信

分配IP

设置项:IP、子网掩码、默认网关、DNS

方式

  • Static(静态) IP

手工给设备设置IP地址

  • Dynamic(动态) IP

设备向DHCP服务器(主机或路由器)发送一个请求,获取IP地址

DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议

分配地址的时候会设定租期,当租期过去50%时会向DHCP服务器发送续约请求,如果没有发则IP将被收回

此外,像打印机、服务器、路由器等这些IP不应该经常变化的设备,还可以在DHCP配置中根据MAC地址预留固定IP

数据链路层

当两台设备通信时,需要知道彼此的IP和MAC地址,根据IP段的网络地址是否相同,通信过程会有所不同

MAC地址(属于MAC层所以叫MAC地址),是网卡出厂自带的物理地址,类似于身份证号具有全球唯一标识性,仅用于同网段局域网内定位,出了网关还得靠IP路由

MAC(Medium Access Control) 媒体访问控制,主要解决多路访问时谁先发谁后发,以及发给谁等问题

网关(一般是路由器)通过路由协议(常用的有 OSPF 和 BGP)按路由表将数据包发出

网络地址相同

20210729232611

设备A如果想要与同网段的设备B通信,首先,设备A先查找本机或交换机的ARP Cache中是否缓存过设备B的MAC地址

ARP(Address Resolution Protocol) 地址解析协议,用于将IP地址解析为MAC地址

# 查看ARP Cache
arp -a  # windows

# 动态类型是通过广播获取然后缓存的
# 否则就是静态的,比如手动添加
arp -s IP MAC

20210729233402

如果ARP Cache中没有,将向广播地址发起ARP请求,询问每个设备谁有这个IP,以及MAC地址是啥,当目标IP收到消息后会返回自己的MAC地址,设备A收到MAC地址后缓存到cache,下次可以直接发送不需要再广播

网络地址不同

20210729232759

设备A如果想与跨网段的设备D通信,由于设备A和D的IP都是私有IP,彼此需要借助各自NAT网关的公有IP来通信

NAT(Network Address Translation) 网关,主要工作就是将私有IP转换为公有IP

这只是因为IPv4提供的公有IP数不足,为了节约IP才创造出的一种协议,IPv6中是没必要存在的,但由于IPv6还未完全取代IPv4,两个协议混用转换时还是会用到NAT

20210725151352

出了网关,通过动态路由表路由到目标设备

BGP协议:基于TCP协议,根据距离矢量路由算法(Bellman-Ford),找到最短路径,主要用于内网

OSPF协议,基于IP协议,根据链路状态路由算法(Dijkstra),找到最佳路径,主要用于外网

域名

根域名,也叫Root/Apex/naked/bare Domains

参考

极客时间专栏:《趣谈网络协议》


最后更新: 2022-01-10