【计算机网络入门】初学计算机网络(十一)重要
目录
1. CIDR无分类编址
1.1 CIDR的子网划分
1.1.1 定长子网划分
1.1.2 变长子网划分
2. 路由聚合
2.1 最长前缀匹配原则
3. 网络地址转换NAT
3.1 端口号
3.2 IP地址不够用?
3.3 公网IP和内网IP
3.4 NAT作用
4. ARP协议
4.1 如何利用IP地址找到MAC地址?
5. DHCP协议
5.1 DHCP作用
5.2 DHCP分配流程
①discover:
②offer:
③request:
5.2.1 提出问题
④acknowledge:
1. CIDR无分类编址
由于互连网的兴起,如果还是采用ipv4每人一个ip,那么42亿ip地址一定是不够用的,为了解决这个问题就有了CIDR无分类编址。
传统的IP地址分配方式:
举一个简单的例子,某公司需要2000个ip地址,那么如果使用c类地址那么只有2的八次方 = 256个地址能用显然是不够的,所以使用b类地址,那就是有2的16次方 = 65536个地址,剩下的ip资源就会大量的浪费。
CIDR无分类编址分配IP:
分配21位网络号,那么主机号就是32 - 21 = 11,也就可以有2的11次方 = 2048个ip地址可以提供分配。
1.1 CIDR的子网划分
1.1.1 定长子网划分
这样做有什么缺点呢?例如我们使用2bit作为子网号,那么14位是主机号,那就意味着每一个子网都要2的14次方个ip地址,那么实际情况下,有些子网可能根本不需要这么多的ip地址,就会造成资源的浪费。每个子网都一样大,资源就会造成浪费。
1.1.2 变长子网划分
从自由分配的主机号里面每次取出1bit作为子网号,就可以分为两个子网,每个子网依次重复之前的步骤。
不断划分子网的网络前缀不是其他子网的网络前缀的前缀,其实就是哈夫曼编码。
2. 路由聚合
当路由表项的部分网络前缀相同并且转发的出口一致,就可以合并为一个路由表项。这样的聚合叫做路由聚合也叫做超网。
优点:
①路由表变小,内存占用减少。
②查询速度减少。
缺点:
①可能引入无效地址;但是转发的时候会走默认0.0.0.0,此帧将会被丢弃。
2.1 最长前缀匹配原则
当目的地址与表项中多个路由地址相同,有限选取匹配程度最高的表项,从该表项的接口转发。
3. 网络地址转换NAT
3.1 端口号
网络层实现了主机和主机之间的通信,但是事实上的通信一定是进程之间的通信,例如微信发送消息只能微信接收,那么我们要实现进程之间的通信就会引入端口号这一概念。
IP地址+端口号就可以锁定某一个主机的特定进程;每一台主机的端口号相互独立。
传输层包含的首部是:源端口和目的端口;网络层包含的首部是:源IP地址和目的IP地址。
3.2 IP地址不够用?
地址是32个bit,如果每一台主机都要消耗全球唯一的IP地址,那么2的32次方 = 42亿肯定是不够用,那么如果一个局域网使用一个IP呢?例如校园网,有成千上万台设备,如果学校只用一个IP,成千上万台设备里面运行了几十万+个进程,我们只需要给这些进程编号即可区分彼此,所以端口号就能做到这一点。
3.3 公网IP和内网IP
一般来说,一个局域网才有资格使用全球唯一的IP,这个IP叫做公网IP或者外网IP。在局域网内部,有一些可以复用的特殊网段例如192.xx.xx.xx等,这些网段只能由内网使用,可以复用。
3.4 NAT作用
使用NAT可以将外网IP+端口号 ==》内网IP + 端口号(特定主机的特定进程)。
发送信息的流程:
首先发送信息的一方把自己的内网IP和端口号、目的进程的公网IP和端口号封装;然后到了距离目的进程最近的路由器,使用路由器中的NAT表对封装内的目的IP和端口进行改写,改写成该网段下该进程的内网IP和端口,最后将封装好的信息传送给指定进程,进程再逐级拆分从而获得真正的信息。
如何进行封装信息:
信息首先会添加传输层的TCP首部,其中包含源端口和目的端口;然后经过网络层添加IP首部,其中包含源IP和目的IP。
4. ARP协议
ARP协议最核心的就是ARP表,里面记录着IP和MAC地址之间的映射。
4.1 如何利用IP地址找到MAC地址?
首先将ARP请求分组封装进MAC帧,目的地址全1进行广播,源地址是自己的地址;当目的路由器收到ARP请求分组的时候,会记录分组中的MAC和IP之间的映射关系在ARP表之中。ARP请求分组进行广播之后,会受到ARP响应分组进行单播,源地址是要找的地址,目的地址是请求分组的源地址。此时发送方的路由器也会记录IP和MAC地址在ARP表之中。
ARP请求分组:
我的IP是xx,我的MAC是xx,要找IP是xx的家伙。
ARP响应分组:
我是你要找的那个家伙,我的IP是xx,MAC是xx。
5. DHCP协议
5.1 DHCP作用
分配IP地址,配置子网掩码、默认网关。
5.2 DHCP分配流程
一台新接入网络的主机会经过以下几个步骤:
①discover:
首先在应用层封装DHCP报文,自报家门,把自己的MAC地址封装。
然后再传输层封装UDP数据报,把自己的端口号和目的端口号进行封装。
然后网络层中封装IP数据报,目的地址是全1进行广播,源地址因为没有分配所以是全0,形成广播数据报
最后在数据链路层封装MAC帧,把自己的MAC地址和全1的MAC地址封装进去形成广播帧。
如果是其他服务器接受到这个MAC帧,一层一层剥开发现传输层里面的目的端口是67,而67是DHCP独占端口,所以接受到之后直接丢弃。
②offer:
DHCP服务端接收到客户端发送的MAC帧就会一层一层拆开,最后发现传输层的端口就是自己的端口,于是返回一个offer。
首先在IP地址池里面找到一个空闲地址,应用层封装DHCP数据报里面存着提供的空闲IP地址租用期、默认网关、子网掩码。
然后到了传输层封装UDP数据报里面存放着源端口号和目的端口号。
然后到了网络层封装IP数据报,目的IP是广播,源IP。
最后封装成MAC数据帧,把客户端的MAC地址作为目的地址,源地址是本地地址,进行发送。
到了路由器直接进行精准发送。
DHCP客户端收到MAC帧之后一层层拆开获得IP地址、子网掩码、默认网关。
③request:
此时在应用层封装DHCP请求报文,内含自己的MAC地址,以及接受此IP地址。
然后去传输层封装UDP数据报,内含DHCP服务器的端口和客户端的端口。
在网络层封装IP数据报,内含广播IP地址和0.0.0.0
在数据链路层封装MAC帧,内含广播MAC地址和自己的MAC地址
路由器收到MAC帧直接广播,非DHCP服务器接收之后拆到传输层发现端口不对,直接丢弃
最后DHCP服务器收到。
5.2.1 提出问题
为什么第一次DHCP客户端收到服务端的信息报文里面不含服务端的IP和MAC地址呢,这样一来第二次发送request的时候就直接点对点发送不就好了吗?
答案:因为不止一个DHCP服务器,第一次discover是进行广播的,所以服务器都会发送一个offer,如果第三次是点对点发送给服务器,那么就有n-1个服务器不知道那个客户端接收了谁的IP地址等信息,所以第三次的request必须是广播形式。
④acknowledge:
DHCP服务端收到客户端发来的MAC帧之后,需要返回确认帧。
DHCP确认报文被封装到UDP报文,封装到IP数据报,最后封装到MAC帧指定发送给客户端。
相关文章:

【计算机网络入门】初学计算机网络(十一)重要
目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用? 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…...

决策树(Decision Tree)基础知识
目录 一、回忆1、*机器学习的三要素:1)*函数族2)*目标函数2.1)*模型的其他复杂度参数 3)*优化算法 2、*前处理/后处理1)前处理:特征工程2)后处理:模型选择和模型评估 3、…...

Nat Mach Intell | AI分子对接算法评测
《Nature Machine Intelligence》发表重磅评测,系统评估AI与物理方法在虚拟筛选(VS)中的表现,突破药物发现效率瓶颈。 核心评测体系:三大数据集 研究团队构建了三个新型测试集: TrueDecoy:含14…...

【自学笔记】Hadoop基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Hadoop基础知识点总览1. Hadoop简介2. Hadoop生态系统3. HDFS(Hadoop Distributed File System)HDFS基本命令 4. MapReduceWordCount示例&am…...

【Linux】使用问题汇总
#1 ssh连接的时候报Key exchange failed 原因:服务端版本高,抛弃了一些不安全的交换密钥算法,且客户端版本比较旧,不支持安全性较高的密钥交换算法。 解决方案: 如果是内网应用,安全要求不这么高…...

(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...

交叉编译openssl及curl
操作环境:Ubuntu20.04 IDE工具:Clion2020.2 curl下载地址:https://curl.se/download/ openssl下载地址:https://openssl-library.org/source/old/index.html 直接交叉编译curl会报错找不到openssl,所以需要先交叉编…...

【每日八股】计算机网络篇(三):IP
目录 DNS 查询服务器的基本流程DNS 采用 TCP 还是 UDP,为什么?默认使用 UDP 的原因需要使用 TCP 的场景?总结 DNS 劫持是什么?解决办法?浏览器输入一个 URL 到显示器显示的过程?URL 解析TCP 连接HTTP 请求页…...

Gartner:数据安全平台DSP提升数据流转及使用安全
2025 年 1 月 7 日,Gartner 发布“China Context:Market Guide for Data Security Platforms”(《数据安全平台市场指南——中国篇》,以下简称指南),报告主要聚焦中国数据安全平台(Data Securit…...

从vue源码解析Vue.set()和this.$set()
前言 最近死磕了一段时间vue源码,想想觉得还是要输出点东西,我们先来从Vue提供的Vue.set()和this.$set()这两个api看看它内部是怎么实现的。 Vue.set()和this.$set()应用的场景 平时做项目的时候难免不会对 数组或者对象 进行这样的骚操作操作ÿ…...

深入浅出:UniApp 从入门到精通全指南
https://juejin.cn/post/7440119937644101684 uni-app官网 uniapp安卓离线打包流程_uniapp离线打包-CSDN博客 本文是关于 UniApp 从入门到精通的全指南,涵盖基础入门(环境搭建、创建项目、项目结构、编写运行)、核心概念与进阶知识&#x…...

DeepSeek未来发展趋势:开创智能时代的新风口
DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…...

阻塞队列的实现(线程案例)
一.什么是阻塞队列? 1.如果对于一个满的队列,还要把元素入队列,此时这个队列就会阻塞等待,一直阻塞到这个队列不满为止,从而把这个元素入队列! 2.如果对于一个空的队列,还要从队列拿出元素&…...

http status是什么?常见的http状态码指的是什么意思?
HTTP 状态码 HTTP 状态码(HTTP Status Code)是服务器在响应客户端请求时返回的一个三位数字代码,用于表示请求的处理结果。HTTP 状态码是 HTTP 协议的一部分,帮助客户端(如浏览器或应用程序)了解请求是否成…...

react组件分离,降低耦合
分离前 分离后...

【AI】AI白日梦+ChatGPT 三分钟生成爆款短视频
引言 随着人工智能(AI)技术的快速发展,AI在各个领域都展现出了强大的应用潜力。其中,自然语言处理技术的进步使得智能对话系统得以实现,而ChatGPT作为其中的代表之一,具有自动生成文本的能力,为…...

MYSQL的安装教程
mysql安装分为:普通安装和压缩包安装 压缩包安装很多会存在安装失败的情况,所以我这里就用了普通安装 一、官网下载安装包 www.mysql.com 点击DOWNLOADS: 进入社区版本下载: 点击最下面一行进行下载: 选择第二个离…...

深入解析 C# 中的泛型:概念、用法与最佳实践
C# 中的 泛型(Generics) 是一种强大的编程特性,允许开发者在不预先指定具体数据类型的情况下编写代码。通过泛型,C# 能够让我们编写更灵活、可重用、类型安全且性能优良的代码。泛型广泛应用于类、方法、接口、委托、集合等多个方…...

NUMA架构介绍
NUMA 架构详解 NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问…...

数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南
文章目录 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...

python爬虫:python中使用多进程、多线程和协程对比和采集实践
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 多进程爬虫1.1 python多进程样例1.2 实现多进程爬虫2. 多线程爬虫2.1 python多线程样例2.2 实现多线程爬虫3. 协程爬虫3.1 python协程样例3.2 实现协程爬虫在网络爬虫中,为了提高抓取效率,常常需要使用多进程、多线…...

《OpenCV》—— dlib库
文章目录 dlib库是什么?OpenCV库与dlib库对比dlib库安装dlib——人脸应用实例——人脸检测dlib——人脸应用实例——人脸关键点定位dlib——人脸应用实例——人脸轮廓绘制 dlib库是什么? OpenCV库与dlib库对比 dlib库安装 dlib——人脸应用实例——人脸检…...

Linux搜索---find
find搜索 find 命令的核心功能是在指定的目录路径下,递归地搜索文件和目录,并且可以根据多种条件对搜索结果进行筛选,还能对符合条件的文件和目录执行特定操作。 一、基础语法结构 find [起始目录] [匹配条件] [执行操作] # 基本示例 find…...

python之爬虫入门实例
链家二手房数据抓取与Excel存储 目录 开发环境准备爬虫流程分析核心代码实现关键命令详解进阶优化方案注意事项与扩展 一、开发环境准备 1.1 必要组件安装 # 安装核心库 pip install requests beautifulsoup4 openpyxl pandas# 各库作用说明: - requests&#x…...

Blender常用快捷键的汇总
一、基础操作 全选/取消全选:A(全选)、AA(连续按两次A取消全选)复制物体:Shift D(复制后需点击确认位置)移动物体:G(按X/Y/Z可约束轴向移动)旋转…...

鸿蒙启动页开发
鸿蒙启动页开发 1.1 更改应用名称和图标 1.更改应用图标 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可 2.更改应用名称 3.效果展示 2.1 广告页面开发 3.1 详细介绍 3.1.1 启动页面 import { PrivacyDialog } fr…...

Unity 文字高度自适应
期望 文字有字号限制,输入文字文字后先判断高度是否适用于限制字号,若处于最小字号时高度任不适用,则调整RectTransform 的高度。 核心代码 每次输入文字时先将字号设定为原始字号。 comp.fontSize fontSize; comp.text content; 拓展T…...

Teaching Small Language Models Reasoning throughCounterfactual Distillation
2024.emnlp-main.333.pdfhttps://aclanthology.org/2024.emnlp-main.333.pdf 1.概述 大型语言模型(LLM),如GPT-3,在各种下游任务中表现出色,包括通过链式思维(CoT)进行问题解答。CoT鼓励模型在解决问题时生成中间推理步骤。尽管LLM取得了成功,但由于模型大小的限制,其…...

快速开始React开发(一)
快速开始React开发(一) React是一个JavaScript库,用于构建交互式网站,并且能够快捷创建SPA(Single Page App),其组件化的思想也是被一再传播,无论是普通的Web网站还是嵌入移动端交互…...

2025最新Transformer模型及深度学习前沿技术应用
第一章、注意力(Attention)机制 1、注意力机制的背景和动机(为什么需要注意力机制?注意力机制的起源和发展里程碑)。 2、注意力机制的基本原理(什么是注意力机制?注意力机制的数学表达与基本公…...