📖
R‘Notes
  • 关于本仓库/网站
  • Note
    • Golang的知识碎片
      • 关于Golang的一些碎片知识
    • LeetCode
      • LCP 47. 入场安检
      • LCR 121. 寻找目标值 - 二维数组
      • LCR 125. 图书整理 II
      • LCR 127. 跳跃训练
      • LCR 143. 子结构判断
      • LCR 159. 库存管理 III
      • LCR 161. 连续天数的最高销售额
      • LCR 170. 交易逆序对的总数
      • LCR 174. 寻找二叉搜索树中的目标节点
      • LeetCode--1. 两数之和
      • LeetCode--10. 正则表达式匹配
      • LeetCode--1004. 最大连续1的个数 III
      • LeetCode--101. 对称二叉树
      • LeetCode--102. 二叉树的层序遍历
      • LeetCode--1027. 最长等差数列
      • LeetCode--103. 二叉树的锯齿形层序遍历
      • LeetCode--1035. 不相交的线
      • LeetCode--104. 二叉树的最大深度
      • LeetCode--1044. 最长重复子串
      • LeetCode--1049. 最后一块石头的重量 II
      • LeetCode--105. 从前序与中序遍历序列构造二叉树
      • LeetCode--1052. 爱生气的书店老板
      • LeetCode--106. 从中序与后序遍历序列构造二叉树
      • LeetCode--1092. 最短公共超序列
      • LeetCode--11. 盛最多水的容器
      • LeetCode--110. 平衡二叉树
      • LeetCode--1100. 长度为 K 的无重复字符子串
      • LeetCode--111. 二叉树的最小深度
      • LeetCode--112. 路径总和
      • LeetCode--113. 路径总和 II
      • LeetCode--1137. 第 N 个泰波那契数
      • LeetCode--114. 二叉树展开为链表
      • LeetCode--1143. 最长公共子序列
      • LeetCode--115. 不同的子序列
      • LeetCode--1151. 最少交换次数来组合所有的 1
      • LeetCode--1155. 掷骰子等于目标和的方法数
      • LeetCode--1176. 健身计划评估
      • LeetCode--1191. K 次串联后最大子数组之和
      • LeetCode--120. 三角形最小路径和
      • LeetCode--121. 买卖股票的最佳时机
      • LeetCode--1218. 最长定差子序列
      • LeetCode--122. 买卖股票的最佳时机 II
      • LeetCode--1220. 统计元音字母序列的数目
      • LeetCode--123. 买卖股票的最佳时机 III
      • LeetCode--124. 二叉树中的最大路径和
      • LeetCode--125. 验证回文串
      • LeetCode--128. 最长连续序列
      • LeetCode--1289. 下降路径最小和 II
      • LeetCode--129. 求根节点到叶节点数字之和
      • LeetCode--1301. 最大得分的路径数目
      • LeetCode--1312. 让字符串成为回文串的最少插入次数
      • LeetCode--132. 分割回文串 II
      • LeetCode--134. 加油站
      • LeetCode--1343. 大小为 K 且平均值大于等于阈值的子数组数目
      • LeetCode--135. 分发糖果
      • LeetCode--136. 只出现一次的数字
      • LeetCode--138. 随机链表的复制
      • LeetCode--139. 单词拆分
      • LeetCode--14. 最长公共前缀
      • LeetCode--141. 环形链表
      • LeetCode--142. 环形链表 II
      • LeetCode--1423. 可获得的最大点数
      • LeetCode--143. 重排链表
      • LeetCode--144. 二叉树的前序遍历
      • LeetCode--1449. 数位成本和为目标值的最大数字
      • LeetCode--145. 二叉树的后序遍历
      • LeetCode--1456. 定长子串中元音的最大数目
      • LeetCode--1458. 两个子序列的最大点积
      • LeetCode--146. LRU 缓存
      • LeetCode--148. 排序链表
      • LeetCode--15. 三数之和
      • LeetCode--151. 反转字符串中的单词
      • LeetCode--152. 最大乘积子数组【DP】
      • LeetCode--153. 寻找旋转排序数组中的最小值
      • LeetCode--155. 最小栈
      • LeetCode--1584. 连接所有点的最小费用,最小生成树模板题
      • LeetCode--1594. 矩阵的最大非负积
      • LeetCode--16. 最接近的三数之和
      • LeetCode--160. 相交链表
      • LeetCode--162. 寻找峰值
      • LeetCode--1626. 无矛盾的最佳球队
      • LeetCode--1639. 通过给定词典构造目标字符串的方案数
      • LeetCode--165. 比较版本号
      • LeetCode--1652. 拆炸弹
      • LeetCode--1671. 得到山形数组的最少删除次数
      • LeetCode--169. 多数元素
      • LeetCode--1691. 堆叠长方体的最大高度
      • LeetCode--174. 地下城游戏
      • LeetCode--1749. 任意子数组和的绝对值的最大值
      • LeetCode--1774. 最接近目标价格的甜点成本
      • LeetCode--179. 最大数
      • LeetCode--1824. 最少侧跳次数
      • LeetCode--1852. 每个子数组的数字种类数
      • LeetCode--188. 买卖股票的最佳时机 IV
      • LeetCode--189. 轮转数组
      • LeetCode--19. 删除链表的倒数第 N 个结点,关于删除链表会遇见的指针问题
      • LeetCode--1937. 扣分后的最大得分
      • LeetCode--1964. 找出到每个位置为止最长的有效障碍赛跑路线
      • LeetCode--198. 打家劫舍
      • LeetCode--1981. 最小化目标值与所选元素的差
      • LeetCode--199. 二叉树的右视图
      • LeetCode--2. 两数相加
      • LeetCode--20. 有效的括号
      • LeetCode--200. 岛屿数量
      • LeetCode--206. 反转链表
      • LeetCode--207. 课程表
      • LeetCode--208. 实现 Trie (前缀树)
      • LeetCode--209. 长度最小的子数组
      • LeetCode--2090. 半径为 k 的子数组平均值
      • LeetCode--21. 合并两个有序链表,关于链表的复习
      • LeetCode--210. 课程表 II
      • LeetCode--213. 打家劫舍 II
      • LeetCode--2140. 解决智力问题
      • LeetCode--215. 数组中的第K个最大元素
      • LeetCode--22. 括号生成
      • LeetCode--221. 最大正方形
      • LeetCode--2218. 从栈中取出 K 个硬币的最大面值和
      • LeetCode--224. 基本计算器
      • LeetCode--225. 用队列实现栈
      • LeetCode--226. 翻转二叉树
      • LeetCode--2266. 统计打字方案数
      • LeetCode--2267. 检查是否有合法括号字符串路径
      • LeetCode--227. 基本计算器 II
      • LeetCode--2291. 最大股票收益
      • LeetCode--23. 合并 K 个升序链表【堆和分治】
      • LeetCode--230. 二叉搜索树中第 K 小的元素
      • LeetCode--2304. 网格中的最小路径代价
      • LeetCode--232. 用栈实现队列
      • LeetCode--2320. 统计放置房子的方式数
      • LeetCode--2321. 拼接数组的最大分数
      • LeetCode--2328. 网格图中递增路径的数目
      • LeetCode--233. 数字 1 的个数
      • LeetCode--234. 回文链表
      • LeetCode--236. 二叉树的最近公共祖先
      • LeetCode--2369. 检查数组是否存在有效划分
      • LeetCode--2379. 得到 K 个黑块的最少涂色次数
      • LeetCode--239. 滑动窗口最大值,关于单调队列的复习
      • LeetCode--24. 两两交换链表中的节点
      • LeetCode--240. 搜索二维矩阵 II
      • LeetCode--2431. 最大限度地提高购买水果的口味
      • LeetCode--2435. 矩阵中和能被 K 整除的路径
      • LeetCode--2466. 统计构造好字符串的方案数
      • LeetCode--25. K 个一组翻转链表
      • LeetCode--2510. 检查是否有路径经过相同数量的 0 和 1
      • LeetCode--2533. 好二进制字符串的数量
      • LeetCode--256. 粉刷房子
      • LeetCode--2585. 获得分数的方法数
      • LeetCode--26. 删除有序数组中的重复项
      • LeetCode--2606. 找到最大开销的子字符串
      • LeetCode--265. 粉刷房子 II
      • LeetCode--2684. 矩阵中移动的最大次数
      • LeetCode--2787. 将一个数字表示成幂的和的方案数
      • LeetCode--279. 完全平方数【动态规划】
      • LeetCode--283. 移动零
      • LeetCode--2841. 几乎唯一子数组的最大和
      • LeetCode--287. 寻找重复数
      • LeetCode--2915. 和为目标值的最长子序列的长度
      • LeetCode--295. 数据流的中位数
      • LeetCode--297. 二叉树的序列化与反序列化
      • LeetCode--3. 无重复字符的最长子串
      • LeetCode--300. 最长递增子序列【DP+二分】
      • LeetCode--3082. 求出所有子序列的能量和
      • LeetCode--309. 买卖股票的最佳时机含冷冻期
      • LeetCode--31. 下一个排列
      • LeetCode--3180. 执行操作可获得的最大总奖励 I
      • LeetCode--3183. 达到总和的方法数量
      • LeetCode--3186. 施咒的最大总伤害
      • LeetCode--32. 最长有效括号【栈和dp】
      • LeetCode--322. 零钱兑换
      • LeetCode--328. 奇偶链表
      • LeetCode--329. 矩阵中的最长递增路径
      • LeetCode--3290. 最高乘法得分
      • LeetCode--33. 搜索旋转排序数组【直接二分】
      • LeetCode--3316. 从原字符串里进行删除操作的最多次数
      • LeetCode--3363. 最多可收集的水果数目
      • LeetCode--337. 打家劫舍 III
      • LeetCode--3393. 统计异或值为给定值的路径数目
      • LeetCode--34. 在排序数组中查找元素的第一个和最后一个位置
      • LeetCode--3418. 机器人可以获得的最大金币数
      • LeetCode--343. 整数拆分
      • LeetCode--347. 前 K 个高频元素
      • LeetCode--347. 前 K 个高频元素Golang中的堆(containerheap)
      • LeetCode--3489. 零数组变换 IV
      • LeetCode--354. 俄罗斯套娃信封问题
      • LeetCode--3561. 移除相邻字符
      • LeetCode--377. 组合总和 Ⅳ
      • LeetCode--39. 组合总和
      • LeetCode--394. 字符串解码【栈】
      • LeetCode--395. 至少有 K 个重复字符的最长子串
      • LeetCode--4. 寻找两个正序数组的中位数
      • LeetCode--40. 组合总和 II
      • LeetCode--402. 移掉 K 位数字
      • LeetCode--41. 缺失的第一个正数
      • LeetCode--415. 字符串相加
      • LeetCode--416. 分割等和子集_494. 目标和【01背包】
      • LeetCode--42. 接雨水(单调栈和双指针)
      • LeetCode--426. 将二叉搜索树转化为排序的双向链表
      • LeetCode--43. 字符串相乘
      • LeetCode--437. 路径总和 III【前缀和】
      • LeetCode--44. 通配符匹配
      • LeetCode--440. 字典序的第K小数字
      • LeetCode--442. 数组中重复的数据
      • LeetCode--445. 两数相加 II
      • LeetCode--45. 跳跃游戏 II
      • LeetCode--450. 删除二叉搜索树中的节点
      • LeetCode--46. 全排列
      • LeetCode--460. LFU 缓存
      • LeetCode--468. 验证IP地址
      • LeetCode--47. 全排列 II
      • LeetCode--470. 用 Rand7() 实现 Rand10()
      • LeetCode--474. 一和零
      • LeetCode--48. 旋转图像
      • LeetCode--498. 对角线遍历
      • LeetCode--5. 最长回文子串
      • LeetCode--50. Pow(x, n)
      • LeetCode--509. 斐波那契数
      • LeetCode--516. 最长回文子序列
      • LeetCode--518. 零钱兑换 II
      • LeetCode--529. 扫雷游戏题解C++广搜
      • LeetCode--53. 最大子数组和
      • LeetCode--54. 螺旋矩阵
      • LeetCode--540. 有序数组中的单一元素
      • LeetCode--543. 二叉树的直径
      • LeetCode--55. 跳跃游戏
      • LeetCode--556. 下一个更大元素 III
      • LeetCode--56. 合并区间
      • LeetCode--560. 和为 K 的子数组
      • LeetCode--572. 另一棵树的子树
      • 583. 两个字符串的删除操作
      • LeetCode--59. 螺旋矩阵 II
      • LeetCode--61. 旋转链表
      • LeetCode--62. 不同路径
      • LeetCode--622. 设计循环队列
      • LeetCode--63. 不同路径 II
      • LeetCode--64. 最小路径和
      • LeetCode--643. 子数组最大平均数
      • LeetCode--646. 最长数对链
      • LeetCode--662. 二叉树最大宽度
      • LeetCode--673. 最长递增子序列的个数
      • LeetCode--678. 有效的括号字符串
      • LeetCode--679. 24 点游戏
      • LeetCode--69. x 的平方根
      • LeetCode--695. 岛屿的最大面积
      • LeetCode--7. 整数反转
      • LeetCode--70. 爬楼梯
      • LeetCode--704. 二分查找
      • LeetCode--712. 两个字符串的最小ASCII删除和
      • LeetCode--714. 买卖股票的最佳时机含手续费
      • LeetCode--718. 最长重复子数组
      • LeetCode--72. 编辑距离
      • LeetCode--739. 每日温度
      • LeetCode--74. 搜索二维矩阵
      • LeetCode--740. 删除并获得点数
      • LeetCode--746. 使用最小花费爬楼梯
      • LeetCode--75. 颜色分类
      • LeetCode--76. 最小覆盖子串
      • LeetCode--77. 组合
      • LeetCode--78. 子集
      • LeetCode--79. 单词搜索
      • LeetCode--790. 多米诺和托米诺平铺
      • LeetCode--8. 字符串转换整数 (atoi)
      • LeetCode--82. 删除排序链表中的重复元素 II
      • LeetCode--83. 删除排序链表中的重复元素
      • LeetCode--84. 柱状图中最大的矩形【单调栈】
      • LeetCode--85. 最大矩形
      • LeetCode--87. 扰乱字符串
      • LeetCode--879. 盈利计划
      • LeetCode--88. 合并两个有序数组
      • LeetCode--887. 鸡蛋掉落
      • LeetCode--91. 解码方法
      • LeetCode--912. 排序数组
      • LeetCode--918. 环形子数组的最大和
      • LeetCode--92. 反转链表 II
      • LeetCode--93. 复原 IP 地址
      • LeetCode--931. 下降路径最小和
      • LeetCode--94. 二叉树的中序遍历
      • LeetCode--958. 二叉树的完全性检验
      • LeetCode--960. 删列造序 III
      • LeetCode--97. 交错字符串
      • LeetCode--98. 验证二叉搜索树
      • LeetCode--983. 最低票价
      • LeetCode--LCR 140. 训练计划 II
      • NC--311.圆环回原点
      • NC--36进制加法
      • 补充题1. 排序奇升偶降链表
    • Redis
      • Redis基础部分
      • 在用Docker配置Redis哨兵节点的时候出现的错误及其解决
    • SQL学习记录
      • SQL碎片知识
      • 系统
        • MySQL学习笔记1【DQL和DCL】
        • MySQL学习笔记2【函数/约束/多表查询】
        • MySQL学习笔记3【事务】
        • MySQL学习笔记4【存储引擎和索引】
        • MySQL学习笔记5【SQL优化/视图/存储过程/触发器】
        • MySQL学习笔记6【锁】
        • MySQL学习笔记7【InnoDB】
    • x86汇编
      • 学习汇编随手记
    • 微服务相关
      • Nacos与gRPC
      • 【Golangnacos】nacos配置的增删查改,以及服务注册的golang实例及分析
    • 手搓
      • Whalebox(仿Docker)的爆诞
    • 操作系统
      • 操作系统碎片知识
      • MIT6.S081
        • MIT6.S081-lab1
        • MIT6.S081-lab2
        • MIT6.S081-lab3
        • MIT6.S081-lab3前置
        • MIT6.S081-lab4
        • MIT6.S081-lab4前置
        • MIT6.S081-lab5
        • MIT6.S081-lab5前置
        • MIT6.S081-lab7
        • MIT6.S081-lab7前置
        • MIT6.S081-lab8
        • MIT6.S081-lab8前置
        • MIT6.S081-lab9
        • MIT6.S081-环境搭建
    • 消息队列MQ
      • Kafka
    • 算法杂谈
      • 关于二分查找时的边界分类问题
    • 计组笔记
      • 计算机组成原理的学习笔记(1)--概述
      • 计算机组成原理的学习笔记(10)--CPU·其二 组合逻辑控制器和微程序
      • 计算机组成原理的学习笔记(11)--CPU·其三 中断和异常多处理器相关概念
      • 计算机组成原理的学习笔记(12)--总线和IO系统
      • 计算机组成原理的学习笔记(2)--数据的表示和运算·其一
      • 计算机组成原理的学习笔记(3)--数据表示与运算·其二 逻辑门和加减乘
      • 计算机组成原理的学习笔记(4)--数据的表示与运算·其三 补码的乘法以及原码补码的除法
      • 计算机组成原理的学习笔记(4)--数据的表示与运算·其三 补码的乘法以及原码补码的除法
      • 计算机组成原理的学习笔记(6)--存储器·其一 SRAMDRAMROM主存储器的初步认识
      • 计算机组成原理的学习笔记(7)--存储器·其二 容量扩展多模块存储系统外存Cache虚拟存储器
      • 计算机组成原理的学习笔记(8)--指令系统·其一 指令的组成以及数据寻址方式RISK和CISK
      • 计算机组成原理的学习笔记(9)--CPU·其一 CPU的基本概念流水线技术数据通路
    • 计算机网络
      • CS144
        • CS144 - Lab 0
        • CS144 - Lecture 1
        • CS144 - Lecture 1
由 GitBook 提供支持
在本页
  • 数据链路和网络层的传输
  • 应用层浅析
  • 其他
  1. Note
  2. 计算机网络
  3. CS144

CS144 - Lecture 1

上一页CS144 - Lab 0下一页CS144 - Lecture 1

最后更新于1天前

由于没讲义,全看课了,系统性的总结有点难,记一些有趣的东西吧。


数据链路和网络层的传输

我们可以看见,对于发送方,我们的数据链路层为我们的网络层提供服务,在经过路由的时候,我们的路由的网络层会检查数据报的目的地址,然后根据目的地址决定下一跳的链路是怎么走的!直到到达目的地。而我们是如何决定的?我们的内核会维护一个路由表,它存在于内存之中,我们可以通过检索他来实现快速决定下一跳。而这一点,不仅对于主机,对于路由器也是一样的,路由器中实现了网络层和链路层,需要内存去维护路由表,也就是说,路由器甚至也是一个操作系统!

这里问了 gpt 一些子网的问题,如果国家不同,子网也会不同,经过的网关也会不同,数据的传输会经历什么?我们首先需要知道,网关分为很多层,子网也分为很多层,而计算机就是对应的叶子节点,一个网关对应了多个子节点,下面有子网关以及对应了多台计算机,全世界的计算机就相当于构成了一棵树,我们如果子网不同,在转发过程中就需要先转发到网关,如果依旧不在同一子网,就需要再转发到下一级网关,可以想象成 小区->城市->省份->国家 这几层结构。

同时,在看书的时候,我还看见过 ABC 类地址划分,后面又引出了 CIDR 类地址划分,更加灵活,可以按国家,然后国家按地区来分发这些 ip 。

引入另一个概念,局域网。

诸如云服务器,都是暴露在公网上面的,都独占一个公网 ip,所以可以直接访问,而比如学校,家庭,都是在局域网里面,通过网关与外部相连,这种情况下,外部请求没办法直接访问局域网,因为 NAT 就是这样,但是通过 NAT 我们可以直接访问外部,并且可以接受对方的返回信息,这里是通过 NAT 记录了映射实现的,当我们向外网发送请求,NAT 会将内网地址转换成公网地址作为源地址,然后发送出去,并且记录使用的公网的端口以及目的地址和端口,保证可以返回给正确的内网地址。

对于我们开在本地的虚拟机,如果使用 NAT 模式,就是在电脑内部又开了一个虚拟局域网,外部根本没办法访问你,除非你主动访问,所以还是这个没啥好担心的,我之前还怕 ip 直接写在 github 上面会被人攻击,专门去一个一个改。🤣

对于虚拟机另外两个常见的网络模式,桥接模式其实就是将你的虚拟机独立出去,去获取 ip,这样连着同一个 wifi,也就是你的同学也能够访问到你的虚拟机了。另一个仅主机模式,无法与外界通信,但是可以与主机通信,虽然完全隔离了,但是这种情况下没办法拉镜像,甚至 git push 都做不到,所以兼顾安全性和可用性,NAT 应该是最合适的。

另外一点,我们的 wifi 路由器的无线网络扮演了“线”的角色,我们局域网对应的 wifi 路由背后都会有 NAT,来实现与外部的通信,而我们连接 wifi 的时候,对应的 wifi 路由器会为你的主机分配 ip,也就是说,ip 仅仅是一个临时的 ip,并不具有持久性,随时都会变,但是对于局域网,我们并不需要持久的 ip,所以这是合理的,而我们的 wifi 路由器是如何分配的?我们的 wifi 路由器会实现 DCHP 动态主机配置协议,当你的主机没有 ip 的时候,会发送广播,而对应的路由器会为你分配一个临时的 ip 地址,当你断联,切换到另一个网络时,这个 ip 就会收回。而这个 DHCP 就相当于是你需要申请身份证,你有了身份证才可以进行通信。我们甚至可以通过 wireshark 去截取这段请求!!!比如我断开 wifi 再重连一次:

回到我们的终端,输入 ipconfig,我们会发现我们有一段地址和这个 10.20.144.46 一模一样!这表示我们申请到了一个私网 ip!

除此之外,针对于我们的数据链路层在内核中还需要对网卡进行编程,如何做到对硬件编程?其实就是将硬件的一部分数据映射到了内核态的内存之中,通过对这部分特定内存进行读写,就可以实现对硬件进行编程了,诸如键盘,鼠标等设备,都是这样实现的。

说实话,看课之前,我看过《图解 tcp/ip》 和《图解 http》,里面涉及到的概念感觉还是不够清楚,对我来说不是很友好,果然,不愧是斯坦福,引入一些可以让我进一步思考的知识,我带着这些问题去查资料,问 ai,感觉很多东西都清晰起来,而且以前看书的时候感觉这些子网, NAT, DHCP 都挺无聊的,现在感觉还挺有意思的。

应用层浅析

承接上文,对于操作系统而言,传输层,网络层,数据链路层(除了硬件)都处于操作系统的内核部分,而应用层都位于用户态,是我们自己去编写的,常见的,有 http, webrtc, websocket, sse 都是应用层协议,一般的 web 开发库都会实现这些协议,比如 go 语言官方自带的 net/http 包就是实现了 http 协议。

我们的应用层实现的协议都是基于网络层实现的,换而言之,我们应用层实现的协议都会去调用网络层,也就是操作系统提供的系统调用接口 socket 套接字的 API,通过它我们可以基于 tcp 进行编程,也可以去实现一个应用层协议,甚至是————自定义你自己的应用层协议。这就是所谓的网络层为上层提供服务,其实就是调用的关系。

其他

IP 被设计得很简单,他是不可靠,非连接的,但是他也有校验和机制,可以一定程度上进行检查,但是也只能检测 IP 头部,无法检验数据是否完整,但是他仍然会尽最大努力地传输数据。对于完整的数据监测,是传输层的任务了。

我们可以使用 wireshark 去抓包来分析我们 tcp 的三次握手,当然,现在的 wireshark 的界面并不像书里面那样古老,已经相当现代化了,通过设定 tcp.port 和 ip.addr 来抓取我们想要访问的界面的相关的网络请求,这里我们可以看见各种协议对应的报头,当然,对于更详细的访问这个页面会经过那些路由,我们可以在 linux 里面输入 traceroute 命令来实现追溯一个你发送的数据报会经过那些地方,虽然,但是我这里不知道怎么回事,只有一跳就结束了😭。

子网掩码,我看视频到一半,想起来了学长讲过的子网掩码,回去看了一下,发现与我们划分网络有关,单一的子网掩码只是一个 mask,将子网掩码和我们当前被分配的 IP 进行 AND 运算就可以得到我们当前所处的子网,通常来说,我们所处的子网也是一个私网地址,所以,如果你和你的朋友处于不同的局域网内,尽管你们的子网相同,也无法通信。而我们的子网经过更多的层级,最终才会对应一个公网 ip。什么意思?比如说,一个小区申请到了一个 ip 地址,他就具备了"联网"的能力,而它可以给许多儿子也赋予这个能力,它的儿子就又具备了这个能力,换句话说,具备了公网 ip 池的小区(这里只是类比),本质上也是一个 "wifi" 路由,它可以为许多 "wifi" 划分子网段,使得产生了更多的 "wifi" ,就是这样一个树的结构,最终对应到了我们所看见的一个办公室的 wifi,一个家庭里面的 wifi。(虽然现实里面是运营商在真正给你分配,但是这里仅仅是类比)

对于 ARP 他是一个地址解析协议,我们网络中每个数据报需要跳到下一个节点都需要知道底层的物理地址,而我们报文仅仅包含目的地的 ip 地址,怎么办?进行下一跳,我们会从路由表中查询发给谁,从而拿到下一跳的 ip 地址,然后本地还会维护一个缓存,对应了 ip 到物理地址的映射,如果本地不存在我们需要的 ip,我们的这个节点就会向当前网络发送一个广播,问谁是这个 ip?然后对应这个 ip 的节点会返回响应,附带自己的物理地址,然后就可以进行下一跳,当然,如果当前网络这个 ip 不存在咋办?此时会返回 ICMP 不可到达消息。

当我们处于局域网的客户端向处于公网的服务端发送请求之后,服务端理所应当可以接收到请求,但是对于处于局域网的客户端如何返回请求呢?首先,我们的客户端首先会经过路由器,这个路由器会将私网地址映射到对应的公网地址,但是这个公网地址对应着很多私网 ip,所以我们还会分配一个唯一的端口号,并且将这个映射关系记录在 NAT 表里面,这样当我们服务器返回信息的时候,就可以根据这个映射来实现转换了!

QQ_1748236698653
image-20250527201924365