3 从网线到网络设备
热身问答
下列说法是正确的(√)还是错误的(×)?
- 我们现在使用的以太网线(双绞线)是由美国的室内电话线发展而来的。
- 路由器比交换机问世时间更早。
- 对于路由器和交换机,如果包在传输过程中发生错误,会直接丢弃错误的包而不会尝试修复。
参考
- √。最早的以太网使用专用同轴网线,后来变成由美国室内电话线改良的版本,原因是它可以兼容电话线的布线工具和材料,比较方便。
- √。交换机比路由器更加简单,因此可能有人以为交换机应该比路由器出现得更早,其实是路由器先问世的。
- √。不过操作系统中的网络控制软件(协议栈)会对丢弃的包进行重发,数据不会因此丢失。
1 信号在网线和集线器中传输
TCP 控制信息也叫 TCP 头部,但从以太网和 IP 传输网络包的角度来看,TCP 头部并不算是“头部”,只能算是“数据”
集线器将信号发送给所有连接在它上面的线路
2 交换机的包转发操作
交换机端口的 MAC 模块不具有 MAC 地址。
交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口
广播地址(broadcast address)是一种特殊的地址,将广播地址设为接收方地址时,包会发送到网络中所有的设备。MAC 地址中的 FF:FF:FF:FF:FF:FF 和 IP 地址中的 255.255.255.255 都是广播地址
交换机的全双工模式可以同时发送和接收信号
3 路由器的包转发操作
路由器包括转发模块和端口模块两部分就可以了。其中转发模块负责判断包的转发目的地,端口模块负责包的收发操作
换句话说,路由器转发模块和端口模块的关系,就相当于协议栈的 IP 模块和网卡之间的关系。因此,大家可以将路由器的转发模块想象成 IP 模块,将端口模块想象成网卡
路由器在转发包时,首先会通过端口将发过来的包接收进来,这一步的工作过程取决于端口对应的通信技术。对于以太网端口来说,就是按照以太网规范进行工作,而无线局域网端口则按照无线局域网的规范工作,总之就是委托端口的硬件将包接收进来。接下来,转发模块会根据接收到的包的 IP 头部中记录的接收方 IP 地址,在路由表中进行查询,以此判断转发目标。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去,也就是转发模块委托端口模块将包发送出去的意思
端口是按照以太网规范接收包的,即当端口的 MAC 地址和包的接收方 MAC 地址一致时,端口才接受这个包,否则就丢弃包
路由器的各个端口都具有 MAC 地址和 IP 地址
交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的,而路由器则是根据 IP 头部中的 IP 地址来判断的
路由器根据“IP 地址”判断转发目标
路由器会忽略主机号,只匹配网络号
路由表的子网掩码列只表示在匹配网络包目标地址时需要对比的比特数量
路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃
完成包接收操作之后,路由器就会丢弃包开头的 MAC 头部。MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。
通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的 MAC 地址
如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMP 消息告知发送方
ICMP:Internet Control Message Protocol,Internet 控制报文协议。当包传输过程中发生错误时,用来发送控制消息
路由器遇到不知道该转发到哪里的包,就会直接丢弃
找不到匹配路由时选择默认路由 路由表中子网掩码为 0.0.0.0 的记录表示“默认路由”
这一行的子网掩码为 0.0.0.0,关键就在这里,子网掩码 0.0.0.0 的意思是网络包接收方 IP 地址和路由表目标地址的匹配中需要匹配的比特数为 0,换句话说,就是根本不需要匹配。只要将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了
只要在这一条记录的网关列中填写接入互联网的路由器地址,当匹配不到其他路由时,网络包就会被转发到互联网接入路由器。因此这条记录被称为默认路由,这一行配置的网关地址被称为默认网关。
最大包长度是由各个通信规格定义的,如果包超过了这个最大长度就不符合相应的规格,也就不能传输了,因此输入端口收到的包不会超过最大长度
如果查询标志字段发现不能分片,那么就只能丢弃这个包,并通过 ICMP 消息通知发送方。否则,就可以按照输出端口 MTU 对数据进行依次拆分了。在分片中,TCP 头部及其后面的部分都是可分片的数据,尽管 TCP 头部不属于用户数据,但从 IP 来看也是 TCP 请求传输的数据的一部分。数据被拆分后,每一份数据前面会加上 IP 头部,其大部分内容都和原本的 IP 头部一模一样,但其中有部分字段需要更新,这些字段用于记录分片相关的信息
路由器判断下一个转发目标的方法如下。
. 如果路由表的网关列内容为 IP 地址,则该地址就是下一个转发目标。
. 如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址就是下一个转发目标
路由器也会使用 ARP 来查询下一个转发目标的 MAC 地址
给包加上 MAC 头部并发送,从本质上说是将 IP 包装进以太网包的数据部分中,委托以太网去传输这些数据。IP 协议本身没有传输包的功能,因此包的实际传输要委托以太网来进行
从包的转发目标也可以看出路由器和交换机之间的委托关系。IP 并不是委托以太网将包传输到最终目的地,而是传输到下一个路由器
IP(路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的
当然,网络并非只有以太网一种,还有无线局域网,以及接入互联网的通信线路,它们和 IP 之间的关系又是什么样的呢?其实只要将以太网替换成无线局域网、互联网线路等通信规格就可以了。也就是说,如果和下一个路由器之间是通过无线局域网连接的,那么就委托无线局域网将包传输过去;如果是通过互联网线路连接的,那么就委托它将包传输过去
IP 本身不负责包的传输,而是委托各种通信技术将包传输到下一个路由器,这样的设计是有重要意义的,即可以根据需要灵活运用各种通信技术,这也是 IP 的最大特点。正是有了这一特点,我们才能够构建出互联网这一规模巨大的网络
IP(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。
4 路由器的附加功能
在内网中可用作私有地址的范围仅限以下这些
- 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地址和端口号进行改写
TCP连接操作的第一个包被转发到互联网时,会像图3.18这样,将发送方IP地址从私有地址改写成公有地址。这里使用的公有地址是地址转换设备A的互联网接入端口的地址。与此同时,端口号也需要进行改写,地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保存在地址转换设备内部的一张表中
客户端一方的端口号本来就是从空闲端口中随机选择的,因此改写了也不会有问题。端口号是一个16比特的数值,总共可以分配出几万个端口,因此如果用公有地址加上端口的组合对应一个私有地址,一个公有地址就可以对应几万个私有地址,这种方法提高了公有地址的利用率
有时候我们希望能够从互联网访问公司内网,这需要进行一些设置才能实现。之所以无法从互联网访问内网,是因为对应表里没有相应的记录,那么我们只要事先手动添加这样的记录就可以了(图3.19)。 一般来说,用于外网访问的服务器可以放在地址转换设备的外面并为它分配一个公有地址,也可以将服务器的私有地址手动添加到地址转换设备中,这样就可以从互联网访问到这台具有私有地址的服务器了
包过滤就是在对包进行转发时,根据MAC头部、IP头部、TCP头部的内容,按照事先设置好的规则决定是转发这个包,还是丢弃这个包。我们通常说的防火墙设备或软件,大多数都是利用这一机制来防止非法入侵的
小测验
- 局域网中使用的双绞线中为什么要将信号线缠绕在一起?
- 将输入的信号广播到所有端口上的设备是交换机还是集线器?
- 用来指定网络号和主机号比特数的值叫什么?
- 将大网络包进行拆分的功能叫什么?
- 路由器的路由表中有时可以看到子网掩码为0.0.0.0的记录,这代表什么意思?
小测验答案
- 为了抑制噪声的影响
- 集线器
- 子网掩码
- 分片
- 默认路由