• 图解网络(四)——IP篇


    4 IP篇

    4.1 IP基础知识

    IP 基础知识全家桶

    4.1.1 IP基本认识

    IP 在 TCP/IP 参考模型中处于第三层,也就是网络层

    网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。

    IP 的作用

    IP与MAC的区别

    在上面我们知道 IP 的作用是主机之间通信用的,而 MAC 的作用则是实现==「直连」==的两个设备之间通信,而 IP 则负责在「没有直连」的两个网络之间进行通信传输。

    4.1.2 IP地址的基础知识

    IP地址(IPv4地址)由32位正整数来表示,IP地址在计算机由二进制的方式来进行处理的。人们采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制。

    点分十进制

    最大允许43亿台计算机连接到网络。

    • IP地址分类

    image-20220628074817415

    image-20220628074936803

    最大主机个数,就是要看主机号的位数,如 C 类地址的主机号占 8 位,那么 C 类地址的最大主机个数:

    image-20220628075847166

    多播用于将包发送给特定组内的所有主机。

    4.1.3 IP协议相关技术

    DNS

    我们在上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人类记忆。

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

    浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts,如果还是没有,就会 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 地址返回客户端,客户端和目标建立连接。

    ARP

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

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

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

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

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

    DHCP

    DHCP 在生活中我们是很常见的了,我们的电脑通常都是通过 DHCP 动态获取 IP 地址,大大省去了配 IP 信息繁琐的过程。

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

    image-20220815084030146

    这 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 广播通信

    NAT

    IPv4 的地址是非常紧缺的,在前面我们也提到可以通过无分类地址来减缓 IPv4 地址耗尽的速度,但是互联网的用户增速是非常惊人的,所以 IPv4 地址依然有被耗尽的危险。

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

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

    ICMP

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

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

    ICMP 大致可以分为两大类:

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

    image-20220815084144181

    IGMP

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

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

    4.2 Ping的工作原理

    4.2.1 ICMP协议

    image-20220815084242741

    4.2.2 ping——查询报文类型的使用

    ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求消息数据包。

    ICMP 数据包内包含多个字段,最重要的是两个:

    • 第一个是类型,对于回送请求消息而言该字段为 8
    • 另外一个是序号,主要用于区分连续 ping 的时候发出的多个数据包。

    每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。

    4.2.3 traceroute——差错报文类型的使用

    有一款充分利用 ICMP 差错报文类型的应用叫做 traceroute(在UNIX、MacOS中是这个命令,而在Windows中对等的命令叫做 tracert )。

    1. traceroute 作用一

    traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。

    traceroute 的参数指向某个目的 IP 地址

    traceroute 192.168.1.100
    
    • 1

    它的原理就是利用 IP 包的生存期限1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的一种方法。

    比如,将 TTL 设置 为 1,则遇到第一个路由器,就牺牲了,接着返回 ICMP 差错报文网络包,类型是时间超时

    接下来将 TTL 设置为 2,第一个路由器过了,遇到第二个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机。

    这样的过程,traceroute 就可以拿到了所有的路由器 IP。

    当然有的路由器根本就不会返回这个 ICMP,所以对于有的公网地址,是看不到中间经过的路由的。

    发送方如何知道发出的 UDP 包是否到达了目的主机呢?

    traceroute 在发送 UDP 包时,会填入一个不可能的端口号值作为 UDP 目标端口号(大于 3000 )。当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是「端口不可达」。

    所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。

    2. traceroute 作用二

    traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU

    这么做是为了什么?

    这样做的目的是为了路径MTU发现

    息的类型是「端口不可达」。

    所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机。

    2. traceroute 作用二

    traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU

    这么做是为了什么?

    这样做的目的是为了路径MTU发现

    因为有的时候我们并不知道路由器的 MTU 大小,以太网的数据链路上的 MTU 通常是 1500 字节,但是非以外网的 MTU 值就不一样了,所以我们要知道 MTU 的大小,从而控制发送的包大小。

  • 相关阅读:
    物联网应用系统设计提纲-下
    Android 10 如何在通知栏下拉状态栏会暂停第三方应用播放视频
    WPF参考做的TextBox圆角,并且水印文字操作
    【十天系统学习】SMOKE多模式排放清单处理技术及EDGAR/MEIC清单制作方法以及 CMAQ空气质量模式运行
    MEGC(FACIAL MICRO-EXPRESSION GRAND CHALLENGE)微表情识别比赛相关网站
    【每日一题Day40】LC1752检查数组是否经排序和轮转得到 | 模拟
    CORS(跨域资源共享)
    MAP和MLE的区别(自用)
    牛客网刷题(二)
    【数据结构-栈 二】【单调栈】每日温度、接雨水
  • 原文地址:https://blog.csdn.net/qq_41945053/article/details/126339945