• 计算机网络—网络层


    网络协议 IP 概述

    因为网络层是整个互联网的核心,因此应当让网络尽可能简单。网络层提供简单灵活的、无连接的、尽最大努力交互的数据报服务。

    使用 IP 协议,可以把异构的物理网络连接起来,使网络层像统一的网络
    在这里插入图片描述
    与 IP 协议配套使用有三种协议:

    1. 地址解析协议 ARP (Address Resolution Protocol)
    2. 网络控制报文协议 ICMP (Internet Control Message Protocol)
    3. 网络组管理协议 IGMP(Internet Group Management Protocol)

    在这里插入图片描述

    IP数据报文格式

    在这里插入图片描述

    • 版本:4(IPv4)和 6(IPv6)。
    • 首部长度:占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为首部固定长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
    • 区分服务 : 用来获得更好的服务,一般情况下不使用。
    • 总长度 : 包括首部长度和数据部分长度。
    • 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
    • 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
      在这里插入图片描述
    • 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
    • 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
    • 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。

    IP 地址和 MAC 地址

    网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP 数据报的源地址和目的地址始终不变,而 MAC 地址随着链路的改变而改变。
    在这里插入图片描述

    IP 地址编址方式

    IP 地址的编址方式经历了三个历史阶段:

    1. 分类
    2. 子网划分
    3. 无分类

    分类

    由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且是固定的。

    IP 地址 ::= {< 网络号 >, < 主机号 >}
    在这里插入图片描述

    子网划分

    通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。注意,外部网络看不到子网的存在。

    IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}

    要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。

    无分类

    无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。

    IP 地址 ::= {< 网络前缀号 >, < 主机号 >}

    CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。

    CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。

    一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为 构成超网 。

    在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

    地址解析协议 ARP

    实现由 IP 地址得到 MAC 地址。
    在这里插入图片描述
    每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。

    如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。

    在这里插入图片描述

    网际控制报文协议 ICMP

    ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。
    在这里插入图片描述
    ICMP 报文分为差错报告报文和询问报文。
    在这里插入图片描述

    分组网间探测 PING

    PING 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性

    Ping 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报。

    Ping 的过程:

    1. 源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,但 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
    2. 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTl 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
    3. 不断执行这样的步骤,知道最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
    4. 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

    虚拟专用网 VPN

    由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。
    有三个专用地址块:

    1. 10.0.0.0 ~ 10.255.255.255
    2. 172.16.0.0 ~ 172.31.255.255
    3. 192.168.0.0 ~ 192.168.255.255

    VPN 使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其它主机通信;虚拟指“好像是”,而实际上并不是,它有经过公用的互联网。

    下图中,场所 A 和 B 的通信部经过互联网,如果场所 A 的主机 X 要和另一个场所 B 的主机 Y 通信,IP 数据报的源地址是 10.1.0.1,目的地址是 10.2.0.3。数据报先发送到与互联网相连的路由器 R1,R1 对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器 R1 的全球地址 125.1.2.3,目的地址是路由器 R2 的全球地址 194.4.5.6。路由器 R2 收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为 10.2.0.3,就交付给 Y。

    在这里插入图片描述

    网络地址转换 NAT

    专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。

    在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把运输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。

    在这里插入图片描述

  • 相关阅读:
    【深入理解Kotlin协程】协程中的Channel和Flow & 协程中的线程安全问题
    windows10搭建llama大模型
    kafka学习之三_信创CPU下单节点kafka性能测试验证
    scrcpy用法大全
    如何在 Linux 上安装 MySQL
    实验十五:摇杆传感器实验
    Java高级:IO
    闭坑1:Django “TemplateDoesNotExist at /index/“解决/Django加载HTML出错
    C# 模式匹配完全指南
    买下房子却发现被查封了,怎么办?
  • 原文地址:https://blog.csdn.net/qq_44697754/article/details/127913881