计网Lesson8 - NAT技术与链路层概述

文章目录

  • [NAT 技术](#NAT 技术)
    • [1. 因特网的接入方式](#1. 因特网的接入方式)
    • [2. 公网和私网](#2. 公网和私网)
    • [3. NAT 技术](#3. NAT 技术)
  • 链路层
    • [1. 数据链路层概述](#1. 数据链路层概述)
    • [2. 数据链路层的三个问题](#2. 数据链路层的三个问题)
      • [2.1 封装成帧](#2.1 封装成帧)
      • [2.2 透明传输](#2.2 透明传输)
      • [2.3 差错检测](#2.3 差错检测)


NAT 技术

1. 因特网的接入方式

光猫将电信号转换为数字信号发送给路由器

  1. 光纤入户

光纤传递的就是数字信号,不需要转换


2. 公网和私网

所以私网 IP 想进入公网,需要先将私网 IP 转换为公网 IP


3. NAT 技术


  • NAT 转换
    • 静态转换
      • 每个私网 IP 有个固定与之对应的公网 IP
    • 动态转换
      • 每个私网IP 在需要发送数据时进行动态申请,路由器在 IP 池里选一个分配给私网 IP
    • PAT
      • NAT 将相同主机的不同端口对应到同一公网 IP 的不同端口上
      • NAT 将不同主机也会对应到同一公网 IP 的不同端口上
      • 内部网络的所有主机均可共享一个合法外部 IP 地址实现对 Internet 的访问,从而可以最大限度地节约 IP 地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自 internet 的攻击。


链路层

1. 数据链路层概述

  • 链路是指从一个节点到相邻节点的一段物理线路(不管有线无线),而且中间没有其他交换节点
    • 集线器本身就只是一种线路连接设备,没有任何交换行为存在
    • 交换机有交换行为,所以是一个节点
  • 信道
    • 广播信道用于局域网,也就是私网中。
    • 点对点信道用于骨干网中路由器的接受与发送。
  • 链路与数据链路的关系
    • 链路包含数据链路
    • 在数据传输的过程中,会经过多条链路,每条链路上的数据链路协议可能不同,这些协议可能包括以太网协议、局域网协议、无线协议等。这些协议都属于数据链路层的协议,它们的主要作用是在不可靠的物理链路上建立可靠的数据传输。

2. 数据链路层的三个问题

2.1 封装成帧

  • 帧(Frame)的数据部分是从 IP 层传下来的数据包

  • 最大传输单元 MTU(Maximum Transfer Unit)

    • 每一种数据链路层协议都规定了所能传输的帧数据长度上限
    • 以太网的 MTU 为 1500 1500 1500 字节
  • 以太网V2的 MAC 帧

    • 以太网多用于边缘网络上的主机与路由的互联。
      • 所以帧中包含了 MAC 地址,标记目标
    • 最小帧长为 64 64 64 字节 ,其中 MTU 最小为 46 46 46 字节。
      • 当数据不足 46 B 46B 46B 时,协议会对数据包进行填充补 0 0 0
    • 以太网帧的接收
      • 以太网帧使用曼彻斯特编码,每一个码元的正中间都一定会有一次电压的跳变,当以太网把一个 MAC 帧发完过后就不在发送其他的码元了(MAC 帧之间都是有一定间隙的),所以这样就很容易找到帧的结束位置。
      • 而 MAC 帧前含有前导码标记数据的开始
  • PPP 帧

    • PPP 帧的接收
      • PPP是一种点对点协议,逻辑上相连的就一台设备,因此不需要寻址。PPP 在封装方式以以太网的封装方式不同,它没有以太网帧所要求的 MAC 地址,它通过自身的协商过程实现点到点的数据传输。PPP 帧发送的是连续字节流,必须前后都添加定界符以区分不同的帧。在同一个广播域中只能有两个节点,无法加入第三个节点,所以也并不需要物理地址。

2.2 透明传输

  • 透明传输是指数据链路层对上层交付的数据不做任何改变,使得上层感受不到有数据链路层的存在。

    不做任何改变是指上层接收到的数据跟发送来的数据一致,而不是数据链路层不对数据做任何操作。

    • 发送方数据链路层会对数据做出操作,然后在接收方的数据链路层将操作去除,让接收方的网络层拿到的数据跟发送时的一样,对于双方网络层来说是"透明的"。
  • 面向字节的物理链路使用字节填充法实现透明传输。

    • 数据链路层将网络层协议封装成帧时,会在首部和尾部分别添加SOH以及EOT这两个特殊字符,接收方是根据这两个字符来确定帧首和帧尾的。
    • 如果上层协议发送过来的数据(即链路层的数据部分)包含EOT,那么接收方在解析这个帧的时候就会误以为数据已经结束1。所以,如果链路层对这种情况没有特殊处理,那么就可以理解链路层为非透明传输(因为无法传输EOT这个字符)。
    • 但是数据链路层通过对这个字符添加转移符(如果网络层数据中还存在转移符,就再添加一个转移符)的办法来使数据部分可以传输EOT字符,就实现了透明传输。
  • 面向比特的物理链路使用零比特填充法实现透明传输。

    • 在 PPP 协议和 HDLC 协议中,都使用了这种方法。
      • 零比特填充法 :当数据中出现连续 5 5 5 个 " 1 " "1" "1" 时,在其后面插入一个 " 0 " "0" "0"。接收端在接收到数据时,如果发现连续 5 5 5 个 " 1 " "1" "1",就将其后面的 " 0 " "0" "0" 删除,从而还原出原来的数据。

2.3 差错检测

  • 奇偶校验
    • 对数据每次取一位进行异或,最终得到答案 1 1 1 或 0 0 0,代表数据中 1 1 1 的数量是奇数还是偶数,然后接收方按这个进行验证。
    • 奇偶校验只能应用于产生一个误码的情况,如果产生了多个误码,那么这种情况就不适用了。
  • 循环冗余校验(CRC):一般计算的链路层采用循环冗余校验CRC。
    • F C S FCS FCS 是根据帧的数据部分 + 数据链路层首部算出(也就是根据所有要发送的数据算出)。

    • F C S FCS FCS (帧检验序列)通常放在数据的尾部,而不是首部,主要有以下几个原因:

      1. 数据传输的顺序:在数据通信中,数据一般是按照从头到尾的顺序进行发送的。如果将FCS放在数据的首部,那么在数据发送之前就需要计算出FCS,这就意味着在发送数据之前需要先处理完整个数据帧,这可能会增加数据传输的延迟。

      2. 实时性:将FCS放在数据的尾部可以实现数据的实时处理。也就是说,在发送数据的同时,可以边发送边计算FCS,当数据发送完毕时,FCS也计算完毕,然后将FCS添加到数据的尾部并发送出去。

      3. 错误检测:在接收端,数据也是按照从头到尾的顺序进行接收的。如果FCS在数据的首部,那么在接收到FCS之后就需要等待接收完整个数据帧才能进行错误检测。而如果FCS在数据的尾部,那么在接收数据的同时,可以边接收边进行错误检测,当接收到FCS时,就可以立即完成错误检测。

      因此,将FCS放在数据的尾部,既可以提高数据传输的效率,又可以实现数据的实时处理和错误检测,这是一种更为合理和高效的设计方式。

    • 基本思想:

      • 收发双方规定一个生成多项式
      • 发送方根据生成多项式计算出 F C S FCS FCS 放在数据尾部发送出去。
      • 接收方根据数据算出 F C S FCS FCS 跟尾部校验数据正确性。
      • G ( X ) = X 3 + X 2 + 1 G(X) = X^3 + X^2 + 1 G(X)=X3+X2+1:这就是生成多项式
        意思就是: 1 1 1 后面 3 3 3 个 0 0 0, 2 2 2 个 0 0 0, 0 0 0 个 0 0 0。也就得到了我们的除数: " 1101 " "1101" "1101"
      • 构造被除数 (补 0 0 0):根据我们的生成多项式的最高次补,最高次是几就补几个 0 0 0
      • 二进制模 2 2 2 除法:就是异或运算,只要位数够了就进行异或。
      • 补余数 :将余数补到被除数上,这样被除数就可以被除数整除了。
      • 校验也是同理,如果最后运算答案为 0 0 0,说明整除,数据正确;如果非 0 0 0,说明数据有误,扔包。
相关推荐
Ccjf酷儿42 分钟前
操作系统 蒋炎岩 3.硬件视角的操作系统
笔记
习习.y1 小时前
python笔记梳理以及一些题目整理
开发语言·笔记·python
在逃热干面2 小时前
(笔记)自定义 systemd 服务
笔记
DKPT3 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
Mu.3873 小时前
计算机网络模型
网络·网络协议·计算机网络·安全·http·https
QT 小鲜肉4 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇
笔记·读书·孙子兵法
星轨初途5 小时前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
QT 小鲜肉6 小时前
【孙子兵法之上篇】001. 孙子兵法·计篇深度解析与现代应用
笔记·读书·孙子兵法
love530love8 小时前
【笔记】ComfUI RIFEInterpolation 节点缺失问题(cupy CUDA 安装)解决方案
人工智能·windows·笔记·python·插件·comfyui
愚戏师8 小时前
MySQL 数据导出
数据库·笔记·mysql