计算机网络:IP相关协议

IP协议相关技术

  • DNS 域名解析
  • ARP 与 RARP 协议
  • DHCP 动态获取 IP 地址
  • NAT 网络地址转换
  • ICMP 互联网控制报⽂协议
  • IGMP 因特网组管理协议

一、DNS

DNS 可以将域名网址⾃动转换为具体的 IP 地址。

DNS 中的域名都是⽤句点来分隔的,比如 www.server.com ,这里的句点代表了不同层次之间的界限。 在域名中,越靠右的位置表示其层级越高。

所以域名的层级关系类似⼀个树状结构:

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

根域的 DNS 服务器信息保存在互联⽹中所有的 DNS 服务器中。这样⼀来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。 因此,客户端只要能够找到任意⼀台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再⼀路顺藤摸⽠找到 位于下层的某台⽬标 DNS 服务器。

域名解析的工作流程:

1. 客户端首先会发出⼀个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端 的 TCP/IP 设置中填写的 DNS 服务器地址)。

2. 本地域名服务器收到客户端的请求后,如果缓存⾥的表格能找到 www.server.com,则它直接返回 IP 地址。 如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最⾼层次的,它不直接⽤于域名解析,但能指明⼀条道路

3. 根 DNS 收到来⾃本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管 理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”

4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“⽼⼆, 你能告诉我 www.server.com 的 IP 地址吗?”

5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。

6. 本地 DNS 于是转向问权威 DNS 服务器:“⽼三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。

7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。

8. 本地 DNS 再将 IP 地址返回客户端,客户端和⽬标建⽴连接。

DNS 域名解析的过程蛮有意思的,整个过程就和我们⽇常⽣活中找⼈问路的过程类似,只指路不带路。

二、ARP

在传输⼀个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下⼀ 跳。然⽽,网络层的下⼀层是数据链路层,所以我们还要知道「下⼀跳」的 MAC 地址。

简单地说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的

  • 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
  • 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址⼀致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。

操作系统通常会把第⼀次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。

以ARP协议为例,它的功能最终是获取到MAC信息,服务于链路层,从这点考虑,ARP是链路层协议;但是从层次来看,ARP基于Ethernet协议,IP协议基于Ethernet协议,它们在Ethernet协议里面有独立的Type类型,前者是0x0806,后者是0x0800,既然ARP和IP协议"平起平坐",那么IP是网络层,ARP难道就不是网络层

RARP

ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服 务器等小型嵌入式设备接入到网络时就经常会用得到。

三、DHCP

1、DHCP Discover:新来的机器加入一个网络时,使用IP地址0.0.0.0发送一个广播包,目的地址为255.255.255.255。广播包封装在UDP里

2、DHCP Offer:DHCP Server作为这个网络的IP管理员,根据收到消息的MAC地址,知道来了新人。租给新的机器一个IP地址,同时保留提供的IP地址,从而不会给其他DHCP客户端分配此IP。需要注意的是,此时DHCP Server使用广播地址作为目的地址,因为此时请求分配的新机器还没有自己的IP,数据包又是从上往下层层封装的,目标IP是广播地址,下层的目标MAC也要是广播地址

 3、DHCP Request:如有多个DHCP Server,新机器会选择其中一个DHCP Offer,并向网络发送DHCP Request广播数据包,包含客户端的MAC地址、接受的IP地址、提供IP的DHCP服务器地址等,并告诉所有DHCP Server他将接受哪一台服务器提供的IP地址。此时由于还没收到DHCP Server的确认,客户端仍然使用0.0.0.0作为源IP地址

 4、DHCP ACK:DHCP Server收到DHCP Request之后,广播返回给客户机一个DHCP ACK包,并将这一IP的配置信息,都放入广播包中

四、NAT

简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。

那不是 N 个私有 IP 地址,你就要 N 个公有 IP 地址?这怎么就缓解了 IPv4 地址耗尽的问题?这不瞎扯吗?

由于绝大多数的网络应用都是使⽤传输层协议 TCP 或 UDP 来传输数据的。 因此,可以把 IP 地址 + 端口号⼀起进行转换。 这样,就用⼀个全球 IP 地址就可以了,这种转换技术就叫网络地址与端口转换 NAPT。

如:有两个客户端 192.168.1.10 和 192.168.1.11 同时与服务器 183.232.231.172 进行通信,并且这两个客户端的 本地端口都是 1025。 此时,两个私有 IP 地址都转换 IP 地址为公有地址 120.229.175.121,但是以不同的端口号作为区分。 于是,生成⼀个 NAPT 路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端 A、B 能同时与服务器之 间进行通信。 这种转换表在 NAT 路由器上⾃动生成。例如,在 TCP 的情况下,建立 TCP 连接⾸次握手时的 SYN 包⼀经发出, 就会⽣成这个表。而后又随着收到关闭连接时发出 FIN 包的确认应答从表中被删除。

由于 NAT/NAPT 都依赖于自己的转换表,因此会有以下的问题:

  • 外部⽆法主动与 NAT 内部服务器建立连接,因为 NAPT 转换表没有转换记录。
  • 转换表的⽣成与转换操作都会产⽣性能开销。
  • 通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。

五、ICMP

ICMP 主要的功能包括:确认 IP 包是否成功送达⽬标地址、报告发送过程中 IP 包被废弃的原因和改善⽹络设置等。 在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。

ICMP ⼤致可以分为两⼤类:

  • ⼀类是用于诊断的查询消息,也就是「查询报文类型」
  • 另⼀类是通知出错原因的错误消息,也就是「差错报⽂类型」

差错报文:

  • 目标不可达 3 (类型)
    • 网络不可达 0 (代码)
    • 主机不可达 1
    • 协议不可达 2
    • 端口不可达 3
    • 需要分片设置了不分片位 4
  • 源站抑制 4
  • 时间超时 11
  • 路由重定向 5

查询报文类型:

回送消息(类型0和8)用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的⼀种消息, ping 命令就是利用这个消息实现的。

PING命令流程:

 六、IGMP

在前⾯我们知道了组播地址,也就是 D 类地址,既然是组播,那就说明是只有⼀组的主机能收到数据包,不在⼀组 的主机不能收到数组包,怎么管理是否是在⼀组呢?那么,就需要 IGMP 协议了

IGMP 是因特网组管理协议,⼯作在主机(组播成员)和最后⼀跳路由之间

  • IGMP 报文向路由器申请加⼊和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机 通过 IGMP 加⼊到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。
  • IGMP 报⽂采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间。

工作流程:

1. 路由器会周期性发送目的地址为 224.0.0.1的组播地址(表示同⼀网段内所有主机和路由器) IGMP 常规查询报文。

2. 主机1 和 主机 3 收到这个查询,随后会启动「报告延迟计时器」,计时器的时间是随机的,通常是 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文(源 IP 地址为自己主机的 IP 地址,目的 IP 地址为 组播地址,表示自己想监听这个组播地址)。如果在定时器超时之前,收到同⼀个组内的其他主机发送的成员关系报告报⽂,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量。

3. 路由器收到主机的成员关系报⽂后,就会在 IGMP 路由表中加⼊该组播组,后续网络中⼀旦该组播地址的数据到达路由器,它会把数据包转发出去。

离开组播机制:

情况⼀,网段中仍有该组播组:

  • 1. 主机 1 要离开组 224.1.1.1,发送 IGMPv2 离组报⽂,报⽂的目的地址是 224.0.0.2(表示发向网段内的所有路由器)
  • 2. 路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报⽂(共计发送 2 个),以便确认该网络是 否还有 224.1.1.1 组的其他成员。
  • 3. 主机 3 仍然是组 224.1.1.1 的成员,因此它⽴即响应这个特定组查询。路由器知道该网络中仍然存在该组播组的成员,于是继续向该网络转发 224.1.1.1 的组播数据包。

 情况二:网段中没有该组播组

  • 1. 主机 1 要离开组播组 224.1.1.1,发送 IGMP 离组报⽂。
  • 2. 路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报⽂(共计发送 2 个)。此时在该⽹段内, 组 224.1.1.1 已经没有其他成员了,因此没有主机响应这个查询。
  • 3. ⼀定时间后,路由器认为该网段中已经没有 224.1.1.1 组播组成员了,将不会再向这个网段转发该组播地址的 数据包。

注意:组播地址不是用于机器ip地址的,因为组播地址没有网络号和主机号,所以跟dhcp没关系。组播地址⼀般是用于udp协议,机器发送UDP组播数据时,目标地址填的是组播地址,那么在组播组内的机器都能收到数据包。 是否加⼊组播组和离开组播组,是由socket⼀个接口实现的,主机ip是不用改变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值