第三章 从网线到网络设备 集线器、交换机、路由器
-
所有的包在传输到目的地的过程中都是独立的, 相互之间没有任何关联
-
网卡中的 PHY( MAU) 模块负责将包转换成电信号, 信号通过 RJ-45 接口进入双绞线 ,然后到达集线器,(但是在传输的过程中信号会衰减,正是因为使用的是双绞线,才能抑制噪声)当信号到达集线器后, 会被广播到整个网络中 (是由集线器的中继模块进行转发的)。由于集线器只是原封不动地将信号广播出去, 所以即便信号受到噪声的干扰发生了失真, 也会原样发送到目的地。 这时, 接收信号的设备, 也就是交换机、 路由器、 服务器等, 会在将信号转换成数字信息后通过 FCSA校验发现错误, 并将出错的包丢弃
3.2 交换机的包进行转发
-
交换机根据地址表进行转发 ,交换机的设计是将网络包原样转发到目的地
-
信号到达网线接口, 并由 PHY( MAU) 模块进行接收, 这一部分和集线器是相同的 ,PHY( MAU) 模块会将网线中的信号转换为通用格式, 然后传递给 MAC 模块。 MAC 模块将信号转换为数字信息, 然后通过包末尾的FCS 校验错误, 如果没有问题则存放到缓冲区中
-
-
将包存入缓冲区后, 接下来需要查询一下这个包的接收方 MAC 地址是否已经在 MAC 地址表中有记录了,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。
-
交换机在转发包的过程中, 还需要对 MAC 地址表的内容进行维护,维护操作分为两种
-
收到包时, 将发送方 MAC 地址以及其输入端口的号码写入MAC 地址表中
-
删除地址表中某条记录的操作, 这是为了防止设备移动时产生问题 ,交换机会自行更新或删除地址表中的记录, 不需要手动维护 A。当地址表的内容出现异常时, 只要重启一下交换机就可以重置地址表, 也不需要手动进行维护
-
-
特殊情况下的操作
-
当交换机发现一个包要发回到原端口时, 就会直接丢弃这个包
-
地址表中找不到指定的 MAC 地址。 这可能是因为具有该地址的设备还没有向交换机发送过包, 或者这个设备一段时间没有工作导致地址被从地址表中删除了。 这种情况下, 交换机无法判断应该把包转发到哪个端口, 只能将包转发到除了源端口之外的所有端口上, 无论该设备连接在哪个端口上都能收到这个包
-
-
全双工模式是交换机特有的工作模式, 它可以同时进行发送和接收操作, 集线器不具备这样的特性
-
交换机可同时执行多个转发操作
3.3 路由器的包转发操作
-
路由器是基于 IP 设计的, 而交换机是基于以太网设计的 。交换机是通过 MAC 头部中的接收 方 MAC 地址来判断转发目标的, 而路由器则是根据 IP 头部中的 IP 地址来判断的 。交换机在地址表中只匹配完全一致的记录, 而路由器则会忽略主机号部分, 只匹配网络号部分
-
路由器包括转发模块和端口模块两部分就可以了。 其中转发模块负责判断包的转发目的地, 端口模块负责包的收发操作
-
工作原理:路由器在转发包时, 首先会通过端口将发过来的包接收进来 ,接下来, 转发模块会根据接收到的包的 IP 头部中记录的接收方 IP 地址, 在路由表中进行查询, 以此判断转发目标。 然后, 转发模块将包转移到转发目标对应的端口, 端口再按照硬件的规则将包发送出去, 也就是转发模块委托端口模块将包发送出去的意思
-
路由器的各个端口都具有 MAC 地址和 IP 地址。 正因为有MAC地址,能够成为以太网的发送方和接收方
-
路由聚合会将几个子网合并成一个子网, 并在路由表中只产生一条记录
-
路由表的子网掩码列只表示在匹配网络包目标地址时需要对比的比特数量。
-
接收包的过程和网卡差不多
-
信号到达网线接口部分, 其中的 PHY( MAU) 模块和 MAC 模块将信号转换为数字信息, 然后通过包末尾的 FCS 进行错误校验, 如果没问题则检查 MAC 头部中的接收方 MAC 地址, 看看是不是发给自己的包,如果是就放到接收缓冲区中, 否则就丢弃这个包。 如果包的接收方 MAC地址不是自己, 说明这个包是发给其他设备的, 如果接收这个包就违反了以太网的规则
-
-
当包到达路由器之后, MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃 。通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的MAC 地址。
-
路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作
-
查询路由表转发目标,如果在路由表中无法找到匹配的记录, 路由器会丢弃这个包, 并通过ICMP 消息告知发送方
-
找不到匹配路由时选择默认路由 ,路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”
-
-
从路由表中查找到转发目标之后, 网络包就会被转交给输出端口, 并最终发送出去, 但在此之前, 路由器还有一些工作要完成
-
更新 IP 头部中的 TTL 字段,TTL 字段表示包的有效期, 包每经过一个路由器的转发, 这个值就会减 1, 当这个值变成 0 时, 就表示超过了有效期, 这个包就会被丢弃 。这个机制是为了防止包在一个地方陷入死循环
-
-
路由器的端口并不只有以太网一种, 也可以支持其他局域网或专线通信技术。 不同的线路和局域网类型各自能传输的最大包长度也不同,一旦转发的包长度超过了输出端口能传输的最大长度, 就无法直接发送这个包了。可以使用 IP 协议中定义的分片功能对包进行拆分, 缩短每个包的长度
-
TCP 拆分数据的操作是在将数据装到包里之前进行的, 换句话说, 拆分好的一个数据块正好装进一个包里。 从 IP 分片的角度来看, 这样一个包其实是一个未拆分的整体, 也就是说, 分片是对一个完整的包再进行拆分的过程。
-
首先, 我们需要知道输出端口的MTUC, 看看这个包能不能不分片直接发送。 最大包长度是由端口类型决定的, 用这个最大长度减掉头部的长度就是 MTU
-
然后在此之前还需要看一下 IP 头部中的标志字段, 确认是否可以分片 ,如果不能分片就直接丢弃,并通过ICMP报告对方,否则就可以进行拆分
-
-
发送前的准备工作完成后就要进行包的发送操作。这一步操作取决于输出端口的类型。 如果是以太网端口, 则按照以太网的规则将包转换为电信号发送出去; 如果是 ADSL 则按照 ADSL 的规则来转换,假如输出类型是以太网,看看发送过程是怎么样的:
-
在包前面加上 MAC 头部, 设置其中的一些字段, 然后将完成的包转换成电信号并发送出去
-
为了判断 MAC 头部中的 MAC 地址应该填写什么值, 我们需要根据路由表的网关列判断对方的地址。 如果网关是一个 IP 地址, 则这个IP 地址就是我们要转发到的目标地址; 如果网关为空 , 则 IP 头部中的接收方 IP 地址就是要转发到的目标地址
-
知道对方的 IP 地址之后, 接下来需要通过 ARP根据 IP 地址查询 MAC 地址, 并将查询的结果作为接收方MAC 地址。 路由器也有 ARP 缓存, 因此首先会在 ARP 缓存中查询, 如果找不到则发送 ARP 查询请求。
-
-
路由器和交换机的关系
-
路由器是基于 IP 设计的, 而交换机是基于以太网设计的, 因此 IP 与以太网的关系也就是路由器与交换机的关系
-
IP( 路由器) 负责将包发送给通信对象这一整体过程, 而其中将包传输到下一个路由器的过程则是由以太网( 交换机) 来负责的
-
3.4 路由器的附加功能
-
路由器的附加功能:地址转换和包过滤
-
地址转换:当公司内网和互联网连接的时候, 将公司内网分成两个部分, 一部分是对互联网开放的服务器, 另一部分是公司内部设备。 其中对互联网开放的部分分配公有地址, 可以和互联网直接进行通信, 这一部分和之前介绍的内容是一样的。 相对地, 内网部分则分配私有地址, 内网中的设备不能和互联网直接收发网络包, 而是通过一种特别的机制进行连接, 这个机制就叫地址转换
-
地址转换的基本原理:在转发网络包时对 IP 头部中的 IP 地址和端口 号 进行改写
-
对端口号改写的原因:如果用公有地址加上端口的组合对应一个私有地址, 一个公有地址就可以对应几万个私有地址, 这种方法提高了公有地址的利用率
-
-
从公司内网访问互联网的包, 即便其发送方私有地址和端口号没有保存在对应表中也是可以正常转发的, 因为用来改写的公有地址就是地址转换设备自身的地址, 而端口号只要随便选一个空闲的端口就可以了,这些都可以由地址转换设备自行判断
-
对于从互联网访问公司内网的包, 如果在对应表中没有记录就无法正常转发。 因为如果对应表中没有记录, 就意味着地址转换设备无法判断公有地址与私有地址之间的对应关系。 可以手动添加这样的记录
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人