【计算机网络】网络层相关协议

40 阅读8分钟

IPv4与v6在之前的文章介绍过,下面介绍剩下的协议

DNS 域名解析

将域名网址自动转换为具体的 IP 地址

  • 域名的层级关系:越靠右的位置表示其层级越高

    • 根 DNS 服务器、顶级域 DNS 服务器(com)、权威 DNS 服务器(server.com)

域名解析的工作流程

  1. 客户端给本地 DNS 服务器发出一个 DNS 请求。
  2. 本地域名服务器收到后,查看缓存。有直接返回,如果没有,向根域名服务器请求。
  3. 根 DNS 收到来自本地 DNS 的请求后,返回顶级域名服务器地址。
  4. 本地 DNS 收到顶级域名服务器的地址后,再次发起请求。
  5. 顶级域名服务器返回权威 DNS 服务器的地址。
  6. 本地 DNS 再向权威 DNS 服务器请求。
  7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
  8. 本地 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 地址,步骤:

  1. 客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,使用 UDP 广播通信,目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
  2. DHCP 服务器收到后,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
  3. 客户端收到后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST),回显配置的参数。
  4. 最后,服务端用 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

同局域网发送和接收过程:

  1. 源主机A首先会构建一个 ICMP 回送请求消息数据包,类型8,序号1(区分连续 ping 的时候发出的多个数据包,每发出一个请求数据包,序号会自动加 1),数据部分插入发送时间(计算RTT)
  2. 加入IP头,协议字段设置为 1 表示是 ICMP 协议,再加上一些其他控制信息,构建一个 IP 数据包。加入 MAC头发送出去。
  3. 主机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 作为例

  • 常规查询与响应:
  1. 路由器会周期性发送目的地址为 224.0.0.1(表示同一网段内所有主机和路由器) IGMP 常规查询报文。
  2. 主机随后会启动「报告延迟计时器」 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文(源 IP 地址为自己主机的 IP 地址,目的 IP 地址为组播地址)。如果在定时器超时之前,收到同一个组内的其他主机发送的成员关系报告报文,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量。
  3. 路由器收到主机的成员关系报文后,就会在 IGMP 路由表中加入该组播组,后续网络中一旦该组播地址的数据到达路由器,它会把数据包转发出去。

离开组播组

  1. 主机发送 IGMPv2 离组报文,报文的目的地址是 224.0.0.2(表示发向网段内的所有路由器)

  2. 路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个),以便确认该网络是否还有 224.1.1.1 组的其他成员。其他成员收到就响应。

    1. 有其他成员:路由器继续向该网络转发 224.1.1.1 的组播数据包。
    2. 没有其他成员:将不会再向这个网段转发该组播地址的数据包。