网络原理——网络层与数据链路层

news2024/11/17 10:28:41
JavaEE传送门

JavaEE

网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制

网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理


目录

  • 网络层
    • IP 协议
    • IP 地址
    • 路由选择
  • 数据链路层
    • 以太网


网络层

网络层做的工作, 就是两点之间, 规划出一个合理的路径. 同时也需要对主机所处的位置, 进行定义.

网络层做的工作

  1. 地址管理
  2. 路由选择

IP 协议

注: 本篇文章讲解的 IP 默认都是指 IPv4

IP 协议的报文格式

网络上可能会有很多的数据报在传输, 有的数据报可以顺利发到对面, 有的可能是永远也发不过去(收件人地址写错了)

永远也发不过去的数据报, 不可能无限的转发下去, 转发到一定程度, 发现还是没到, 就会被丢弃.

TTL 单位是 “次数” 是一个整数. 一般是 32/ 64/ 128这样的整数.

数据报传输时, 每经过一个路由器转发, TTL-1 , 如果减到 0 了, 此时就要把包丢弃了,

(预期正常情况下,数据报是可以在很短的次数内就能传输到世界上的任何一个主机上的)

为什么转发几次就能到呢?

基于一个社会科学上的假设: 六度空间理论.

IP 地址本质上是一个 32 位的整数(四个字节, 类似于一个int)

为了给人来看, 通常就会把这个32位整数, 转成 "点分十进制"表示方式 (类似192.168.1.101)

使用三个点, 把 IP 地址分成 4 个部分, 每个部分 1 个字节 (每个部分的取值范围 0-255)

IP 地址是用来区分网络上的唯一一台主机的

一个 IP 地址, 是 4 个字节, 32 个 bit 位, 能表示的范围 0->42亿9千万

按照上述设定, IP 地址最多只能表示不到 43亿 个不同的主机

此时当时能够上网的设备早以超过了这个数值.

IP 地址不太够用, 应该怎么办呢?

  1. 动态分配 IP 地址

    设备上网的时候, 才分配 IP 地址, 不上网的时候, 就把 IP 回收, 给别人用

    (治标不治本, 这种方案, 并没有增加 IP 地址的数量, 只是提高了利用率)

  2. NAT 机制(主流机制)

    不再强制要求每个主机都有独立的 IP

    把 IP 地址分为两大类

    1)外网 IP/ 公网 IP

    2)内网 IP/ 私网 IP / 局域网 IP

    • 约定, 10.*, 172.16-172.31*, 192.168.*都是局域网 IP

    • 约定, 在同一个局域网内部, IP 不能重复

    • 在不同的局域网中, IP 之间允许重复

    • 如果我们在局域网内部想访问某个外网的服务器, 就会使用一个外网 IP 来代替一大波局域网中的设备(大大节省了, 外网 IP 的个数)

举个例子:

现在我想通过我的电脑, 发送一个数据报给 xxx 服务器, 会经历一个什么样的过程呢.

返回响应时, 按原路返回, 路由器记录了映射关系(记住了是谁替换了谁), 方便还原.

运营商路由器, 还连接着很多很多, 千家万户的设备

一个 外网 IP 就可以代替上万个设备

当前网络环境的现状, 就是 NAT + 动态地址分配

NAT核心: 用一个 IP 地址代替很多设备, 这样就节省了 IP地址 的个数

小知识:

IPv6 可以彻底解决 IP 地址不够用问题.

IPv4 4字节, 32位来表示 IP 地址.

IPv6 16字节, 128位表示 IP 地址, 扩大的远远不止4倍(42亿 * 42亿 * 42亿 * 42亿) 给地球的每一粒沙子都分配一个 IP 地址, 也是够用的.

为什么 IPv6 没有大规模普及呢?

  • IPv6 最大的问题就是, IPv6 和 IPv4 不兼容

  • 比如: 现在有个 IPv4 的路由器, 这个路由器已经用了很多年了. 要想升级, 就要换设备, 要换设备就要花钱, 企业中如果换设备, 就是一笔不小的开销.

但是在国内, IPv6 的普及还是很好的, 目前70% 的家用宽带已经能支持 IPv6 了. (默认都是未开启的状态). 当前看到的各种常见的用用程序也都支持 IPv6 了.


IP 地址

组成

IP 地址分为两个部分, 网络号和主机号

  • 网络号标识网段,保证相互连接的两个网段具有不同的标识;(网段: 网络号, 局域网的身份标识)
  • 主机号标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
  • 同一个局域网中, 主机之间的网络号是相同的, 主机号必须不同
  • 两个相邻的局域网中, 要求网络号是不同的 (同一个路由器连接的局域网, WAN口和 LAN口要是不同的网络号)

子网掩码 (划分出哪里到哪里是一个网络号)

32位的整数, 左半边都是 1, 右半边都是 0. (不会1, 0 混着)

左半边有多少个 1 就表示 IP 地址左侧的多少位是网络号. (把子网掩码和 IP 地址进行按位与运算, 得到的结果就是网络号)

  • 在我的局域网里, 我的电脑, 我的手机, 其他的设备, 只要是连在我这个路由器上, 大家的网络号都是 “192.168.1”, 但主机号不同.

  • 如果我家的路由器又连着我家的光猫. 我的路由器连接了两个局域网, 这两个局域网的网络号是不同的.

分类

过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示(该图出 自 [TCPIP] ).

# 注意 #

  1. 这种网络划分方式已经消失在历史长河中了
  2. 这种分配方式比较浪费, 且比较死板

特殊的 IP 地址

  • 如果一个 IP 地址, 主机号为 0, 此时这个 IP 就表示网络号. 代表当前局域网

  • 如果一个 IP 地址, 主机号为 1, 此时这个 IP 往往表示这个局域网的 “网关”, 代表局域网的网关(通常就是路由器的 IP) [ 注: 不是强制要求, 可以手动设置 ]

    网关: 出入口. 网关的角色一般就是路由器, 把守着当前局域网和其他局域网之间的出入口

  • 如果一个 IP 地址, 主机号 全为 1, 此时这个 IP 表示广播 IP

  • 127.*开头都是 “环回IP”, 典型的是 “127.0.0.1”, 实际上, 只要是 127 开头的都是环回 IP


路由选择

就像地图导航一样, 能够在两点之间规划出一个路线.

路由选择, 是 “启发式” 的过程, 非常类似于"问路".

比如: 你在 A 地, 你想去 D 地.

  1. 在 A 地有一个人说, 好像在 E 地附近, 你先往 B 那边走.
  2. 你到了 B 地, 一个人说, 好像在 E 地附近, 你先往 C 那边走
  3. 你到了 C 地, 终于有人知道了, 说你往前走, 就到 D 了

IP 数据包中, 就包含 目的 IP

网络数据包到达路由器的时候, 路由器自身有一个 “路由表” 数据结构, (路由表就是这个路由器认识的路)

一个路由器无法认识到网路的全貌, 但是可以认识附近的一部分

  • 如果当前的目的 IP 路由器认识, 就会给出一个明确的路线

  • 如果当前目的 IP 路由器不认识, 路由器就会把数据包转发给一个 “更多见多识广” 的路由器(在路由表里有一个默认的选项, 下一跳)

是否可能问了一大圈, 也没找到目的地呢?

  1. 也是有可能的, 比如 IP 地址不存在,(或者不可达)

# 注意 #

路由过程不光是找一条路, 也需要筛选一条更好的路.

最关键的是路由表数据结构是什么样的, 以及路由表是怎么来的.


数据链路层

以太网

  • “以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;
  • 例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;
  • 以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;

以太网帧格式

都有一套 IP 地址, 为什么还需要一套 MAC 地址呢?

  • 历史原因, 设计 IP 地址的人 和设计 MAC 地址的人, 是两个团队, 是他们各自独自搞的一套地址体系.

MAC 地址设计的时候, 6 个字节, 当下 MAC 地址还是够用的, 可以让每个主机都有独立的 MAC 地址. (这个地址是网卡出厂的时候就写好了)

MAC 地址一定是唯一的吗?

  • 正经网卡, 出场时会被分配一个唯一的 MAC 地铁
  • 但是有一些山寨厂商, 生产的网卡的 MAC 地址可能和别人重复
  • 由于当前 MAC 地址只是在数据链路层使用, 只要相邻区域内的设备 MAC 地址不重复即可.

因此在网络上, MAC 地址也可以作为是主机身份标识的一种方式.

比如: 有一个网络数据包, 从 A 转发给 B, 转发过程中需要经过 CD

MTU 一个以太网数据帧最大值

以太网, 就属于传输过程中的基础设施.

把物理层比喻成公路, 数据链路层就相当于泡在公路上的卡车,

数据链路层里有很多协议, 不同的协议,相当于不同型号的卡车, 有的卡车载重量大, 有的卡车载重量小, 以太网就属于载重量比较小的(1500 单位是字节)

此时如果想要运输更多的数据,就需要分多个卡车来拉货(IP 协议分包保证)


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
在这里插入图片描述
加粗样式

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基于PHP+MySQL的健身房管理系统

随着时代的发展人们人们对身体不健康越来越重视。身体是革命的本钱,所以只有有一个好的身体才能够积极地参加到工作和学习中去。当前社会生活节奏较快人们往往没有时间进行锻炼于是造成了很多富贵病以及办公室职业病的发生。这是一种极其不健康的生活方式,我为了能够让这些亚健…

坚持记账的5大好处,你知道吗?

记账可以理清生活开支,有效节流通过记账,每时每刻都能知道自己的财务状况,花钱的时候会更有目的与计划,不像以前手忙脚乱一团糟,也不再寅吃卯粮,随意透支。对于很多不知道钱花到哪里去的人来说,…

SpringBoot(自定义注解)

目录 1.注解的概念 1.1 什么是注解 1.2 java注解分类 1.3 JDK基本注解 1.4 JDK元注解 2.自定义注解 2.1 自定义注解的组成 2.2 如何自定义注解 2.3 案例 2.3.1 简单了解基本属性 2.3.2 获取类与方法上的注解值 2.3.3 获取类属性上的注解属性值 2.3.4 获取参数修饰注解对应的属…

MQTT X v1.8.3 正式发布

近日,MQTT X 发布了最新的 1.8.3 版本,主要对功能使用进行了优化,并修复了使用过程中所出现的各类问题。例如,优化了 MQTT 5.0 Clean Start 的使用方式,为会话过期间隔添加默认值;优化 MQTT X CLI 的默认输…

数据结构与算法分析之并查集

1. 并查集 并查集是一种树型的数据结构,并查集可以高效的进行如下操作: 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1.1 并查集结构 并查集是一种树型结构,但这棵树和我们之前学的二叉树、红黑树、B树等都不一样&#xff…

WindowsServer2016配置故障转移群集图文教程

准备工作 首先准备好两台以上的服务器,并记录好IP和主机名。如下 172.31.210.203 WIN-S8LC9RKL4BB 172.31.215.54 WIN-76A6N72MRTD 之后需要配置到host文件中。 正文 基础配置 首先打开host文件,把所有的IP及主机添加进去。host文件地址如下。 C:\Wi…

10.30-11.3|浙大报考点硕士研究生2023年网上确认系统操作流程

一、登陆《2023年全国硕士研究生招生考试网上确认系统》https://yz.chsi.com.cn/wsqr/stu/index.html。填写考生所在地,点击“确定”。二、点击“开始进行网上确认”。 三、阅读网报公告之后,点击“我已经阅读完毕”。 四、阅读考生诚信考试承诺书&#…

QT5串口编程——编写简单的上位机

下面开始介绍串口类的使用。 首先,QT5是自带QSerialPort这个类的,使用时需要在pro文件里面添加一行: ​然后直接引用头文件就可以了。 ​在QT5中,串口通信是借助一个QSerialPort的对象来实现的,在设置QSerialPort对象…

课堂笔记| 第七章:多态

本节课要点: 继承特性多态虚函数目录 一、多继承 二、继承的前提:正确的分类 三、多态 1. 虚函数 2. 确保覆盖和终止覆盖 3. 虚函数的实现原理 4. 虚析构函数 四、纯虚函数和抽象类 1. 纯虚函数 2. 抽象类 一、多继承 在之前的课程中&a…

SpringCloud Alibaba Sentinel实现熔断与限流

目录 一、简介 1.官网 & 介绍 2.下载地址 3.作用 4.如何使用 ⭐解决服务使用中的各种问题 5.Sentinel与Hystrix的区别 二、安装sentinel控制台 1.sentinel组件由2部分构成 2.安装步骤 ①地址 ②运行命令 ③访问sentinel界面 三、初始化演示工程 1.启动naco…

MyBatis 环境搭建配置全过程【IDEA】

文章目录一、MyBatis 介绍二、MyBatis 环境搭建1.MyBatis 下载2.配置 jdk 版本3.创建 Maven 工程4.IDEA 连接数据库5.项目文件构架6.引入相关依赖7.命令行创建数据库8.数据库配置文件9.核心配置文件三、入门测试程序1.创建表准备数据2.创建 POJO 实体3.创建映射文件4.修改核心配…

如何增加 KVM 虚拟机的磁盘大小

KVM 是一种集成到 Linux 内核中的虚拟化技术。您可以使用virsh、virt-manager和GNOME Boxes等工具创建虚拟机并与 KVM 交互。 磁盘空间不足是最常见的 VM 来宾问题之一。在测试新 VM 时,您可能会故意使用较小的磁盘。随着时间的推移,您会累积文件,直到虚拟磁盘几乎已满。以…

C语言笔记

fabs用来求double类型的绝对值&#xff0c;小数点后保留6位#include<math.h> double fabs(double ) labs用来求长整型long整型的绝对值&#xff0c; long cabs(long n); abs用来求整数的绝对值&#xff0c;labs求long long的绝对值#include<stdlib.h> double ret …

初识C++ (二)

初识C 二 上节课输入输出问题的一些补充一. 缺省参数1.1 半缺省参数1.2 全缺省参数二. 函数重载2.1 重载是什么意思&#xff1f;2.2 如何区分重载函数参数类型不同参数个数不同参数顺序不同附加题1附加题22.3 c支持函数重载的原理预处理编译汇编连接总结要以一种很认真的态度去…

深度优先搜索(dfs)和广度优先搜索(bfs)

目录 一、前言 二、关于dfs和bfs有意思的小故事 三、深搜题例 1、小猫爬山链接 2、基本思路 3、代码 &#xff08;1&#xff09;python代码 四、广搜题例 1、武士风度的牛链接 2、基本思路 3、代码 &#xff08;1&#xff09;C代码 &#xff08;3&#xff09;pyth…

现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢?

C/C会不会被时代淘汰&#xff1f;这个问题跳过了一步&#xff0c;关键是这个问题&#xff1a; C/C有哪些其它语言难以代替的特殊之处&#xff1f; 1、对实现细节的控制粒度 一般我们常说&#xff1a;C/C具有较高的执行效率。其实这句话不是特别准确&#xff0c;有时候它们并…

npm报错整理

npm报错整理一、代理1. 因为使用公司的镜像源导致的403 forbidden总结一、代理 1. 因为使用公司的镜像源导致的403 forbidden 在更新脚手架的时候&#xff0c;遇到了403的报错&#xff1a; 遇到问题不要怕&#xff0c;我们根据错误去解决就好。 &#xff08;1&#xff09;首…

【黄啊码】MySQL入门—13、悲观锁、乐观锁怎么用?什么是行锁、页锁和表锁?死锁了咋办?

大家好&#xff01;我是黄啊码&#xff0c;MySQL的入门篇已经讲到第12个课程了&#xff0c;今天我们继续讲讲大白篇系列——数据库锁 目录 从数据库管理的角度对锁进行划分 共享锁也叫读锁或 S 锁 排它锁也叫独占锁、写锁或 X 锁。 意向锁&#xff08;Intent Lock&#xf…

C++库——windows下使用Qt5.15.2+mingw64+msys2编译c++数学库GSL

文章目录准备配置msys2编译GSL准备 下载gsl库的源代码。大家可以到GSL的官网下载gsl的源代码。目前版本为2.7&#xff0c;下载完成后解压缩。 下载msys2。msys2是一套在windows上运行的用于构建库和程序的工具库&#xff0c;下载地址可以使用清华源的下载地址。下载完成后&…

【论文解读】伪装物体检测 Camouflaged Object Detection

文章目录伪装物体检测 Camouflaged Object DetectionSINet v1RF模块&#xff1a;PDC模块&#xff1a;SINet v2特征提取Texture Enhanced Module 纹理增强模块Neighbor Connection Decoder 邻居连接解码器Group-Reversal Attention 组反转注意力总结伪装物体检测 Camouflaged Ob…