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

news/2024/7/24 5:09:30 标签: 笔记, 计算机网络

文章目录

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



NAT 技术

1. 因特网的接入方式

接入方式

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

  1. 光纤入户
    光纤入户

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


2. 公网和私网

公网与私网

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


3. NAT 技术

nat1
nat2

  • 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帧

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

http://www.niftyadmin.cn/n/5259752.html

相关文章

Java程序设计实验6 | 集合类

*本文是博主对Java各种实验的再整理与详解,除了代码部分和解析部分,一些题目还增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人自己的补充,以方便大家额外学习、参考。 (解…

C# 通俗讲解Public、Private以及Protected、[HideInInspector]、[SerializeField]的区别

一、故事背景 1.我画了一幅画,把它放在室外,所有人都可以看见这个画,所有人都可以对这个画进行修改。 2.我非常非常努力,赚了一大笔钱,这笔钱,只能我和我的子孙后代用,但如果我的孩子需要传给他…

一文学会使用 PyInstaller 将 Python 脚本打包为 .exe 可执行文件

文章目录 前言PyInstaller特点跨平台支持自动依赖项处理单文件发布支持图形用户界面(GUI)和命令行界面(CLI)应用支持多种打包选项 基本用法常用参数其它参数 版本 & 环境实现步骤安装 PyInstaller创建 Python 脚本使用 PyInst…

【数据结构】贪心算法

一.贪心算法的定义 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。 贪心算法的结果是最优解的最好近似。 优点:简单,高效。 缺点&…

Linux 基本了解

什么是Linux Linux是一个以Intel系列CPU(CYRIX,AMD的CPU也可以)为硬件平台,完全免费的UNIX兼容系统,完全适用于个人的PC。它本身就是一个完整的32位的多用户多任务操作系统,因此不需要先安装DOS或其他的操作系统(MS Windows, OS2,…

精通TypeScript:打造一个炫酷的天气预报插件

前言 ​ 随着数字化和信息化的发展,数据大屏使用越来越广泛,我们不仅需要展示数据,更需要以一种更加美观的方式展示数据。这就必然需要使用到各种图表组件,比如柱状图、饼图、折线图等等。但是有一些效果不太适合通过这种常规图表…

Kotlin语法基础篇十:有趣的操作符重载

前言 操作符在Java中我们也叫运算符,操作符重载是Kotlin语法糖中一个比较有趣的内容。为什么说它有趣呢?因为它可以实现让两个对象相加或者相减等操作。在Java语言中我们常见的操作符有、-、*、/、、--、%等。通常我们都是使用这些运算符来操作基本数据…

(第5天)进阶 RHEL 7 安装单机 Oracle 19C NON-CDB 数据库

进阶 RHEL 7 安装单机 Oracle 19C NON-CDB 数据库(第5天) 真快,实战第 5 天了,我们来讲讲 19C 的数据库安装吧!19C 是未来几年 Oracle 数据库的大趋势,同样的作为长期稳定版,11GR2 在 2020 年 10 月份官方就宣布停止 Support 了,19C 将成为新的长期稳定版,并持续支持…