计网查漏补缺-网络层协议
¶多主机如何共用一个IP地址?
NAT (Network Address Translator) 是一种用于将局域网中的私有地址转换成全局 IP 地址的技术。
在连接上无线路由器的时候,如果检查一下设备的 IP 地址,也许你会发现是类似于 192.168.1.1
这样的局域网 IP 地址。
下图描绘了 NAT 的工作原理:
局域网中 IP 地址为 10.0.0.10
的主机向全局 IP 地址 163.221.120.9
发送数据。NAT 路由器将数据包的源地址修改成自己的全局 IP 地址:202.244.174.37
。同理,接收数据时,路由器把目标地址 202.244.174.37
翻译成内网地址:10.0.0.10
路由器只有一个对外的全局 IP 地址,如果有多个内网主机都向外部通讯怎么办呢?这时就要使用 NAPT 技术,它和 NAT 从原理上类似,但它可以转换 TCP 和 UDP 端口号。
使用 NAPT 技术时,不同的内网 IP 被转换成同一个公共 IP 地址,也就是路由器对外显示的全局 IP 地址,但是被附加不同的端口号以示区分:
不管是 NAT 还是 NAPT,都需要路由器路由器内部维护一张自动生成的地址转换表。以 TCP 为例,建立 TCP 连接首次握手的 SYN 包发出时会生成这个表,关闭连接时会发出 FIN 包,收到这个包的应答时转换表被删除。
¶ARP 协议
ARP 协议(Address Resolution Protocol)用于通过目标 IP 地址,定位下一个接收数据包的网络设备的 MAC 地址。如果目标主机处在同一个数据链路上,那么可以直接得到目标主机的 MAC 地址,否则会得到下一条路由器的 MAC 地址。
ARP 协议的工作原理可以分为两部分:ARP 请求和 ARP 响应。 首先,源主机会通过广播发送一个 ARP 请求包:“我要与 IP 地址为 xxx
的主机通话,谁知道它的 MAC地址?”。
数据链路上的所有主机都会收到这条消息并检查自己的 IP 地址,如果与 ARP 请求包中的 IP 地址一致,主机就会发送 ARP 响应包:“我就是 IP 地址为 xxx
的主机,我的 MAC 地址是:xxxx
”。
¶工作过程
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
¶ping 涉及到的协议
当在局域网中使用ping www.xxx.com时,用到了哪些协议?
通过DNS协议,将ping后接的域名转换为ip地址。(DNS使用的传输层协议是UDP)
通过ARP解析服务,由ip地址解析出MAC地址,以在数据链路层传输。
ping是为了测试另一台主机是否可达,发送一份ICMP回显请求给目标主机,并等待ICMP回显应答。(ICMP用于在ip主机、路由器间传递网络是否通畅、主机是否可达等控制信息)
使用的是 ICMP 协议,是“Internet Control Message Protocol”(Internet控制消息协议)的缩写,是 TCP/IP协议族 的一个子协议,用于在IP主机、 路由器 之间传递控制消息。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com
文章标题:计网查漏补缺-网络层协议
文章字数:1.2k
本文作者:梅罢葛
发布时间:2020-11-04, 14:09:29
最后更新:2020-11-04, 15:01:08
原始链接:https://qiurungeng.github.io/2020/11/04/%E8%AE%A1%E7%BD%91%E6%9F%A5%E6%BC%8F%E8%A1%A5%E7%BC%BA-%E7%BD%91%E7%BB%9C%E5%B1%82%E5%8D%8F%E8%AE%AE/