电信号从 RJ-45 接口出来,到达集线器,交换机和路由器以及路由器往外转发的过程。在家庭的路由中,交换机和集线器一般集成在一起了或者直接没有集线器。
信号从网卡出来到集线器的时候
-
数据包之间的传输是独立的,仅仅负责传包并不会考虑内部的数据。
-
从网卡到集线器的时候信号就会出现衰减,而且电信号频率越高,损失就越大。
-
双绞线的存在是为了抑制噪声,减少衰减。
网线的周围的电磁波碰到金属等导体会产生电流,而信号本身就是带有电压变化的电流,混在一起容易导致失真。
电磁波有两种来源- 一种是外部的比如电机,荧光灯,CRT显示器等(让线变成螺旋状,使自身的电磁场变成螺旋状);
- 一种是内部线之间出现泄露产生电磁波,称之为串扰。
抑制内部电磁波的方式是 让每一对信号线的扭交间隔产生差异。(正负信号的产生的噪声是相反的刚好抵消)。
-
关于集线器:集线器的原理就是以太网的架构,数据传输的方式是靠着MAC地址寻找。
- 集线器里有一个中继集成器,输入端口的信号转发给除了该端口之外的所有的端口。在这样的情况下如果所有的端口都发送信号,就会产生碰撞。
- 连接其他的端口叫做级联端口或者上行端口
- 根据相同的设备交叉连接,异种设备直连的原理,集线器里每一个端口都有一个 PHY/MAU 模块与其网卡上的模块没有什么区别,所以需要交叉连接。所谓的交叉连接就是发送方和接收方的交叉。
- 集线器中存在
MDI/MDI-X
切换开关。MDI
是直线连接,MDI-X
是交叉连接。但现在的设备无所谓了,可以自适应。
交换机的包转发操作
-
交换机根据地址表进行转发
信号到达端口的时候由 PHY(MAU)来接收,然后传递给MAC模块,转换成数字信息并检验FCS确认无误后放在缓冲区中。
交换机端口本身没有MAC地址,实际过程中通过芯片同时控制多个端口
交换机电路的工作方式:-
信号线排列成网络形状;
-
交叉点存在由电子控制的交换开关;
-
通过开关控制信号的流向。
在半双工的模式下,依旧是先要检测信号有没有别的设备要发送或者接收端要接收信号,与网卡一样当信号碰撞的时候要发一个阻塞信号等待一段时间重新发送。
-
-
MAC 地址表的维护
MAC地址表是由 MAC地址、端口、控制信息组成
维护有两种情况,一种是更新,一种是删除。- 更新,收到来自端口的包时,将发送端的包的MAC地址和对应的端口号更新到MAC地址表中;
- 删除的时候,如果几分钟没有连接就会将其从mac 表中删除。
-
特殊情况
- 交换机查询地址之后发现源端口与目标端口相同,直接丢弃。
- 地址表中找不到 MAC 地址,将所有除了源端口之外的所有端口全部发送一遍,获得响应之后将新的mac地址和端口号同时更新到 MAC 表中。
- 广播包会发送除了该端口之外的所有的端口,(
255.255.255.0
FF:FF:FF:FF:FF:FF
)
-
全双工模式下收发同步进行
在双绞线连接的情况下,发送和接收是独立的,也就是说 交换机的端口,PHY(MAU) 模块,MAC模块的收发都是相互独立的,只要不用集线器就行。 -
自动协商,确定最优的传输效率
所谓的自动协商可以做两件事情:- 全双工与半双工的自动切换;
- 探测对方的传输速率进行切换;
网线端口处的绿灯,是交换机给终端发送脉冲信号,确定当前的 PHY(MAU) 模块正在工作,同时信号将支持的工作模式以及传输的速率告诉对方。
-
交换机可以同时转发多个包。
路由的包转发操作
- 路由是基于 IP 地址的包转发操作,基本上两个模块:
- 包转发模块 – 路由表
- 端口模块 – ADSL、 FTTH 、无线局域网 、以太网等
大致的工作原理
- 数据从端口模块进来,根据各自的通信技术将包收进来,查看IP包头并且跟路由表查询,接着转发模块将包转移到对应的端口,委托端口模块将包发送出去。
路由器的各个端口都有自己的MAC地址和IP地址。所以路由器是以接收方或者发送方的身份转发包的。
以以太网为例,如果 MAC 地址不一样的话,端口会直接丢弃包的。
-
路由表
-
路由表的大体组成:目标地址、子网掩码、网关、接口、跃点数(路由表不是唯一的对应着不同的路由生产商)
-
路由表中的路由地址会忽略主机号,仅匹配网络号,寻找下一个子网,网络号码是通过子网掩码计算的后路由转发到对应的端口并且转发到对应的IP地址。
-
关于子网掩码: 在匹配网络包目标地址时候对比的比特数量。
也就是说,将目标地址和子网掩码的二进制进行与运算得出网络的地址
-
路由表还有两种特殊情况:
- 路由的聚合:一种是将多个子网合成一个子网的时候,子网掩码会发生变化,目标地址也变成了聚合地址;
- 子网划分:将一个子网进行细分并在路由表中注册多条记录。
-
路由表的跃点数,表示离目标地址的远近。
-
路由表的维护与MAC表不同:
- 第一种方式是 手工维护;
-
第二种方式是路由器之间信息交换路由器自行维护,包括RIP、OSPC、BGP 等协议。
而包的转发的操作是相互独立的。
-
-
路由器包的接收操作
- 路由器接收网络包会根据端口类型不同有不同的操作
- 以以太网为例,端口是存在MAC 地址的,所以与计算机网卡过程相似。
- 大体过程:
- 到达接口
- 经过PHY(MAU)
- 经过 MAC模块(将电信号转成数字信号)
- 检验 FCS(查看有没有错误)
- 检查MAC头部的MAC地址
- 如果是就仍在缓冲区里面,如果不是直接丢包。
- 路由器接收网络包会根据端口类型不同有不同的操作
-
查询路由表确定输出端口
-
完成包的收操作之后,就抛弃了MAC头部,然后根据IP头部的目标IP地址在路由表中查找下一个地址。
所以通过路由转发的包,接收方的MAC地址是目标路由的MAC地址,这个部分是经常更新的。
-
在路由表中记录判断的时候:
- 匹配到多条记录的时候,以比特数最长的记录为优先(表明子网中主机数越少);
- 如果网络号也是相同的时候就根据跃点数,先尝试跃点数小的地址;
- 如果都没有找到匹配的记录,那么就直接丢包,并且通过
ICMP
告诉发送方。 - 因为交换机可能就几千台设备,路由器是对应着整个互联网,暴力全发的时候就会造成网络拥塞。
-
-
那么如果找不到匹配的路由的时候怎么解决,
- 设置一个默认的路由
- 子网掩码设置为 0.0.0.0
- 设置一个目标地址和端口
- 这样目标地址根本就不需要匹配。
- 设置一个默认的路由
-
数据包都有有效期
- 路由表在转发包的时候,会更新IP头部的TTL数值,每经过一次路由数值就会减一。
- 当为零的时候就会被丢弃。
- 一般 TTL 在发送方是 64 或者 128 从地球的一侧到另一侧的路由也不过是几十个路由而已。
-
通过分片功能拆分大网络包
-
原因: 路由器端口不仅是以太网端口还有其他的类型比如 ADSL等
所以添加了一些新的头部导致数据过长。
-
通过IP协议定义的分片功能进行拆分。
-
通过计算
MTU
(端口允许传送的最大长度 - 需要添加头部的大小) 进行计算。<其中对于路由来说,TCP头部+数据 整体是数据,只会更新IP头部>
-
什么时候不允许分片:
- 应用程序设置了不允许分片;
- 二这个包是已经经过分片的包。
-
-
路由器的发送操作
-
发送操作取决于端口的类型比如:以太类型或者是 ADSL 类型等。将包转换成电信号发送出去。
-
这里需要更新MAC地址,MAC地址由目标IP地址决定。
在目标IP中,如果路由表存在网关地址,那么MAC转发的地址就是路由表中的地址否则直接是包中的目的地址。
-
根据
ARP
和IP
查找对应的MAC
地址。路由器本身也会有ARP 缓存。如果缓存找不到,便会发出 ARP 请求。其中 ARP 是 发送信息将含有目标IP地址的ARP信息广播到网络上的所有的主机,并且接收返回消息。
-
-
路由器与交换机之间的关系
- 路由器与交换机之间的关系也可以说是 IP 与 以太网之间的关系。
- 对于数据包而言,在发送的时候是将IP包装进以太网的数据部分中,委托以太网进行传递数据。IP本身并没有包传递的功能。
- IP的最终目的是将数据包发送到下一个路由器,所以在创建MAC表的时候是根据路由表查找的IP地址,同时根据IP地址查找的MAC地址,委托以太网传输到下一个目的路由。
- 当然了,除了以太类型之外,还有很多的类型比如ADSL、无线局域网等。所以IP不负责进行包的传输仅仅负责数据的转发。
路由器的附加功能
- 路由器的地址转换(NAT)
出现的原因是如果每一台设备都直接与互联网连接的时候,IP地址马上就会面临用光的现象,那么如何解决呢,比如两个公司内部网络,内部之间可以互通,但两个公司之间不需要直接互通,那就可以使用私有地址。 - 在内网使用了私有地址,但我们仍然需要连接外网,这个怎么操作?
- 那么将公司中某个终端作为服务器配对公有地址直接与互联网相连
- 内网配置私有地址与这个服务器相连,在向外请求数据的时候是通过路由器的地址转换实现的。
- 一般私有地址为:
- 10.0.0.0 ~ 10.255.255.255;
- 172.16.0.0 ~ 172.31.255.255;
- 192.168.0.0 ~ 192.168.255.255
这些私有地址使用的时候是不需要申请的而公有地址使用的时候需要向IP管理局申请的。
- 地址转换的基本原理是 将在转发网络包的IP头部的地址和端口号进行改写。
- 发送方生成包之后到路由器上,地址转换设备将发送方的IP和端口号改成设备的IP和随机空闲的端口号
- 同时将
公有地址:端口号
私有地址:端口号
写进地址和端口号对应表中; - 服务器返回数据包的时候到达地址转换器的时候重新将公有地址和端口号替换为原有的私有地址和端口号
- 数据收发完毕之后断开并且删除表中的记录。
- 两点
- 上面所说的地址转换设备是指的路由,一般有的防火墙也有地址转换的功能。
- 路由器通过使用不同的端口号来区别子网的不同的设备。
- 改写端口号的原因
- 因为如果仅仅是改写IP地址,那么私有IP地址和公有IP地址就得需要一一对应,如果1000个人的公司100多个人同时上网的话,就得需要100个公有地址。
- 如果使用端口号,端口号是
16bit
的,可以有655535
个端口,除去保留的端口之外还有上万个端口对子网来说也绰绰有余了。
- 从互联网访问内网。 内网设备没有在互联网上访问,那么互联网就不能直接访问这个内网的设备,即便是在通讯也仅能是在通讯的端口中发数据包。简称除非主动允许,否则无法从互联网向公司内网发送网络包的。
- 有两种方式:
- 第一种是放在路由的外面,直接配置一个公有地址;
- 第二种是放在私有地址里面并且把服务器的私有地址手动添加到地址转换设备中。(同时需要把公有地址添加到DNS服务器中)
- 也可以先通过私网向互联网访问,建立连接之后,一直维持连接,再由互联网向局域网发送信息。
- 有两种方式:
- 路由器包的过滤功能 就是在包转发的时候,根据MAC头部,IP头部和TCP头部的内容,按照事先的规则决定是转发这个包还是丢弃这个包。