栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

计算机网络攻略(16)IP 协议相关技术

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算机网络攻略(16)IP 协议相关技术

文章目录

DNS

域名的层级关系域名解析的⼯作流程 ARP

那么 ARP ⼜是如何知道对⽅ MAC 地址的呢?RARP 协议你知道是什么吗? DHCP

每个⽹络都要配⼀个 DHCP 服务器? NAT

那不是 N 个私有 IP 地址,你就要 N 个公有 IP 地址?这怎么就缓解了 IPv4 地址耗尽的问题?NAT 那么⽜逼,难道就没缺点了吗?如何解决 NAT 潜在的问题呢? ICMP

ICMP 功能都有啥? IGMP

IGMP ⼯作机制
跟 IP 协议相关的技术也不少,接下来说说与 IP 协议相关的重要且常⻅的技术。

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

DNS

我们在上⽹的时候,通常使⽤的⽅式是域名,⽽不是 IP 地址,因为域名⽅便⼈类记忆。

那么实现这⼀技术的就是 DNS 域名解析,DNS 可以将域名⽹址⾃动转换为具体的 IP 地址。

域名的层级关系

DNS 中的域名都是⽤句点来分隔的,⽐如 www.server.com ,这⾥的句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越⾼。

毕竟域名是外国⼈发明,所以思维和中国⼈相反,⽐如说⼀个城市地点的时候,外国喜欢从⼩到⼤的⽅式顺序说起(如 XX 街道 XX 区 XX 市 XX 省),⽽中国则喜欢从⼤到⼩的顺序(如 XX 省 XX 市 XX 区 XX 街道)。

根域是在最顶层,它的下⼀层就是 com 顶级域,再下⾯是 server.com。

所以域名的层级关系类似⼀个树状结构:
根 DNS 服务器
顶级域 DNS 服务器(com)
权威 DNS 服务器(server.com)


根域的 DNS 服务器信息保存在互联⽹中所有的 DNS 服务器中。这样⼀来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。

因此,客户端只要能够找到任意⼀台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再⼀路顺藤摸⽠找到位于下层的某台⽬标 DNS 服务器。

域名解析的⼯作流程

浏览器⾸先看⼀下⾃⼰的缓存⾥有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析⽂件hosts ,如果还是没有,就会 DNS 服务器进⾏查询,查询的过程如下:

    客户端⾸先会发出⼀个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。本地域名服务器收到客户端的请求后,如果缓存⾥的表格能找到 www.server.com,则它直接返回 IP 地址。
    如果没有,本地 DNS 会去问它的根域名服务器:“⽼⼤, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最⾼层次的,它不直接⽤于域名解析,但能指明⼀条道路。根 DNS 收到来⾃本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“⽼⼆, 你能告诉我 www.server.com 的 IP 地址吗?”5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。本地 DNS 于是转向问权威 DNS 服务器:“⽼三,www.server.com对应的IP是啥呀?” server.com 的权威DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。本地 DNS 再将 IP 地址返回客户端,客户端和⽬标建⽴连接。
    ⾄此,我们完成了 DNS 的解析过程。现在总结⼀下,整个过程我画成了⼀个图。权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。本地 DNS 再将 IP 地址返回客户端,客户端和⽬标建⽴连接。

⾄此,我们完成了 DNS 的解析过程。现在总结⼀下,整个过程我画成了⼀个图。

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

ARP

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

由于主机的路由表中可以找到下⼀跳的 IP 地址,所以可以通过 ARP 协议,求得下⼀跳的 MAC 地址。

那么 ARP ⼜是如何知道对⽅ MAC 地址的呢?

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


主机会通过⼴播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。

当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包⾥的内容,如果 ARP 请求包中的⽬标 IP地址与⾃⼰的 IP 地址⼀致,那么这个设备就将⾃⼰的 MAC 地址塞⼊ ARP 响应包返回给主机。

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

不过,MAC 地址的缓存是有⼀定期限的,超过这个期限,缓存的内容将被清除。

RARP 协议你知道是什么吗?

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

通常这需要架设⼀台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后再将这个设备接⼊到⽹络,接着:

该设备会发送⼀条「我的 MAC 地址是XXXX,请告诉我,我的IP地址应该是什么」的请求信息。

RARP 服务器接到这个消息后返回「MAC地址为 XXXX 的设备,IP地址为 XXXX」的信息给这个设备。

最后,设备就根据从 RARP 服务器所收到的应答信息设置⾃⼰的 IP 地址。

DHCP

DHCP 在⽣活中我们是很常⻅的了,我们的电脑通常都是通过 DHCP 动态获取 IP 地址,⼤⼤省去了配 IP 信息繁琐的过程。
接下来,我们来看看我们的电脑是如何通过 4 个步骤的过程,获取到 IP 的。

说明⼀点,DHCP 客户端进程监听的是 68 端⼝号,DHCP 服务端进程监听的是 67 端⼝号。

这 4 个步骤:

客户端⾸先发起 DHCP 发现报⽂(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道DHCP 服务器的地址,所以使⽤的是 UDP ⼴播通信,其使⽤的⼴播⽬的地址是 255.255.255.255(端⼝67) 并且使⽤ 0.0.0.0(端⼝ 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧⼴播到所有的⽹络中设备。

DHCP 服务器收到 DHCP 发现报⽂时,⽤ DHCP 提供报⽂(DHCP OFFER) 向客户端做出响应。该报⽂仍然使⽤ IP ⼴播地址 255.255.255.255,该报⽂信息携带服务器提供可租约的 IP 地址、⼦⽹掩码、默认⽹关、DNS 服务器以及 IP 地址租⽤期。

客户端收到⼀个或多个服务器的 DHCP 提供报⽂后,从中选择⼀个服务器,并向选中的服务器发送 DHCP 请求报⽂(DHCP REQUEST进⾏响应,回显配置的参数。

最后,服务端⽤ DHCP ACK 报⽂对 DHCP 请求报⽂进⾏响应,应答所要求的参数。

⼀旦客户端收到 DHCP ACK 后,交互便完成了,并且客户端能够在租⽤期内使⽤ DHCP 服务器分配的 IP 地址。

如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报⽂:

服务器如果同意继续租⽤,则⽤ DHCP ACK 报⽂进⾏应答,客户端就会延⻓租期。

服务器如果不同意继续租⽤,则⽤ DHCP NACK 报⽂,客户端就要停⽌使⽤租约的 IP 地址。

可以发现,DHCP 交互中,全程都是使⽤ UDP ⼴播通信。

咦,⽤的是⼴播,那如果 DHCP 服务器和客户端不是在同⼀个局域⽹内,路由器⼜不会转发⼴播包,那不是每个⽹络都要配⼀个 DHCP 服务器?

每个⽹络都要配⼀个 DHCP 服务器?

为了解决这⼀问题,就出现了 DHCP 中继代理。有了 DHCP 中继代理以后,对不同⽹段的 IP 地址分配也可以由⼀个 DHCP 服务器统⼀进⾏管理。

DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,⽽ DHCP 中继代理在收到这个⼴播包以后,再以单播的形式发给 DHCP 服务器。

服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包⼴播给 DHCP 客户端 。

因此,DHCP 服务器即使不在同⼀个链路上也可以实现统⼀分配和管理IP地址。

NAT

IPv4 的地址是⾮常紧缺的,在前⾯我们也提到可以通过⽆分类地址来减缓 IPv4 地址耗尽的速度,但是互联⽹的⽤户增速是⾮常惊⼈的,所以 IPv4 地址依然有被耗尽的危险。

于是,提出了⼀种⽹络地址转换 NAT 的⽅法,再次缓解了 IPv4 地址耗尽的问题。

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

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

确实是,普通的 NAT 转换没什么意义。

由于绝⼤多数的⽹络应⽤都是使⽤传输层协议 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 那么⽜逼,难道就没缺点了吗?

当然有缺陷,肯定没有⼗全⼗美的⽅案。

由于 NAT/NAPT 都依赖于⾃⼰的转换表,因此会有以下的问题:
外部⽆法主动与 NAT 内部服务器建⽴连接,因为 NAPT 转换表没有转换记录。

转换表的⽣成与转换操作都会产⽣性能开销。

通信过程中,如果 NAT 路由器重启了,所有的 TCP 连接都将被重置。

如何解决 NAT 潜在的问题呢?

解决的⽅法主要有两种⽅法。

第⼀种就是改⽤ IPv6

IPv6 可⽤范围⾮常⼤,以⾄于每台设备都可以配置⼀个公有 IP 地址,就不搞那么多花⾥胡哨的地址转换了,但是IPv6 普及速度还需要⼀些时间。

第⼆种 NAT 穿透技术

NAT 穿越技术拥有这样的功能,它能够让⽹络应⽤程序主动发现⾃⼰位于 NAT 设备之后,并且会主动获得 NAT 设备的公有 IP,并为⾃⼰建⽴端⼝映射条⽬,注意这些都是 NAT设备后的应⽤程序⾃动完成的。

也就是说,在 NAT 穿透技术中,NAT设备后的应⽤程序处于主动地位,它已经明确地知道 NAT 设备要修改它外发的数据包,于是它主动配合 NAT 设备的操作,主动地建⽴好映射,这样就不像以前由 NAT 设备来建⽴映射了。

说⼈话,就是客户端主动从 NAT 设备获取公有 IP 地址,然后⾃⼰建⽴端⼝映射条⽬,然后⽤这个条⽬对外通信,就不需要 NAT 设备来进⾏转换了。

ICMP

ICMP 全称是 Internet Control Message Protocol,也就是互联⽹控制报⽂协议。

⾥⾯有个关键词 —— 控制,如何控制的呢?
⽹络包在复杂的⽹络传输环境⾥,常常会遇到各种问题。

当遇到问题的时候,总不能死个不明不⽩,没头没脑的作⻛不是计算机⽹络的⻛格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局⾯。

ICMP 功能都有啥?

ICMP 主要的功能包括:确认 IP 包是否成功送达⽬标地址、报告发送过程中 IP 包被废弃的原因和改善⽹络设置等。

在 IP 通信中如果某个 IP 包因为某种原因未能达到⽬标地址,那么这个具体的原因将由 ICMP 负责通知。

如上图例⼦,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送⼀个 ICMP ⽬标不可达数据包,说明发往主机 B 的包未能成功。

ICMP 的这种通知消息会使⽤ IP 进⾏发送 。

因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP包的主机 A 则分解 ICMP 的⾸部和数据域以后得知具体发⽣问题的原因。

ICMP 类型ICMP ⼤致可以分为两⼤类:⼀类是⽤于诊断的查询消息,也就是「查询报⽂类型」另⼀类是通知出错原因的错误消息,也就是「差错报⽂类型」

IGMP

ICMP 跟 IGMP 是⼀点关系都没有的,就好像周杰与周杰伦的区别,⼤家不要混淆了。

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

IGMP 是因特⽹组管理协议,⼯作在主机(组播成员)和最后⼀跳路由之间,如上图中的蓝⾊部分。

IGMP 报⽂向路由器申请加⼊和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除⾮主机通过 IGMP 加⼊到组播组,主机申请加⼊到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。

IGMP 报⽂采⽤ IP 封装,IP 头部的协议号为 2,⽽且 TTL 字段值通常为 1,因为 IGMP 是⼯作在主机与连接的路由器之间。

IGMP ⼯作机制

IGMP 分为了三个版本分别是,IGMPv1、IGMPv2、IGMPv3。

接下来,以 IGMPv2 作为例⼦,说说常规查询与响应和离开组播组这两个⼯作机制。

常规查询与响应⼯作机制

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

离开组播组⼯作机制

离开组播组的情况⼀,⽹段中仍有该组播组:

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

离开组播组的情况⼆,⽹段中没有该组播组:

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

学自小林coding,侵删

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号