IPv4与v6在之前的文章介绍过,下面介绍剩下的协议
DNS 域名解析
将域名网址自动转换为具体的 IP 地址
-
域名的层级关系:越靠右的位置表示其层级越高
- 根 DNS 服务器、顶级域 DNS 服务器(com)、权威 DNS 服务器(server.com)
域名解析的工作流程
- 客户端给本地 DNS 服务器发出一个 DNS 请求。
- 本地域名服务器收到后,查看缓存。有直接返回,如果没有,向根域名服务器请求。
- 根 DNS 收到来自本地 DNS 的请求后,返回顶级域名服务器地址。
- 本地 DNS 收到顶级域名服务器的地址后,再次发起请求。
- 顶级域名服务器返回权威 DNS 服务器的地址。
- 本地 DNS 再向权威 DNS 服务器请求。
- 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
- 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
ARP与RARP协议
ARP 协议:IP地址求MAC地址,得到下一跳的 MAC 地址。
- 主机广播发送 ARP 请求,包中包含想要知道的 MAC 地址的主机 IP 地址。
- 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。
操作系统会缓存MAC地址,有效期限内复用。、
RARP 协议:由MAC地址求IP地址,打印机等设备使用
- 设备发送请求信息。
- RARP 服务器接到这个消息后返回对应IP给这个设备。
DHCP 动态获取IP地址
主机动态获取 IP 地址,步骤:
- 客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,使用 UDP 广播通信,目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
- DHCP 服务器收到后,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
- 客户端收到后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST),回显配置的参数。
- 最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。
快到期,客户端会向服务器发送 DHCP 请求报文:
- 服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
- 服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。
DHCP 中继代理:中继DHCP广播请求, 不同网段的 IP 地址分配也可以由一个 DHCP 服务器统一进行管理。
-
中继代理与DHCP服务器使用单播通信
NAT 网络地址转换
NAT :公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。
- 缺点:一个私有IP对应一个公有IP,白给
网络地址与端口转换 NAPT
一个IP+不同端口号代表不同私有IP,NAPT 路由器的转换表负责。
缺点:外部不能主动通信本地IP,性能开销。
解决办法:
-
IPv6
-
NAT 穿透技术:应用程序主动获得 NAT 设备的公有 IP,并为自己建立端口映射条目,用这个条目对外通信,就不需要 NAT 设备来进行转换了。
ICMP 互联网控制报文协议
功能:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
IP 包因为某种原因未能达到目标地址,具体的原因将由 ICMP 负责通知。
ICMP 两大类:
- 查询报文:用于诊断的查询消息
- 差错报文:通知出错原因的错误消息
查询报文类型
用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,ping 命令就是利用这个消息实现的。
相比原生的 ICMP,这里多了两个字段:
- 标识符:用以区分是哪个应用程序发 ICMP 包,比如用进程
PID
作为标识符; - 序号:序列号从
0
开始,每发送一次新的回送请求就会加1
, 可以用来确认网络包是否有丢失。
在选项数据中,ping
还会存放发送请求的时间值,来计算往返时间,说明路程的长短。
差错报文类型
-
不可达类型 3:
- 网络不可达
0
:路由器表匹配不到接收方 IP 的网络号 - 主机不可达
1
:路由表中没有该主机的信息,或者该主机没有连接到网络 - 协议不可达
2
:防火墙的协议限制 - 端口不可达
3
:对端主机没有进程监听目标端口 - 需要进行分片但设置了不分片位
4
: IP 首部的分片禁止标志位设置为1,路由器遇到超过 MTU 大小的数据包时丢弃,返回这个。
- 网络不可达
-
原点抑制消息 4:当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送一个 ICMP 原点抑制消息。缓解网络的拥堵。
-
重定向消息 5:路由器发现发送端主机使用了「不是最优」的路径发送数据,那么它会返回一个 ICMP 重定向消息给这个主机。消息中包含了最合适的路由信息和源数据。
-
超时消息 11:TTL (Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃。避免 IP 包无休止地在网络上被转发。
Ping
同局域网发送和接收过程:
- 源主机A首先会构建一个 ICMP 回送请求消息数据包,类型8,序号1(区分连续 ping 的时候发出的多个数据包,每发出一个请求数据包,序号会自动加 1),数据部分插入发送时间(计算RTT)
- 加入IP头,协议字段设置为 1 表示是 ICMP 协议,再加上一些其他控制信息,构建一个 IP 数据包。加入 MAC头发送出去。
- 主机B接收后会构建一个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包中的序号,然后再发送出去给主机 A。
在规定的时间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。
traceroute
作用
-
追踪去往目的地时沿途经过的路由器
traceroute 192.168.1.100
- 利用 IP 包的生存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息。
- 填入一个不可能的端口号值作为 UDP 目标端口号:33434 确认到达目标主机
-
故意设置不分片,从而确定路径的 MTU
IGMP 因特网组管理协
IGMP:管理组播的范围,工作在主机(组播成员)和最后一跳路由之间
-
IGMP 报文向路由器申请加入和退出组播组,路由器记录 IGMP 路由器表,转发组播包到对应的主机。
- IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1。
IGMP 工作机制
IGMPv2 作为例
- 常规查询与响应:
- 路由器会周期性发送目的地址为
224.0.0.1
(表示同一网段内所有主机和路由器) IGMP 常规查询报文。 - 主机随后会启动「报告延迟计时器」 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文(源 IP 地址为自己主机的 IP 地址,目的 IP 地址为组播地址)。如果在定时器超时之前,收到同一个组内的其他主机发送的成员关系报告报文,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量。
- 路由器收到主机的成员关系报文后,就会在 IGMP 路由表中加入该组播组,后续网络中一旦该组播地址的数据到达路由器,它会把数据包转发出去。
离开组播组
-
主机发送 IGMPv2 离组报文,报文的目的地址是 224.0.0.2(表示发向网段内的所有路由器)
-
路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个),以便确认该网络是否还有 224.1.1.1 组的其他成员。其他成员收到就响应。
- 有其他成员:路由器继续向该网络转发 224.1.1.1 的组播数据包。
- 没有其他成员:将不会再向这个网段转发该组播地址的数据包。