《网络是怎么样连接的》读书笔记 - 汇总篇(二)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
密钥管理服务KMS,1000个密钥,100个凭据,1个月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 《网络是怎么样连接的》读书笔记 - 汇总篇

《网络是怎么样连接的》读书笔记 - 汇总篇(一)https://developer.aliyun.com/article/1395009


为什么有直连和交叉线?

下面的部分是书中没有介绍的内容,个人存在疑问为什么集线器要弄出MDI/MDI-X 直连和交叉的模式,虽然知道了他的作用,但是不清楚历史由来。

为了详细解释,首先说一下什么是直连线,什么是交叉线。

  • 直连线:网线两端都是按T568A或者T568B排序。
  • 交叉线:一端是按T568A排序,一端是按T568B排序。

这里找了一张网上的图对比两种不同的接线方法在网线上的不同接入方式:

image.png

直连和交叉接线的区别

实际上没有本质区别,只是不同的网线适应不同的场景而已。具体的使用场景可以看上面截图的内容,这里简单举例说明。

直连线用于两种不同的设备之间:

  1. 主机和集线器或者交换机连接。
  2. 路由器交换机和集线器。
  3. 交换机使用的端口不同。

交叉线使用同类型设备,这里只要记住交叉线适用于相同类型的设备。

这里记住一条规则:同种设备用交叉,不同设备用直连。

然而随着技术的发展和迭代现代设备对于网线接口的依赖其实并不是特别强,同种设备使用直连线也是可以兼容的,所以上面的这条规则只能作为一个参考。

交换机信号传输

交换机通常属于OSI模型的第二层(数据链路层),交换机的工作依赖于对MAC地址的识别。

交换机设计是将网络包原样转发到目的地,目的是为了实现远距离的网络包传输而不让数据失真。

因为需要交换数据,交换的接口和 PHY(MAU)模块也是以 MDI-X 模式进行连接的,当网络包进入接口之后首先是把信号翻译为交换机通用格式,接着是使用MAC模块部分对于网络包进行解析,并且使用包末尾的 FCS 校验错误。

交换机看似和网卡的工作类似实际上有着类似的作用,通过查询MAC地址以及端口查找对应的目标地址,然后转发到下一个离目标地点更近的地址。

交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中,而之前章节提到过网卡在生产出来的之后本身就自带唯一的MAC地址并且收发信息都需要核对MAC地址。

显然网卡和交换机还是有不小差别的,因为交换机端口的 MAC 模块不具有 MAC 地址

下面的内容是关于交换机工作较为详细解释,整个工作简而言之:交换机根据 MAC 地址表查找 MAC 地址, 然后将信号发送到相应的端口。

当交换机从其某个端口收到一个数据包时,先读取包头中的源MAC地址(即发送该数据包的设备网卡的MAC地址),将该MAC地址和端口对应起来添加到交换机内存里的地址表中;然后再读取包头中的目的MAC地址,对照内存里的地址表看该MAC地址与哪个端口对应。

如果地址表中有该MAC地址的对应端口,则将该数据包直接复制到对应的端口上,如果没有找到则将该数据帧作为一个广播帧发送到所有的端口,对应的MAC地址设备会自动接收该帧数据,同时交换机将接收该帧数据的端口与这个目的MAC地址对应起来,最后放入内存中的地址表中。

快速理解交换机的特点:具备大部分网卡特性的以太网数据传输设备

这里回顾之前章节介绍的FCS内容。

FCS:检查包传输过程中因噪声导致的波形紊乱、数据错误,它是一串 32 比特的序列,是通过一个公式对包中从头到尾 的所有内容进行计算而得出来的。 具体可以参考网络包的结构示意图。

image.png

交换机内部结构

image.png

MAC地址维护

交换机基本工作是查找核对MAC地址以及维护 MAC地址表的工作,MAC地址的维护主要有下面两个细节:

  1. 发送方 MAC 地址以及其输入端口的号码写入 MAC 地址表中。MAC地址表的数据非常庞大但是端口的数量有限,为了快速的查找和管理,只要某个设备发送过网络包,它的 MAC 地址就会被记录到地址表中,这种结构和缓存类似。
  2. MAC地址表通常是“实时更新”的,目的是为了防止设备移动问题。由于现代移动设备会频繁的切换网络环境和端口状态,交换机为了适应发送方频繁“变更”端口需要及时删除地址表的映射记录。

另外需要补充说明和大多数的缓存特征相同,MAC地址的删除不是实时的,所以有时候数据包可能会发给之前的,但是这种事情通常不需要担心也比较罕见,通常重启交换机并且刷新掉MAC地址和端口映射即可,交换机会自行更新或删除地址表中的记录,不需要手动维护

交换机特殊处理

下面介绍交换机的几种特殊情况。

第一种是如果发现网络包的发送方和目标地址是同一个映射端口,这种情况下目标机器会收到两个重复的包导致无法通信,所以这种网络包交换机收到之后直接丢弃。

另一种情况地址表中找不到指定的 MAC 地址,这种情况可能是目标地址从来没有在互联网中进行过交互,或者是设备长时间不工作地址被交换机删除。

这种情况下交换机会使用广播发给所有的网络设备直到找到应答方,一旦接收到应答就会存储下MAC地址和映射端口,这种设计本身也和以太网最初的设计考虑一致。

最后一种是如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。

全双工协议

全双工协议存在于交换机当中,集线器不具备这样的特点,集线器由于多个信号传入会导致信号碰撞是半双工协议的。

交换机是全双工协议的,所以在传输过程中不管有没有网络包交换机也可以自己进行数据的收发操作。在全双工的模式下信号碰撞不会发生,因此这种模式下也不需要碰撞检测。

全双工协议出现的早期需要人为的手工切换,当然随着技术发展后来出现了工作模式的自动切换。

另外在早期为了保证通信正常,在以太网的架构如果没有信号传输,会默认填充脉冲信号在网络中不断流过,为了兼容新老设备的传输速率, 脉冲信号的传输会使用“木桶效应”的短板自动兼容完成全双工协议的脉冲信号传输。

image.png

最后由于交换机支持全双工的协议,当端口不需要传输数据的时候可以实现多个端口的转发操作,关于交换机的更多内容可以查阅资料了解。

路由器信号传输

数据由交换机发送出来之后,信号会传输到路由器。

路由器是基于 IP 设计的,而交换机是基于以太网设计的,虽然看上去工作是类似的查表判断包应该发往那里,但是由于设计初衷的不同,所以还是存在很大的差别。

路由器的内部结构重点关注转发模块端口模块,其中转发模块负责判断包的转发目的地,端口模块负责包的收发操作,有点类似协议栈的IP模块和网卡之间的关系。

路由器支持多种协议,只要端口模块安装了相关协议就可以支持信号传输,通过不同的端口完成不同协议的工作,路由器的各个端口都具有 MAC 地址和 IP 地址。

以太网端口为例, 路由器的端口具有 MAC 地址 ,因此它就能够成为以太网的发送方和接收方,此外端口还具有 IP 地址,所以它可以充当网卡使用。

image.png

路由表的信息

在路由器中的表信息被叫做路由表,查表判断转发目标的基本思路和交换机是类似的,但是工作方式不太一样。

主要的区别可以从路由表的设计上进行对比,这里需要再次用上子网掩码的相关知识,首先这里可以看到目标地址存储的主机号部分为0,所以这里明显存储的是目标IP的子网。

路由器会忽略主机号,只匹配网络号,只要接收到的IP网络号一致,则可以认为是符合同一个方向传递来的数据。

为了提高路由器中路由表的地址管理效率,有时候目标地址实际子网掩码和子网掩码并不是完全匹配的,这里可以类比DNS对于IP地址的维护。

路由器在维护目标地址和子网掩码的时候,路由聚合会将几个子 网合并成一个子网, 并在路由表中只产生一条记录,比如10.10.1.0/24、10.10.2.0/24、10.10.3.0/24这三个地址虽然不属于同一个子网,但是可以通过 10.10.0.0/16(注意网络号变化为16位)这样的形式类似对于掩码进行二次掩码匹配的操作。

所以路由表的子网掩码列只表示在匹配网络包目标地址时需要对比的比特数量,利用路由聚合可以减少不必要的查表和提高路由效率。

最后是路由表信息的维护工作,主要方式是下面两种:

  • 由人手动维护路由记录 。
  • 根据路由协议机制, 通过路由器之间的信息交换由路由器自行维 护路由表的记录。

image.png

路由器包收发操作

信号传输到接口部分,接口的PHY模块和MAC模块把信号进行转化翻译,末尾同样需要校验FCS。

接着再检查MAC地址,路由器的端口同样都具有 MAC 地址, 只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。其中的接收方 MAC 地址就是路由器端口 的 MAC 地址。

这里比较容易误解的是接收方的地址可能被认为主机的地址,其实是路由器的接收端口的MAC地址,因为网络包是发给路由器的,再由路由器查表发给具体的主机。

路由表查表操作

路由表的查表规则是按照匹配的最长网络号比特殊进行匹配,因为网络号越多证明子网掩码的范围越小子网所覆盖的主机也越少,越有可能找到对应的主机地址。这样的匹配规则也被叫做 最长匹配规则

对于服务器这种通常具备固定公网IP的设备在路由表上会有诸如192.168.1.10/255.255.255.255的表现形式,这样的IP在查找的时候可以按照最长匹规则进行匹配。

注意如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMP消息告知发送方。为什么会直接丢弃包呢?这是因为互联网多设备实在是过于庞大数量过多,查询代价是难以估计的。

默认路由选择

所有的转发操作都要匹配路由表显然是不现实的,所以在路由器中默认配置了0.0.0.0 让任何地址都可以进行匹配到,另外这一行配置也被叫做默认网关

在计算机的 TCP/IP 设置窗口中也有一个填写默认网关的框,表示计算机上 也有一张和路由器一样的路由表,其中默认网关的地址就是我们在设置窗口中填写的地址。

在IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。

  • 在服务器中,0.0.0.0表示是本机上的所有IPV4地址,如果一个主机有两个IP地址,比如192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。
  • 在路由中,0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。

0.0.0.0的主要用途:

  • DHCP分配前表示本机。
  • 用作默认路由表示任意主机。
  • 用作服务端表示本机的任意IPV4地址。
  • 表示目标机器不可用

路由器和交换机的差别

最后我们来看路由器和交换机的差别

  1. 交换机通过MAC头部接收方MAC地址判断转发目标,路由器则通过IP模块判断IP地址来确定转发目标。
  2. 交换机在地址 表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分。

包的有效期

路由器发送网络包之前,还有一些工作要做:更新IP头部的TTL字段,TTL指的是包的有效期,如果这个值为0表示转发,比如发送方在发送包时会将 TTL 设为 64 或 128, 也就是说包经过这么多 路由器后就会“寿终正寝”。这个机制的作用是防止包无限转发而设计的。

分片功能拆分大网络包

这里的分片和TCP拆分数据是不同的,TCP 拆分数据的操作是在将数据装到包里之 前进行的,换句话说拆分好的一个数据块正好装进一个包里。而IP分片是把合成的一个包再一次进行分片的操作。

决定IP模块是否分片主要限制是MTU参数以及输出端口支持的MTU大小,如果输出端口太小就需要按照限制的大小对于包进分片,如果查询标志字段发现不能分片, 那么就只能丢弃这个包, 并通过 ICMP 消息通知发送方。

需要注意分片之后每一份数据前面会加上 IP 头部,大部分情况下添加头部都是相似的,只是=其中有部分字段需要更新,这些字段用于记录分 片相关的信息。

路由器的发送操作

路由器判断下一个转发目标的方法如下:

  • 如果路由表的网关列内容为 IP 地址, 则该地址就是下一个转发目标。
  • 路由器使用 ARP 来查询下一个转发目标的 MAC 地址。
  • 如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址就是下一个转发目标。

这几个步骤详细描述,可以获得下面的过程:

  1. 首先判断MAC地址,取出MAC头部判断路由表的网关,如果网关为空,则 IP 头部中的接收 方 IP 地址就是要转发到的目标地址。
  2. ARP广播协议根据IP找到对方MAC地址,并且存储未接收方MAC地址。
  3. 填写输出端发送方 MAC 地址字段, 这里填写输出端口的 MAC 地址还有一个以太类型字段,填写 0080(十六进制)。
  4. 把网络包转为电信号传输,如果信号碰撞则进行重发,如果非全双工模式则等待线路没有信号进行传输,否则无需确认是否有其他信号直接传输。
  5. 发送的包通过交换机传给下一个路由器,然后路由器根据规则层层转发到达目的地。

整个过程有点类似现代快递的传输,由一个站点找到下一个站点,最后到达目的地址。交换机的作用也非常明显,他和路由器属于分工合作,IP (路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。

路由器在这里是方向盘的角色,而交换机更像是开车的人。

路由器其他功能

IP地址的长度为32个bit,所以很多情况下不同局域网的用户可能有相同的I P。为了解决相同IP在互联网中“共存”问题,需要采用固定地址的分配方式区分内外网。

通常我们把给公司内部使用的网络叫做私有地址,而固定提供对外访问的地址叫做固定地址。公有地址和私有地址的区别是私有地址在访问互联网的时候会进行转化并且只能在内网中进行直接通信,而这个转化机制比较关键,

地址转化

地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号 进行改写。 具体可以看看下面的例子,在对外只能使用一个公有地址的情况下,可以用不同的端口号来区别内网中的 不同终端。

地址转换设备会从地址对应表中通过公有地址和端口号找到 相对应的私有地址和端口号,根据对应表查找私有地址 和公有地址的对应关系之后,再改写地址和端口号之后进行转发。

地址转化从表面上看同样类似委托操作,接收方的通信对象实际上是和地址转化设备完成。

image.png

改写端口号

改写端口号的意义是为了让一个公网地址可以对应更多的私有地址,对于一个大公司来说一个公网地址几万个端口以及是可以支持使用的。

此外如果是内网地址的通信在地址转化设备表中不存在也可以正常通信,因为转发设备本身的地址就是被用来改写的公网地址。

路由器包过滤

最后路由包的过滤,基本是是通过IP模块,MAC模块和TCP模块配合校验一个网络包请求是否合法。

包过滤的意义当然是为了保证网络安全,防止互联网伪造网络包进入内容破坏内网的系统应用。

当网络包通过互联网接入路由器之后,接下来的部分就是ADS L或者FTTH的工作了,这部分内容主要为运营商的内容。

其他内容

集线器(repeater hub) 交换机(switching hub)虽 然名字差不多但内部结构完全不同,路由器早期效率实际上不如交换机,但是如果管路由器叫做hub 显然会让用户认为价钱昂贵并且难以接收,但是如果跟客户说接上网线就可以上网,情况就会变得不一样。

另外交换机的在后来的历史发展中发展出二层交换机,我们在小结中进行展示。从字面理解小型廉价的普及型产品一般叫交换机,大型的高性能产品一般叫二层交换机。

小结

下面是总结集线器、交换机和路由器分别是什么,接着是补充一部分交换机后续发展的内容。

集线器

集线器(即HUB,物理层设备)是一种将多条双绞线或光纤集合连接在同一段物理介质下的设备,通常工作在物理层(即OSI参考模型第一层),用于连接局域网段。

集线器拥有多个端口,当其中一个端口接收到信号后,会将衰减的信号整型放大,然后再将放大的信号广播转发给其他所有端口,以便局域网的所有段都可以看到数据包。在网络中,集线器充当着设备的公共连接点。

在OSI参考模型的底部。常用设备还包括网卡、集线器、中继器、调制解调器、网线、双绞线、同轴电缆。

交换机

交换机是一种用于光/电信号转发的网络设备,通常工作在数据链路层或网络层(即OSI参考模型的第二层和第三层),支持各种数据包协议。目前交换机类型繁多,如局域网交换机、以太网交换机等。

其中局域网交换机主要用于交换式局域网内进行数据交换,而以太网交换机主要用于以太网内进行数据传输。

在网络中交换机是用于局域网段之间过滤和转发数据包的设备。

路由器

路由器是连接Internet中各局域网、广域网的设备,通常位于两个或者多个网络连接的网关处,工作在网络层,用于实现两个局域网或两个广域网或一个局域网和互联网服务提供商之间的网络连接。

在路由器中通常存着一张路由表,它会根据信道的情况自动选择和设定路由,然后以最佳路径发送信号。另外,路由器支持Internet控制报文协议(即ICMP)等类似协议,可帮助IP主机、路由器之间传递控制消息,为任意两台主机之间配置最佳路由。

二层和三层交换机

二层交换机通常用于连接以太网中的网络设备和客户端设备,以识别与转发数据包中的MAC地址。但随着网络应用程序多样性的增加以及融合网络应用的发展,三层交换机的应用在数据中心,复杂的企业网络,商业应用乃至高级客户项目中蓬勃发展。

二层交换机工作于OSI模型的二层(数据链路层),故而称为二层交换机,主要功能包括物理编址、错误校验、帧序列以及流控。而三层交换机位于三层(网络层),是一个具有三层交换功能的设备,即带有三层路由功能的二层交换机,但它是二者的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。

二层和三层交换机的区别

二层和三层交换机之间的主要区别在于是否拥有路由功能。

二层交换机:属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。

三层交换机:就是具有部分路由器功能的交换机,工作在OSI网络标准模型的三层:网络层,目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。此外,三层交换机可以执行静态路由和动态路由

OSI参考模型

虽然OSI模型最初的设想很美好,然而实际上被TCP/IP网络模型替代,但是下面三层的内容基本是没有变化的,在学习了这一章的内容之后,我们对于整个互联网的架构应该有了更深入的了解。

image.png

《网络是怎么样连接的》读书笔记 - 服务器端的局域网中(四)

本章重点

  • 防火墙的地位作用以及现代主流的服务器部署方式。
  • 缓存服务器的作用以及部署方式。
  • 三种代理方式以及区别。
  • 内容分发服务是什么?缓存服务器不同部署方式的影响。

防火墙和网络访问

如果服务器不设置任何防护并且裸奔,很大概率受到网络攻击,现在公司基本都会使用防火墙+服务器的部署方式。还有一种是直接买服务器供应商也就是常见的上云,直接让专业的三方服务器管理进行防护。

image.png

防护网络攻击的手段目前主流的方式有三种,其中被使用最多也最有效的是包过滤

第一种方式为包过滤,包过滤非常简单,因为在网络包的头部包含了网络请求的所有信息,通过接收方 IP 地 址和发送方 IP 地址,我们可以判断出包的起点和终点。因为请求的终点是可以确定的,也就是WEB服务器,所以这之间加入防火墙来隔离异常请求。

第二种方式是使用端口的方式进行限制,防火墙控制某个端口的请求网络是否可以来放行不同IP进入不同端口的权限。

第三种是TCP层面的防护,TCP 在执行连接操作时需要收发 3 个包,第一个包通常使用其他端口,可以判断一定是在 Web 服务器 程序中特别设置过的,因此只要按照服务器的设置来调整防火墙设置即可,通常这个包中 TCP 控制位中 SYN 为 1,而 ACK 为 0。

其他的包中这些值都不同, 因 此只要按照这个规则就能够过滤到 TCP 连接的第一个包。因为WEB服务器发往互联网被阻断了,所以这样就实现了拦截,从反方向来看,第一个包是发往WEB服务器的,返回是从WEB返回的,所以互联网访问WE B是没有问题的。

最后这样就实现了“可进不可出”的效果,根据第三章讨论的地址转换的工作原理,当使用地址转换时,默认状态下是无法从互联网访问公司内网的,因此我们不需要再设置一条包过滤规 则来阻止从互联网访问公司内网。

image.png

image.png

最后需要说明包拦截过滤并不是防火墙特有的功能,而是路由器的包转发功能基础上附加的一种功能。

对于防火墙这种机制是典型的“攘外但是不能安内”的存在,意思是说虽然对外的敌人是拦截的,但是出现了防火墙无法防御的内鬼是解决不了的,所以针对防火墙无法处理的问题,又引申出几种处理方式:

  • 第一种是修复应用程序的BUG,这些BUG通常是技术人员在开发过程中没有考虑到的系统漏洞问题,这种问题是可以通过人为手段快速修复的 。
  • 第二种是用加一层的绝招,对于异常流量进行拦截,比如最为经典的DDos攻击,使用自身的防火墙显然是不行的,必须有外部监控防护服务器进行保护。

负载均衡

单机的负载均衡是没有意义的伪负载均衡,下面讨论的都所有情况都是在多物理或者多主机映射的虚拟机的情况进行介绍。

负载均衡通常会使用缓存服务器,缓存服务器是一台通过代理机制对数据进行缓存的服务器。

缓存服务器位于web服务器和客户端之间具备对于WEB的中转功能,主要工作非常简单就是把WEB服务器返回的数据缓存在磁盘中序列化存储,目的是提高WEB服务器的响应速度。

缓存服务器最大的问题是服务器更新数据之后缓存可能还没同步而看到旧数据,为此缓存提供了缓存最大的保存时间以及用户访问隔离的特性,简单理解就是针对不同的客户端看到的内容是不同的,不过从服务器的角度看与之交互的是缓存服务器。

判断什么时候需要直接返回服务器数据而不是缓存数据,一种简单的方案是检查客户端的网络报文信息变动,并且自己在返回的时候也要告知自己是缓存还是服务器数据。

最后缓存的最大问题是缓存命中率的问题,但是此问题不在本章科普范围之内不做过多介绍。

代理处理

正向代理:正向代理刚刚出现的时候,其目的之一就是缓存,这个目的和服务器 端的缓存服务器相同。当设置了 正向代理时,浏览器会忽略网址栏的内容,直接将所有请求发送给正向代 理。请求消息的内容也会有一些不同。

正向代理是最为简单直观的代理方式,具备有下面的特点:

1、访问内部节点:通常使用跳板作为进入内网的工具。

2、加快访问速度:代理服务器可以缓存内网资源,用户请求已缓存资源时,直接发送给用户,比如国内阿里云的MAVEN仓库。

3、访问控制:代理服务器可以设置访问权限,控制外部主机对内网资源的访问。简单的权限控制防止外部访问内部网络。

一些好用的代理工具:

1.reDuh源码github.com/sensepost/r…

2.reGeorg源码github.com/sensepost/r…

3.tunna 源码 github.com/SECFORCE/Tu…

反向代理

正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

反向代理服务器的作用:

集群式部署实现负载均衡,CDN技术(构建在数据网络上的一种分布式的内容分发网),前端服务器,Nginx(异步框架的网页服务器)等。

1、用户访问web服务时,并不知道访问的是代理服务器,代理服务器就是web服务器。

2、加快访问速度,和正向代理一样可以缓存内网数据。

3、实现负载均衡,降低单个服务器的负担,提高整体资源的利用率。

透明代理

意思是客户端根本不需要知道有代理服务器的存在,它修改你的请求报文,并会传送真实IP。注意加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。对于整个请求来说是无感知的。也因为是无感知的,所以透明代理不能和反向代理兼容。

透明代理的作用:

1、实践例子为当下很多公司使用的行为管理软件。

2、客户端访问web并不知道是通过代理服务器访问的。

3、防火墙设置透明代理,当PC让代理服务器请求web页面时,代理服务器返回页面数据。

内容分发服务

缓存服务器部署在不同的地方,其效果会完全不一样。关于部署的不同方式可以直接看下面的图,这里主要记录第三种部署方式的利弊。

第三种部署方式是和网络运营商签约的方式缓存服务器就近部署(类似CDN),当然这样的开销显然很大,所以在此之上也有中间商插入专门干这些事情,这些运营商被叫做CDSP( Content Delivery Service Provider,内容分发服务运营商)。

这些运营商会和主要的互联网供应商签约,并部署很多台缓存服务器,缓存服务器可以缓存多个网站的数据,因此 CDSP 的缓存服务器就可 以提供给多个 Web 服务器的运营者共享。

image.png

如何让客户端找最近的服务器

答案是是像负载均衡一样用 DNS 服务器来分配访问,对于DNS向Web返回IP的同时返回一些额外的信息。

而对于如何估算出客户端和就近服务器的距离,可以通过把所有的路由放到路由表中,可以通过路由次数的方式判断距离,虽然不一定完全一致,但是可以以较大的精度确定位置。

其他的办法是通过重定向的方式查找最近的缓存服务器,重定向服务器通过收集了来自各个路由器的路由信息,并根据这些信息找到最近 的缓存服务器。

除了收集路由信息,重定向也可以返回一个通过网络包往返时间估算到缓存服务器的距离的脚本, 通过在客户端运行脚本来找到最优的缓存服务器。

缓存更新的影响

缓存更新会影响缓存服务器的效率,所以更新方法非常重要。

比较常见的更新方式是每次原始服务器更新就立刻通知缓存服务器,让其一直保持最新状态,这个功能的执行者就是内容分发服务。

除了编写静态页面之外,还以一种方式是选择不保存页面而是将网页的动态内容和静态内容分离,比如图片服务器、文件服务器等等。

总结

这一章算是比较科普向的一章,其实也算是可看可不看的类型,个人认为重点是代理处理的部分,了解三种代理方式。

而负载均衡的内容则需要深入学习Nginx的相关内容,本章讲述的内容有些太浅了。

总之是轻松加愉快的一章内容。

《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(五)

本章重点

客户端和服务端的区别以及客户端响应的连接过程。

客户端和服务端的区别

服务器的分类和功能种类有很多,但是网络相关的部分, 如网卡、协议栈、Socket 库等功能和客户端却并无二致。

另外我们可以回顾第一章笔记中介绍了关于互联网的历史部分,网络自诞生开始就是为了军事通信,意味着最好是在数据收发层面不需要区分客户端和服务器,而是能够以左右对称的方式自由发送数据。

所以我们常说的客户端和服务端仅仅是从发送者和接受者的角度来区分,如果服务器发送请求到客户端,也可以认为服务器本身是“客户端”。

关于服务端和客户端我们从Socket库调用上查看两者差别:

客户端的数据收发需要 经过下面 4 个阶段。

(1)创建套接字(创建套接字阶段)

(2)用管道连接服务器端的套接字(连接阶段)

(3)收发数据(收发阶段)

(4)断开管道并删除套接字(断开阶段)

服务器是将阶段(2)改成了等待连接

(1)创建套接字(创建套接字阶段)

(2-1)将套接字设置为等待连接状态(等待连接阶段)

(2-2)接受连接(接受连接阶段)

(3)收发数据(收发阶段)

(4)断开管道并删除套接字(断开阶段)

连接过程

下面和第二章介绍客户端连接类似,介绍服务端连接的步骤。

首先调用 bind 将端口号写入套接字中,并且要设置端口,之后协议栈会调用accept连接,注意这时候包可能是没有到来的,如果包没有到来服务端会阻塞等待客户端的请求,一旦接收到连接就会开始响应并且进行连接操作。

接下来协议栈会给等待连接的套接字复制一个副本, 然后将连接对象等控制信息写入新的套接字中,为什么这里要创建副本简单解释一下,因为如果直接使用原有的套接字连接,那么当新的客户端请求过来,就必须要再次创建新的套接字然后再次进行连接。使用复制套接字的方式,原有的套接字依然可以完成等待连接的工作,和新建的套接字副本是没有关联的。

创建套接字除了复制套接字这个特点外,还有一个是端口号的使用,因为一个套接字需要对应一个端口号,但是需要注意新创建的套接字副本必须和原来的等待连接的套接字具有相同的端口号,原因是防止类似客户端本来想要连接 80 端口上的套接字, 结果从另一个端口号返回了包这样的情况。

针对这个问题,服务端的套接字除了确定端口之外,还需要带上IP信息和客户端的端口号信息,最终依靠下面四个变量来确定和哪一个套接字交互。

  • 客户端 IP 地址
  • 客户端端口号
  • 服务器 IP 地址
  • 服务器端口号

image.png

从上面这幅图可以看到,服务端可能会在一个端口上创建副本绑定很多个套接字,但是客户端的端口是完全不同并且随机的,同时IP地址也不一样,所以可以确定套接字之间是不会存在冲突的。

套接字准备完成之后,接着是对于网络包进行FCS 的校验,当 FCS 一致确认数据没有错误时,接下来需要检查 MAC 头部中 的接收方 MAC 地址,看看这个包是不是发给自己的,之后网卡的 MAC 模块将网络包从信号还原为数字信息, 校验 FCS并存入缓冲区。

网卡收到消息之后,接着是执行中断处理机制告知CPU开始进行网卡的数据处理,关于中断处理的内容可以通过的另一本书《Linux是怎么样工作的》了解CPU的中断处理机制了解整个执行过程,之后网卡驱动会根据 MAC 头部判断协议类型,并将包交给相应的协议栈。

为什么还要使用描述符呢?

这里回顾一下描述符的内容,描述符指的是在创建套接字之后,服务端需要返回给客户端一条标识信息,目的是告知客户端自己是谁,协议栈也需要返回描述符用于标识是哪一个套接字在进行传数据。

这里可以简单理解为我们在网络聊天的时候虽然知道对方是谁和自己聊天,但是如果对方没有“开摄像头”告诉你我是本人,很有可能是别人伪装你认识的人在和你聊天。而我们知道对方是本人在和我们聊天也是因为对方的一些“性格”所以了解。

当网络包转交到协议栈时,IP 模块会首先开始工作检查 IP 头部。IP 头部主要是检查规范,检查双方的IP地址,确认包是不是发给自己的,确认包是发给自己的之后,接下来需要检查包有没有被分片,然后检查 IP 头部的协议号字段,并将包转交给相应的模块。

IP模块接收操作小结

协议栈的 IP 模块会检查 IP 头部:

(1)判断是不是发给自己的;

(2)判断网络包是否经过分片;

(3)将包转交给 TCP 模块或 UDP模块。

根据IP头部的协议找到06发现是TCP协议判断之后的内容是TCP模块的包,此时检查控制位 SYN 是否为 1,这也表示这是一个发起连接的包。

TCP 模块会执行接受连接的操作,此时需要同时检查端口是否存在对应的套接字连接,如果没有则会向客户端返回错误通知的包,如果存在则复制套接字的副本,并且双方需要互相交换信息存储在套接字的缓冲区,这时候服务器端的程序应该进入调用 accept 的暂停状态,当新套接字的描述符转交给服务器程序之后,服务器程序就会恢复运行。

接下来是TCP模块处理数据部分,首先是检查收到的包对应哪一个套接字,这里对应之前说的四种信息判断唯一套接字,因为服务端的一个端口可能绑定非常多的客户端端口。

对上套接字之后,TCP 模块会对比该套接字中保存的数据收发状态和收到的包的 TCP 头部中的信息是否匹配,比如检查收到的包序号是否匹配等,如果数据确认无误,将会生成对应的应答头部并且计算ACK号码,然后自己再生成一个序号返回给客户端。

收到的数据块进入接收缓冲区,意味着数据包接收的操作告一段落了,之后传递数据会通过read等待然后直接交给应用程序处理了,最后应用程序根据请求的内容向浏览器返回相应的数据。

TCP 模块操作小结

(1)根据收到的包的发送方 IP 地址、发送方端口号、接收方 IP 地址、接收方端口号找到相对应的套接字;

(2)将数据块拼合起来并保存在接收缓冲区中;

(3)向客户端返回 ACK。

最后是断开操作,断开操作的主要区别在HTTP协议上,HTTP1.0需要服务器发起,而HTTP1.1当中断开由客户端开始。

为什么HTTP1.0和HTTP1.1在断开的时候有如此差别,可以看下面的补充内容,这部分内容来自网络:

http1.0

  • 如果在HTTP请求中携带content-length,此时请求body长度可知,客户端在接收body时就可以依据这个长度来接受数据。接受完毕后,就表示这个请求完毕了。客户端主动调用close进入四次挥手。
  • 反之,如果不带content-length ,则body长度不可知,客户端一直接受数据,直到服务端主动断开。

http1.1

  • 如果HTTP请求中携带content-length,此时body长度可知,则由客户端主动断开。
  • 如果发现HTTP中带Transfer-encoding:chunked body会被分成多个块,每块的开始会标识出当前块的长度,body就不需要通过content-length来指定了,但依然可以知道body的长度,此时客户端主动断开。
  • 如果请求不带不带Transfer-encoding:chunked且不带content-length,客户端接收数据,直到服务端主动断开连接。

也就是说如果能够有办法知道服务器传来的长度,都是客户端首先断开。如果不知道就一直接收数据直到服务端断开。

总结

这一章节的内容更像是对于前面几章内容的查漏补缺,以及对于之前内容做了一整体的简单复习,在后半部分介绍了关于应用程序返回数据的介绍,这部分比较偏向WEB 所以就没有收录到笔记当中了。

整体看下来这本书需要重点学习的是前面的三章内容,后面两章内容更像是理论知识的补充以及对于前面内容的补充。

对于最后一章服务端响应数据的细节建议和客户端结合学习,效果会事半功倍。

《网络是怎么样连接的》读书笔记 - ADSL

image.png

简介

整个互联网的体系架构看起来复杂,实际上基本的工作方式单调而乏味,就是从一个路由器到下一个路由器。

这一部分介绍有关ADSL的接入方式,如果是90后基本都很熟悉以前通过拨号上网的方式接入互联网,对于用户来说是打个电话就可以上网,但是内部的工作流程其实还是比较复杂的。

术语介绍

ADSL: Asymmetric Digital Subscriber Line,不对称数字用户线。它是一种 利用架设在电线杆上的金属电话线来进行高速通信的技术,它的上行方向 (用户到互联网)和下行方向(互联网到用户)的通信速率是不对称的。

传输过程图

ADSL传输可以总结下面的简化图,说实话第一眼看过去确实很复杂,所以接下来的传输部分将会按照步骤进行拆解。

image.png

传输过程

从全局来看,整个过程是用户发出网络包通过用户端的电话局,然后到达网络运营商(ISP,互联网服务提供商),最后通过接通路由器上网。

下面

image.png

接通路由器

第一步是接通路由器,这一步的主要操作是根据包 IP 头部中的接收方 IP 地址在路由表的目标地址中进行匹配,找到相应的路由记录后将包转发到这条路由的目标网关。

整个流程图在书中已经画的十分清晰了,如果无法理解这些设备干啥的,只要模糊理解大概做了什么事情在那个位置即可。

虽然整个工作流程和以太网以及路由器的工作方式类似,但是实际上还是有一些区别的,主要区别是在头部的网络包的头部部分会额外添加一些东西,MAC 头部、PPPoE 头部、PPP 头 部 总共3种头部。

ADSL Modem

完成互联网接入路由器操作之后,接着请求发送给ADSL Modem,这里可以看到数据被拆分为一个个的小格子,这些小格子被称为信元

信元同样包含头部和数据部分,整个拆分过程类似TCP/IP 把数据拆包,拆分完成之后信元需要应用于一种叫做ATM的通信技术完成通信。

ATM采用面向连接的传输方式,将数据分割成固定长度的信元,通过虚连接进行交换。ATM集交换、复用、传输为一体,在复用上采用的是异步时分复用方式,通过信息的首部或标头来区分不同信道。

转化为信元之后ADSL Modem 会把数据转为圆滑波形的信号表示0和1 ,这种技术被称为调制,ADSL Modem为**振幅调制(ASK)相位调制(PSK)**相结合的正交振幅调 制(QAM) A方式。

如果不太清楚这两个是啥也不重要,其实主要是电子信号波的不同处理方式罢了。

  • 振幅调变Amplitude ModulationAM),也可简称为调幅,是在电子通信中使用的一种调变方法,最常用于无线电载波传输信息。
    振幅调变简单的把高振幅为1,低振幅为0,由于调幅是最早期的调变方式,他的优点是容易恢复讯号,但是因为信号终究会随着距离衰减,所以调幅需要控制传输的级别,级别过多容易出错。
  • 相位调制,这是一种根据信号的相位来对应 0 和 1 的方式,Modem 会产生一个一定周期振动的波,一个周期是360度,可以看作是一个完整的圆被划分为两个部分,相位调制和调幅类似,也可以通过变化周期也就是角度来控制频率。

为什么不像互联网一样使用使用方波信号的0和1 表示?

  1. 方波传输容易失真,距离延长错误率会提高。
  2. 方波是宽频频段,如果频率过宽会产生难以控制的噪声

正交振幅调制实际上就是把上面两种调制方式融合在一起,最后就成为了ADSL Modem的调制方式,最后形成下面这张图:

image.png

通过这样灵活的波段方式,ADSL通过给噪声大的波段更少的Bit和噪声小的波段更多的比特进行灵活控制。

分离器

信元数据转为电信号之后是把数据发给分离器,分离器看起来像是出网的时候进行分离,实际上工作是在入网的时候。

因为电信号和电话的信号一起传输给另一端的,如果不分离两种信号那么电话听到的将会全是噪音,十分影响用户体验。

分离器的工作原理非常简单,简单来讲就是屏蔽ADSL所使用的高频信号而已,电话信号将会传到电话机,而ADSL的信号传给另一端的ADSL Modem

从另一个角度来说分离器另一个作用是防止电话信号传到ADSL Modem那边,之所以要这样做是拿起话筒和放下话筒的时候电话信号的传输路径会出现调整,线路状态转变容易导致ADSL通信发生重连的问题。

DSLAM和BAS

信号通过配线盘接收到信号之后毫无疑问是把信号翻译回信元,翻译工作交给 DSLAM 设备完成。

DSLAM 设备相当于多个ADSL Modem捆到一起的设备,获取到信元之后数据进入到BAS包转发设备,BAS这个暂时抽象看作路由器即可,他和DSLAM 具备兼容的ATM 接口,主要的工作是负责把信元翻译成原始包。

这里可能会有疑问为什么不让 DSLAM 自己直接干这件事?这是因为DSLAM为了接受信元就需要做十分大量的工作,如果再让他负责翻译很容易造成职责捆绑过多出现问题,通用面对复杂的互联网更要小心职权划分。

数据进入倒BAS之后,接下来的工作是把原始数据一步步“解套”,比如把头部的MAC和PPPPoe头部丢弃,只保留PPP部分和后面的真实包(IP和数据包),因为他们工作已经完成了。

接下来BAS会找这个包所属的隧道并给这个包打上头部标记送走,隧道的出口就是隧道专用的路由器,送达之后同样是丢弃头部取出最终的IP模块信息。

在这之后就是传统的接入互联网的部分了,不得不说以前上网是非常麻烦的并且价格昂贵,个人小时候也只在亲戚家看过这种拨号上网的方式(自己家里的网络是接其他家路由器蹭的)。

以太网传输PPP消息

ADSL 和 FTTH 接入方式需要为计算机分配公有地址才能上网。

PPP大部分情况其实用到的功能很少,它的主要作用是方便运营商进行快速切换,但是PPP又无法直接用于ADSL和FTTH,所以这里绕弯的方式进行了处理。

由于PPP本身不符合以太网的传输协议,通常需要另一种协议进行适配,这种协议叫做HDLC协议,但是PPP如果使用HDLC协议,又会导致ADSL和FTTH无法接入。

所以要找别的方式对于以太网进行包装,另外需要注意以太网的设计和HDLC协议是不互通的,一番波折之后以太网找到了PPPoE互通。

这一部分理解可能会比较复杂,实际上按照设计模式的理解就是桥接和适配的过程,总之互联网的难题总是可以尝试加一层去解决,这里的方案也是类似的。

通过PPPoE互通之后,ADSL和FTTH就实现了拨号上网的方式。这里需要记住PPPoE 是将 PPP 消息装入以太网包进行传输的方式,换种方式说可以称PPPoe作为以太网上的PPP协议。

补充

HDLC(High-Level Data Link Control,高级数据链路控制),是链路层协议的一项国际标准,用以实现远程用户间资源共享以及信息交互。HDLC协议用以保证传送到下一层的数据在传输过程中能够准确地被接收,也就是差错释放中没有任何损失,并且序列正确。HDLC协议的另一个重要功能是流量控制,即一旦接收端收到数据,便能立即进行传输。

HDLC协议由ISO/IEC13239定义,于2002年修订,2007年再次讨论后定稿。在通信领域中,HDLC协议应用非常广泛,其工作方式可以支持半双工全双工传送,支持点到点、多点结构,支持交换型、非交换型信道。 [1]

PPPoE(英语:Point-to-Point Protocol over Ethernet),以太网上的点对点协议,是将点对点协议(PPP)封装在以太网(Ethernet)框架中的一种网络隧道协议。由于协议中集成PPP协议,所以实现出传统以太网不能提供的身份验证加密以及压缩等功能,也可用于缆线数据机(cable modem)和数位用户线路(DSL)等以以太网协议向用户提供接入服务的协议体系。 本质上,它是一个允许在以太网广播域中的两个以太网接口间建立点对点隧道的协议。

PPPoE的特点

PPPoE具有以下特点:

功能上:

  1. PPPoE由于集成了PPP协议,实现了传统以太网不能提供的身份验证、加密以及压缩等功能。
  2. PPPoE通过唯一的Session ID可以很好的保障用户的安全性。

应用上:

  1. PPPoE拨号上网作为一种最常见的方式让终端设备能够连接ISP从而实现宽带接入。
  2. PPPoE可用于缆线调制解调器(Cable Modem)和数字用户线路(DSL)等以太网线,通过以太网协议向用户提供接入服务的协议体系。

总而言之,PPPoE技术将以太网技术的经济性与PPP协议的可管理控制性结合在一起,提供接入互联网的功能。对于运营商来说,它能够最大限度地利用电信接入网现有的体系结构,利用现有的拨号网络资源,运营和管理的模式也不需要很大的改变;对于用户来说,使用感与原来的拨号上网没有太大区别,较容易接受。

image.png

隧道接通运营商

BAS 除了作为用户认证的窗口之外,还可以使用隧道方式来传输网络包,所谓的隧道就像是TCP的连接一样,数据从一方可以直接发往另一方,在互联网传输则是用户端直接接入到运营商。

实现隧道的方式比较多,比较常见的方式有下面几种:

  • 使用TCP的方式,需要依赖两端的隧道路由器进行TCP连接操作,然后网络包数据传输就变为TCP连接传输数据一样简单。
  • 还有一种常见的方式是把包含头部在内的整个网络包装到另一个包里面,其实说白了还是再包一层。

image.png

接入网的工作流程

ADSL接入网的工作重点包含下面几个部分:

  • 互联网接入路由器通过 PPPoE 的发现机制查询 BAS 的 MAC 地址。
  • BAS 下发的 TCP/IP 参数会被配置到互联网接入路由器的 BAS端的端口上,这样路由器就完成接入互联网的准备了。用户认证和配置下发,这两个重点第一点是保证用户路由器安全连接互联网,另一点是让BAS端可以认识用户,同时需要给路由器分配公网地址和默认网关:
  • CHAP:对于密码进行加密,相对安全。
  • PAP:不加密裸连方式,在ASDL的连接方式中容易被窃取,光纤传输就没这个问题。但是不推荐这样的加密方式
  • 路由器会选择默认路由,按照默认路由的网关地址转发,BAS告诉请求方路由器的这个地址怎么来的,注意这里包转发规则按照 PPPoE 规则转发。
  • BAS 在收到用户路由器发送的网络包之后,会去掉 MAC 头部和PPPoE 头部,然后用隧道机制将包发送给网络运营商的路由器。然后用隧道机制将包发送给网络运营商的路由器

一对一连接

互联网接入过程不一定需要头部,如果可以确定是两个路由器点对点一对一的连接,为了保证公网IP的可用性,BAS可以不分配IP地址链接给路由器,这种方式被叫做无编号。

看起来不分配IP的方式挺玄乎,实际上它只是不使用自己的IP而是“借用”另一端口的IP为自己所用。同时这种连接方式是有限制的。使用无端口的模式限制如下:

  • 接口必须点对点连接
  • 串口两端接出的局域网接口满足下面条件:
  • 相同主网的不同子网掩码必须相同
  • 不同主网缺省掩码

私有地址转公有地址

之前说过路由器和BAS的连接必须要由BAS提供公网IP,但是实际上路由器在转发网络包的时候其实还需要做一步地址转化的操作。

如果把公有地址分配给路由器,那么计算机应用程序发送请求就必须把私有的地址转为公有地址传给BAS,这样BAS才能识别请求。

那么公网地址和IP可以分配给路由器,自然也可以分配给计算机,所以如果使用原始的上网方式不使用路由器上网则计算机直接获得IP。

PPPoA

PPPoA和PPPo E的主要区别在发送网络包的头部处理的时候,**PPPoA ** 不需要添加MAC头部和PPPoE 头部,而是直接把包装入信元当中。但是因为PPPoA 的限制,使得计算机和路由器必须要和ADSL Modem一体,这里就涉及一体化的操作,具体的一体化方式有下面两种:

  • 第一种是ADSL Modem和USB接口连接起来,但是最终没有普及
  • 第二种方式是ADSL Modem 和路由器整合为一台设备,实际上就是PPPoE 直接使用路由器上网。所以第二种方式获得广泛普及。

PPPoA和PPPoE的其他区别体现在MTU的大小上,因为PPPoE多出了PPPoE和PPP头部,这样传输数据的实际网络包的部分就是缩小,而PPPoA就没有这个问题。

但是可以看到无论是PPPoA还是PPPoE,多少都有这样那样的限制,所以有一些运营商使用DHCP的方式通过BAS向用户下发TCP/IP 信息。

DHCP的连接方式非常简单粗暴,不需要PPP繁琐的验证或者添加头部的操作等,所以MTU的不需要额外的头部占用空间。

DHCP是什么?动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP),又称动态主机组态协定,是一个用于IP网络的网络协议,位于OSI模型应用层,使用UDP协议工作,主要有两个用途:

  • 用于内部网或网络服务供应商自动分配IP地址给用户
  • 用于内部网管理员对所有电脑作中央管理

注意这个协议不要和HDCP 弄混了。

注意:PPPoA 不能用于 FTTH,因为 FTTH 不使用 ATM 信元。

网络运营商内部处理

通过FTTH和ADSL接入网之后,用户就与签约的运营商连接上了,这时候互联网的入口被称作POP。那么网络运营商是如何组织的?在国内毫无疑问就是三大家移联电三家三分天下,但是在国外情况不太一样,运营商之间是互相连接并且运营商是非常多的。

POP接入的方式在上面的传输过程图中基本上介绍的差不多了,这里进行总结一下,主要有四种:

  • 专线接入:指的是路由器具备通信线路端口的一般路由器。
  • 拨号连接:使用路由器为RSA,因为需要对用户拨电话进行应答,而RSA刚好有这样的功能。
  • PPPoE接入:身份认证和配置下发需要BAS负责,运营商只做转发包的操作。
  • PPPoA接入:DSLAM 通过 ATM 交换机 B与 ADSL 的运营商的 BAS 相 连, 然后再连接到运营商的路由器。

image.png

但是众多的POP要如何和运营商进行交互呢?这里就需要提到NOC的概念。

NOC: Network Operation Center,网络运行中心。NOC是网络运营商的核心,可以抽象的看作一个非常高性能的支持非常非常多用户连接的高吞吐路由器,可以看作一个超大号的接入网。

在POP接入NOC之后,NOC之间通常也有线路连接,用户的网络请求会转发到距离目的地最近的运营商,找到对应的NOC之后再进行输出。

运营商之间连接

如果接入方和目的地属于相同的网络运营商,那么POP 路由器的路由表中应该有相应的转发目标,直接转发到对应的WEB服务器所在的POP路由器即可。

但是更多情况是跨运营商之间的访问,实际上同样可以通过路由表查到,只不过路由的路径要比同一个运营商要久一些,通过路由的转发,网络包就可以送往地球的任何一个地方。

运营商之间同样需要路由表的交换,互联网内部使用 BGP 机制在运营商之间交换路由信息,路由信息的传输有三种形式,分别是对等,转接和直连,对等是直接的物理连接,但是需要两个运营商之间接一根线,转接需要把全部路由信息给对方。

转接类似使用代理,委托第三方的运营商和对方进行互连,而直连方式就很简单了,就是直接在双方搭一根专线,只有这根线的两端可以互相通信,外部运营商不可借用和看到。

小结

本部分更建议加深对鱼 传输过程图的印象,里面把整个ADSL上网通信流程描绘的非常细致,在细节上有较多的网络硬件的知识,对于个人这种学软件的人来说比较难啃,这里就当留个印象以后有机会深入的时候再学习吧。(当然几乎用不着)

整个ADSL的接入大致内容介绍完成,当然这里讨论的只是整体的部分,深入各个部分的细节内容会越发的复杂,这部分不是个人学习重点不做过多探究,感兴趣的读者可以根据步骤翻阅相关资料深入了解。

《网络是怎么样连接的》读书笔记 - FTTH

简介

FTTH指的是基于光纤的接入网技术,这部分关键是了解光纤如何使用。

FTTH是现代最为流行的接入互联网的方式,虽然不知道未来会如何改变,但是目前来看光纤接入还会流行非常长的一段时间。

FTTH是什么?

光纤到户(英语:Fiber To The Home,缩写:FTTH)是一种光纤通信的传输方法。是直接把光纤接到用户的家中(用户所需的地方)。

这种光纤通信方式及策略与FTTNFTTCHFC(Hybrid Fiber Coaxial)等也不同,它们都是需要依赖传统的金属电线,包括双绞线同轴电缆等,作“最后一哩”的信息传输。

更多资料:FTTH

什么是光纤?

光纤是光导纤维的简写,是一种由玻璃塑料制成的纤维,可作为光传导工具。传输原理是“光的全反射”。和ADSL复杂的多频段电信号不同,光信号非常简单,只需要用暗和亮表示0和1即可,具体的传输方式是通过材料的特性使用高电压发亮光和低电压发暗光,在接收端通过光敏组感应光亮变化来确定产生不同的电压,关于光纤的通信原理可以看下面的图表:

image.png

单模和多模

光纤设计最大的难点也是特点就是让光限制在一定的角度进入,由于反射会产生相位变化,如果相位不一致的光纤汇集就会出现干涉,这个现象和水波类似,如果两道水波之间互相碰撞最终结果是相互抵消。

所以光纤材料中纤芯的材质非常关键,通过光纤的直径可以划分为单模和多模两种,单模的纤芯非常细,入射角度很小的光才能进入,而多模刚好相反,它会比较粗并且入射角度更大的光也可以进入,但是单模和多模的主要区别仅是同一角度有多少相位一致的有多少可以进入。

单模和多模的区别是在传输的失真控制上,由于多模可以进入更多的光线,所以对于材料要求可以稍微低一些,但是信号失真会变强,而单模由于只传到一条光线,需要更昂贵的材料支撑,但是信号失真的概率越小。

最后光纤有一个无法避免的通病,那就是线路越长失真越大,这是任何材料都无法避免的问题。

光纤接入方式

光纤代替ADSL接入互联网的方式别称作ADSL,而接入方式主要为直连和分路的方式接入。

  1. 第一种方式是把用户端接入到最近的电话局,这种接入方式也是从ADSL上进行改良的,只不过把电信号换成了光信号,同时不需要把MAC网络包转为信元直接把以太网的包转为光信号传输即可,另外传输的时候由于是同一条光纤进行传输,为此上行的信号和下行的传输混合会通过棱镜的原理进行划分,简单来说就是是上行和下行信号采用不同波长的光,这样传输的时候即使混合也可以正常传输。
    除了光纤替代了ADSL传输之外,整体的传输过程和ADSL大体类似。

波分复用:在一条光纤中使用不同的波长传输多个光信号。

  1. 第二种方式就是在用户附近的电线杆上安装一个分光器的东西,这种方式是目前我们比较常看到的方式,这种方式通过多个用户接入,用户端不使用光纤收发器而是通过ONU的设备替换,在数据发送到BAS总线,会通过OLT的设备接收。OLT 和 ONU 中具备通过调整信号收发时机来避免碰撞的功能,同时因为是多个用户接入一个分光器,为了防止信号错误传入其它用户泄露隐私,分光器会在不同的接入用户端添加ONU标识,最后转化为对应的以太网信号传输。

image.png

ONU是什么?

ONU就是Optical Network Unit 光网络单元。ONU具有两点作用:对OLT发送的广播进行选择性接收,若需要接收该数据要对OLT进行接收响应;对用户需要发送的以太网数据进行收集和缓存,按照被分配的发送窗口向OLT端发送该缓存数据。

FTTx网络不同的部署ONU接入方式也有所不同,例如 FTTC(Fiber To The Curb):ONU放置在小区的中心机房;FTTB(Fiber To The Building):ONU放置在楼道的接线箱;FTTH(Fiber To The Home):ONU放置在家庭用户中。

光纤历史

最后补补光纤的历史,我们可能误以为光纤是跟随计算机的发展一起发展的,实际上早在电报时代就已经有相关的历史了。

1880年,亚历山大·贝尔Alexander Graham Bell发明了“光话机”。

1887年,英国科学家Charles Vernon Boys在实验室里拉出了第一条光纤。

1938年,美国Owens Illinois Glass公司与日本日东纺绩公司开始生产玻璃长纤维。 1951年,光物理学家Brian O’Brian提出了包层的概念。

1956年,密歇根大学的一位学生制作了第一个玻璃包层光纤,他用一个折射率低的玻璃管熔化到高折射率的玻璃棒上。

1960年,Theodore Maiman 向人们展示了第一台激光器。这燃起了人们对光通信的兴趣,激光看起来是很有前途的通信方式,可以解决传输带宽问题,很多实验室开始了实验。

1966年,英籍华裔学者高锟指出了利用光纤进行信息传输的可能性和技术途径,奠定了现代光通信——光纤通信的基础。

1970 年,美国康宁(Corning)公司就研制成功损耗20dB/km的石英光纤。 1973 年,美国贝尔(Bell)实验室取得了更大成绩,光纤损耗降低到2.5dB/km。 1976 年,日本电报电话(NTT)公司将光纤损耗降低到0.47 dB/km(波长1.2μm)。

可以看到光纤前后是有100年的历史,不像是计算机一样突然的技术爆炸产生的,从整个历史时间轴可以看到高琨实际上是主要核心,在1966年,高锟先生首次提出当玻璃纤维的衰减率低于20dB/km时,光纤通信即可成功。

因为他的这一发现是真正的将理论作用于现实转变的人,他也因为光纤直接拿了诺贝尔奖,对人类社会的发展进程影响深远。

小结

FTTH的接入方式实际上是对ADSL方式到一种改进,主要要点是使用光纤材料替代原本的电话线传输,但是需要注意光纤虽然可以使用光信号进行传输,但是最终依然需要转为电信号才能完成互联网通信。

全书总结

算是很入门的一本书了,配合大量图画和作者的文字基本对整个互联网认知上升一个层次。 如果笔记中存在描述错误或者意义模糊的地方欢迎指出。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
2月前
|
传感器 运维 物联网
蓝牙Mesh网络:连接未来的智能解决方案
蓝牙Mesh网络:连接未来的智能解决方案
273 12
|
21天前
|
物联网 5G 数据中心
|
25天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
25 5
|
1月前
|
安全 网络架构
无线网络:连接未来的无形纽带
【10月更文挑战第13天】
66 8
|
1月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
52 2
|
1月前
|
人工智能 安全 搜索推荐
|
1月前
|
监控 安全 5G
|
1月前
|
安全 5G 网络安全
5G 网络中的认证机制:构建安全连接的基石
5G 网络中的认证机制:构建安全连接的基石
112 0
|
3月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?