网络是怎样连接的

news/2024/9/19 0:53:20/ 标签: 网络

网络是怎样连接的

    • HTTP
    • DNS
    • 数据通信
    • 协议栈——TCP/IP
    • RJ-45接口
    • 信号衰减
    • 噪声干扰
    • 双绞线
    • MDI接口
    • 集线器
    • 交换机
    • 路由器
    • 接入网
    • ADSL接入网
    • FTTH接入网
    • 用户认证和配置下发
    • DHCP
    • POP
    • Web服务器的部署地点
    • 防火墙

HTTP

HTTP发展史:

  • 1991 – HTTP/0.9
  • 1996 – HTTP/1.0
  • 1997 – HTTP/1.1
  • 2015 – HTTP/2
  • 2022 – HTTP/3

浏览器可以访问多种不同的服务器,比如访问Web服务器时用“http:”(HTTP协议)或“https:”(HTTPS协议),而访问FTP服务器时用“ftp:”(FTP协议)。访问的目标不同,URL的写法也会不同。

在这里插入图片描述

从输入网址到消息送达Web服务器的整个流程:输入网址 -> 浏览器解析网址(确定Web服务器域名、文件名)-> 浏览器根据解析后的网址生成请求消息 -> 浏览器向DNS服务器查询域名对应的IP地址(域名解析)-> 浏览器委托操作系统中的协议栈将请求消息发送给Web服务器

输入网址后,浏览器要做的第一步工作就是对URL进行解析,从而生成发送给Web服务器的请求消息。

在这里插入图片描述

在这里插入图片描述

有几种省略文件名的情况:

  • URL以目录名加“/”结尾,如http://www.lab.glasscom.com/dir/。以“/”结尾代表/dir/后面本来应该有的文件名被省略了,我们会在服务器上事先设置好文件名省略时要访问的默认文件名,这个设置根据服务器不同而不同,大多数情况下是index.html或者default.htm之类的文件名。因此,像前面这样省略文件名时,服务器就会访问/dir/index.html或者/dir/default.htm
  • URL以域名加“/”结尾,如http://www.lab.glasscom.com/。它表示访问一个名叫“/”的根目录,而且由于省略了文件名,所以结果就是访问/index.html或者/default.htm这样的文件了
  • URL以域名结尾,如http://www.lab.glasscom.com。当没有路径名时,就代表访问根目录下事先设置好的默认文件,也就是/index.html或者/default.htm这样的文件
  • URL以一个名称结尾,如http://www.lab.glasscom.com/whatisthis。由于末尾没有“/”,所以不知道这个whatisthis到底是文件名还是目录名。因此,如果Web服务器上存在名为whatisthis的文件,则将whatisthis作为文件名来处理;如果存在名为whatisthis的目录,则将whatisthis作为目录名来处理

HTTP的主要方法如下图所示:

在这里插入图片描述

对URL进行解析之后,浏览器确定了Web服务器域名和文件名,接下来就是根据这些信息来生成HTTP请求消息了。实际上,HTTP消息在格式上是有严格规定的,因此浏览器会按照规定的格式来生成请求消息。

HTTP请求消息:

  • 请求行(方法 URI HTTP版本),写在第一行,通过这一行可以大致了解请求的内容
  • 消息头(字段名: 字段值 …),从第二行开始,每行包含一个头字段,用于表示请求的附加信息
  • 消息体,与消息头之间空一行,包含客户端向服务器发送的数据,比如表单数据

HTTP响应消息:

  • 状态行(HTTP版本 状态码 响应短语),写在第一行,通过这一行可以知道请求是否成功
  • 消息头(字段名: 字段值 …),从第二行开始,每行包含一个头字段,用于表示响应的附加信息
  • 消息体,与消息头之间空一行,包含服务器向客户端发送的数据,比如从文件读取的数据

在这里插入图片描述

在这里插入图片描述

返回响应消息之后,浏览器会将数据提取出来并显示在屏幕上,我们就能够看到网页的样子了。如果网页的内容只有文字,那么就会直接显示所有内容。

当网页中包含图片时,会在网页中的相应位置嵌入表示图片文件的标签的控制信息,浏览器会在显示文字时搜索相应的标签,当遇到图片相关的标签时,会在屏幕上留出用来显示图片的空间,然后再次访问Web服务器,按照标签中指定的文件名向Web服务器请求获取相应的图片并显示在预留的空间中。这个步骤和获取网页文件时一样,只要在URI部分写上图片的文件名并生成和发送请求消息就可以了。

由于每条请求消息中只能写1个URI,所以每次只能获取1个文件,如果需要获取多个文件,必须对每个文件单独发送1条请求。比如1个网页中包含3张图片,那么获取网页加上获取图片,一共需要向Web服务器发送4条请求。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DNS

尽管浏览器能够解析网址并生成HTTP请求消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统(协议栈)来实现。在委托操作系统发送消息时,需要提供目标地址,这个地址不是通信对象的域名(域名只是方便用户记忆和使用),而是它的IP地址。因此,在生成HTTP请求消息之后,下一个步骤就是根据域名查询IP地址。

IP地址:IP地址的长度为32比特,以8比特为一组分成四组(每一组十进制大小为0-255),由网络号和主机号构成。

IP地址可以分成五类:

  • A类,属于大型网络网络号占8位,主机号占24位。第一组以0开头,范围为0-127,其中0为保留地址,127为广播地址,可用范围为1-126
  • B类,属于中型网络网络号占16位,主机号占16位。第一组以10开头,范围为128-191
  • C类,属于小型网络网络号占24位,主机号占8位。第一组以110开头,范围为192-223
  • D类,用于广播,不分网络号和主机号。第一组以1110开头,范围为224-239
  • E类,用于保留,不分网络号和主机号。第一组以1111开头,范围为240-255

子网掩码:子网掩码的长度同样为32比特,格式与IP地址一样。子网掩码为二进制时,左侧的1对应IP地址中的网络位,将IP地址的网络位转换成十进制可得到网络号;右侧的0对应IP地址中的主机位,将IP地址的主机位转换成十进制可得到主机号。子网掩码的作用就是用于确定IP地址中的网络号和主机号。

IP地址的主机位比特全为0,表示整个子网;全为1,表示向子网上所有设备发送包,即广播。

在这里插入图片描述

在具体计算IP地址的网络号时,可用如下方法:

  1. 将IP地址和子网掩码转换成二进制
  2. 将二进制的IP地址和子网掩码进行按位与计算
  3. 将计算结果转换成十进制,即可得到IP地址的网络

在这里插入图片描述

DNS(Domain Name System,域名服务系统)将Web服务器域名和IP地址进行了关联,因此可以通过DNS来查询域名的IP地址。

通过DNS查询IP地址的操作称为域名解析,负责执行解析这一操作的就叫DNS解析器,它实际上是操作系统的Socket库(用于调用网络功能的程序组件集合)中的一段程序。

调用DNS解析器查询IP地址的流程:

  1. 应用程序(Web浏览器)调用解析器(Socket库中的gethostbyname函数)
  2. 在Socket库的解析器中,生成要发送给DNS服务器的查询消息
  3. 委托操作系统向DNS服务器发送查询消息
  4. 操作系统接收DNS服务器返回的响应消息,并将消息传递给Socket库的解析器
  5. Socket库的解析器从响应消息中取出IP地址,存放到应用程序(Web浏览器)指定的内存空间中

在这里插入图片描述

向DNS服务器发送的查询消息包含以下3种信息:

  • 域名:Web服务器、邮件服务器的名称
  • Class:用来标识网络,如今除了互联网没有其他的网络了,因此Class的值永远都是代表互联网的IN
  • 记录类型:类型为A时,表示域名对应的是Web服务器的IP地址;类型为MX时,表示域名对应的是邮件服务器的信息

在这里插入图片描述

一个DNS服务器不可能存放得下所有的IP地址,因此在查询一个设备的IP地址时,经常需要多个DNS服务器的接力合作。

互联网中有数万台DNS服务器,肯定不能一台一台挨个去找,我们可以采用下面的办法。首先,将负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更上一级的DNS服务器中,以此类推。也就是说,负责管理lab.glasscom.com这个域的DNS服务器的IP地址需要注册到glasscom.com域的DNS服务器中,而glasscom.com域的DNS服务器的IP地址又需要注册到com域的DNS服务器中。这样,我们就可以通过上级DNS服务器查询出下级DNS服务器的IP地址,也就可以向下级DNS服务器发送查询请求了。

在互联网中,com、cn这样的域上面还有一级域,称为根域。根域不像com、cn那样有自己的名字,因此在书写域名时经常被省略,如果要明确表示根域,应该像www.lab.glasscom.com.这样在域名的最后再加上一个句点,而这个最后的句点就代表根域。不过一般都不写最后那个句点,因此根域的存在往往被忽略,但根域服务器在现实中是真实存在的,根域的DNS服务器中保管着com、cn等DNS服务器的信息。由于上级DNS服务器保管着所有下级DNS服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的DNS服务器。

实际上,根域DNS服务器的相关信息已经包含在DNS服务器程序的配置文件中了,因此只要安装了DNS服务器程序,这些信息也就被自动配置好了。

IPv4版本中,全世界共有13台根域名服务器,其中1台为主根服务器(美国),其余12台均为辅根服务器(9台在美国,1台在英国,1台在瑞典,1台在日本)。

客户端首先会访问最近的一台DNS服务器(也就是客户端的TCP/IP设置中填写的DNS服务器地址)。假设我们要查询www.lab.glasscom.com这台Web服务器的相关信息,由于最近的DNS服务器中没有存放www.lab.glasscom.com这一域名对应的信息,所以我们需要从顶层开始向下查找。最近的DNS服务器中保存了根域DNS服务器的信息,因此它会将来自客户端的查询消息转发给根域DNS服务器。根域服务器中也没有www.lab.glasscom.com这个域名,但根据域名结构可以判断这个域名属于com域,因此根域DNS服务器会返回它所管理的com域中的DNS服务器的IP地址,意思是“虽然我不知道你要查的那个域名的地址,但你可以去com域问问看”。接下来,最近的DNS服务器又会向com域的DNS服务器发送查询消息。com域中也没有www.lab.glasscom.com这个域名的信息,com域服务器会返回它下面的glasscom.com域的DNS服务器的IP地址,以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标DNS服务器。只要向目标DNS服务器发送查询消息,就能够得到我们需要的答案,也就是www.lab.glasscom.com的IP地址。

在这里插入图片描述

在真实的互联网中,一台DNS服务器可以管理多个域的信息,而不像图中每个域都有一台自己的DNS服务器。此外,有时并不需要从最上级的根域开始查找,因为DNS服务器有一个缓存(可以将使用过的数据存放在离使用该数据的地方较近的高速存储装置中,以便提高后续的访问速度)功能,可以记住之前查询过的域名,如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起,缓存可以减少查询所需的时间。

数据通信

客户端与服务器之间数据通信的过程:

  1. 服务器程序启动后就会创建套接字,等待客户端连接管道
  2. 客户端创建套接字,与服务器套接字连接起来,形成管道
    • 创建套接字指的就是先分配一个内存空间,然后写入初始的控制信息
    • 套接字连接指的就是通信双方(客户端和服务器)交换控制信息,在套接字中记录这些必要信息并准备数据收发;与此同时,分配一个内存空间(缓冲区)用于临时存放要收发的数据
  3. 管道形成后就可以进行数据通信
  4. 通信完成后,断开连接,并删除套接字

管道在连接时是由客户端发起的,但在断开时可以由客户端或服务器任意一方发起。

套接字:套接字是用于控制通信操作的控制信息,如通信对象的IP地址、端口号、通信操作的进行状态等。协议栈(操作系统内部的网络控制软件——TCP、UDP、IP)根据套接字中记录的控制信息来进行下一步的工作。

在协议栈内部有一块用于存放控制信息的内存空间,可以说这些控制信息是套接字,也可以说这块内存空间就是套接字。

具体的通信过程:

  1. 客户端创建套接字的操作非常简单,只要调用Socket库中的socket程序组件就可以了,调用socket之后,控制流程会转移到socket内部并执行创建套接字的操作。套接字创建完成后,协议栈会返回一个描述符,应用程序会将收到的描述符存放在内存中。描述符是用来识别不同的套接字的,可以将描述符理解为一个唯一标识的号码牌,内部人员可以通过这个号码牌知道你是谁
  2. 应用程序通过调用Socket库中的connect程序组件来将客户端创建的套接字与服务器端的套接字连接起来,调用connect时需要指定描述符、服务器IP地址和端口号这三个参数。客户端的描述符可以让客户端的应用程识别客户端的套接字,但不能让服务器端的程序识别客户端的套接字,服务器端的描述符同样如此,因此描述符只能用于内部(客户端内部或服务器端内部)识别套接字。如果想让通信的一方识别另一方的套接字,那就得借助端口号,它能用于外部识别
  3. 应用程序通过调用Socket库中的write程序组件来发送数据,调用write时需要指定描述符和发送数据,协议栈会将数据发送到服务器
  4. 应用程序通过调用Socket库中的read程序组件来接收服务器返回的响应消息,调用read时需要指定描述符和用于存放接收到的响应消息的内存地址,这一内存地址称为接收缓冲区
  5. 收发数据的过程结束后,应用程序需要调用Socket库中的close程序组件来断开连接

在这里插入图片描述

在Windows中可以用netstat命令显示套接字内容。

在这里插入图片描述

协议栈——TCP/IP

通信系统中,真正实现收发数据的是协议栈、网卡驱动和网卡。

在这里插入图片描述

像浏览器、邮件等一般的应用程序都是使用TCP来收发数据的,而像DNS查询等收发较短的控制数据则使用UDP。

控制信息可以分成两大类,一大类是套接字,可以控制协议栈的操作;另一大类是网络包头部(TCP头部、IP头部、MAC头部),可以用于通信双方交换信息。

客户端与服务器通过三次握手来建立TCP连接:

  1. 客户端向服务器发送一个网络包,该网络包头部(TCP头部)控制位的SYN设置为1,告诉服务器请求建立连接;客户端 -> SYN -> 服务器
  2. 服务器收到客户端发送的网络包后,会向客户端发送一个响应包,该包头部(TCP头部)控制位的SYN、ACK都设置为1,告诉客户端可以建立连接;服务器 -> SYN、ACK -> 客户端
  3. 客户端收到服务器响应的包后,会再向服务器发送一个包,该包头部(TCP头部)控制位的ACK设置为1,告诉服务器连接已建立;客户端 -> ACK -> 服务器

三次握手完成后,TCP连接建立,TCP连接的每个包都会设置ACK位。

在这里插入图片描述

在收发数据时,协议栈并不是一收到数据就马上发送出去,而是会先将数据存放在内部的发送缓冲区中,并等待应用程序的下一段数据,等到数据累积到一定程度时,再把这些数据一并发送出去。之所以这么做,是因为应用程序一次将多少数据交给协议栈发送是由应用程序自行决定的,如果数据给的少,那发送的效率就很低了。

协议栈要累积多少数据才进行一次发送呢?这个由几个因素决定:

  • MTU和MSS:MTU表示一个网络包的最大长度,以太网中一般为1500字节;MSS表示除去头部后,一个网络包所能容纳的TCP数据的最大长度;累积的数据长度超过或者接近MSS时再发送出去
  • 时间:协议栈的内部有一个计时器,经过一定时间(按毫秒计算),就会把网络包发送出去

在这里插入图片描述

客户端与服务器通过四次握手来关闭TCP连接,可以由客户端或服务器任意一方发起断开连接操作:

  1. 客户端向服务器发送一个网络包,该网络包头部(TCP头部)控制位的FIN、ACK都设置为1,告诉服务器断开连接;客户端 -> FIN、ACK -> 服务器
  2. 服务器收到客户端发送的网络包后,会向客户端发送一个响应包,该包头部(TCP头部)控制位的ACK设置为1,告诉客户端确认收到该信息;服务器 -> ACK -> 客户端
  3. 服务器向客户端发送一个网络包,该包头部(TCP头部)控制位的FIN、ACK都设置为1,告诉客户端已断开连接;服务器 -> FIN、ACK -> 客户端
  4. 客户端向服务器发送一个响应包,该包头部(TCP头部)控制位的ACK设置为1,告诉服务器已确认断开连接;客户端 -> ACK -> 服务器

网络包的结构:

在这里插入图片描述

在数据通信的过程中,传输层的TCP模块会在数据块的前面加上TCP头部,然后将整个网络包传递给网络层的IP模块,IP模块会在网络包基础上再添加包含服务器IP地址控制信息的IP头部和包含路由器地址控制信息的MAC头部。

在这里插入图片描述

集成在主板上的网络硬件称为网卡。传递给网卡的网络包是由一连串0和1组成的数字信息,网卡会将这些数字信息转换为电信号或光信号,并通过网线(或光纤)发送出去,然后这些信号就会到达集线器、路由器等转发设备,再由转发设备一步一步地送达接收方。

在这里插入图片描述

IP地址实际上并不是分配给计算机的,而是分配给网卡的,如果一台计算机有多个网卡,那么就会有多个IP地址。

路由表:

在这里插入图片描述

MAC头部是以太网使用的头部,有了它才能在以太网中传输网络包。

在这里插入图片描述

ARP协议能够根据IP地址来查询MAC地址,因此我们使用ARP来查询路由器的MAC地址。MAC地址在生产网卡时就写入了ROM内,因此在使用ARP查询MAC地址时直接将这个地址读取出来就可以。路由器等网络设备的网卡是集成在设备内部的。

中继式集线器:又称共享式集线器,仅对信号进行放大中继,信号会发送给以太网中的所有设备。

交换式集线器:简称交换机,能够根据MAC地址将信号传输给指定设备。

数据通信的大致流程:在协议栈的TCP模块中给数据块添加TCP头部(发送方端口号/接收方端口号)形成网络包 -> 在协议栈的IP模块中给网络包添加IP头部(发送方IP地址/接收方IP地址)和MAC头部(发送方MAC地址/接收方MAC地址)-> 网卡驱动从IP模块获取包,并将其复制到网卡内的缓冲区 -> 网卡中的MAC模块将缓冲区的包取出,并在开头加上报头和起始帧分界符(SFD),在末尾加上帧校验序列(FCS)-> MAC模块从报头开始将数字信息转换为电信号 -> PHY(MAU)将电信号转换为可在网线上传输的格式,并通过网线发送出去

在这里插入图片描述

在这里插入图片描述

RJ-45接口

RJ-45接口:

  • RJ-45接口是网卡、集线器、交换机、路由器等设备连接网线的物理接口,是国际通用的标准接口
  • RJ-45接口由插头(网线的水晶头)和插孔(设备上的物理接口)组成
  • RJ-45插头有8根线,这8根线的线序有两种,分别为T568A( 白绿、绿、白橙、蓝、白蓝、橙、白棕、棕)和T568B( 白橙、橙、白绿、蓝、白蓝、绿、白棕、棕)
  • 两种国际标准并没有本质的区别,只是在颜色上稍有区别,一定要保证1、2脚对是一个绕对,3、6脚对是一个绕对,4、5脚对是一个绕对,7、8脚对是一个绕对
  • T568A标准一般适用于交叉连接,即网线的一端按T568A标准,另一端则按T568B标准
  • T568B标准适用于直连和交叉连接,直连指的是网线的两端都按T568B标准;在日常中最常用的就是T568B标准
  • 异种网络设备之间的互连需用直连法,比如计算机 <—> 集线器、计算机 <—> 交换机
  • 同种网络设备之间的互连需用交叉连接法,比如计算机 <—> 计算机、集线器 <—> 集线器、交换机 <—> 交换机

信号衰减

电信号在网线上的传输过程中会出现信号衰减,这是由于电流的变化会产生电磁波,而产生的电磁波会被吸收和散射进而导致能量损失。信号衰减会让方形的信号波形逐渐变的圆润(拐角变圆)。影响信号衰减主要有以下几个因素:

  • 传输距离。信号的传输距离越长,损失的能量就越多,衰减的程度就越高
  • 高频信号。电压的剧烈变化会产生高频信号,高频信号会产生更多的电磁波,从而导致更多的能量损失;因此电信号的频率越高,能量的损失就越大

在这里插入图片描述

噪声干扰

电信号在传输过程中不仅会出现信号衰减,还会受到噪声干扰,从而加剧波形的失真。噪声的产生主要是因为网线周围存在的电磁波,当电磁波接触到金属等导体时,便会在其中产生电流,从而影响导体内原本的电流。影响网线的电磁波可以分为两种,因此产生的噪声也可以分为两种:

  • 由电机、荧光灯、CRT显示器等设备泄露出来的电磁波。这种电磁波来自网线之外的其他设备,因此产生的噪声叫做外源性噪声
  • 从网线中相邻的信号线泄露出来的电磁波。这种电磁波来自网线之内,因此产生的噪声叫做内源性噪声,也称为串扰

双绞线

局域网网线使用的是双绞线,顾名思义,就是将两根信号线扭绞在一起,像拧麻花一样。为何要这样设计呢?因为双绞线可以抑制噪声的影响。原因如下:

  • 信号线是金属制成的,当电磁波接触到信号线时,会沿电磁波传播的右旋方向产生电流,这是一种噪声电流,会导致波形失真。如果我们将信号线缠绕在一起,信号线就变成了螺旋形,两根信号线产生的噪声电流方向就会相反,从而使得噪声电流相互抵消,噪声就得到了抑制,这种被抑制的噪声属于外源性噪声;最重要的是螺旋形的信号线并不会影响原本的信号传输
  • 内源性噪声的强度并不高,但由于噪声源(相邻信号线产生的电磁波)太近,尽管信号线产生的电磁波十分微弱,也依然能够在相邻的信号线中产生感应电流。我们可以通过改变双绞线的扭绞间隔(节距)来抑制内源性噪声。具体来说,在一根网线中,每一对信号线的扭绞间隔(节距)都有一定的差异,这使得在某些地方正信号线距离近,某些地方则是负信号线距离近,由于正负信号线产生的噪声影响是相反的,所以两者就会相互抵消。从网线整体来看,正负的分布保持平衡,自然就会削弱噪声的影响

总结:通过两根信号线的缠绕来抵消外源性噪声,通过改变双绞线的节距来抑制内源性噪声。

在这里插入图片描述

双绞线的种类:

在这里插入图片描述

MDI接口

MDI与MDI-X:

  • MDI(Medium Dependent Interface)叫做介质相关接口,它是物理介质的物理接口,有了该接口,就可以实现一个物理接口与一个物理介质之间的数据传输;比如集线器中的RJ-45接口与信号收发模块(PHY/MAU,物理介质)进行直连,用到的就是信号收发模块的MDI接口
  • MDI-X是交叉模式介质相关接口,用于交叉连接
  • MDI与MDI-X用于双绞线以太网中的网络设备, 较新的网络接口上已具备自动MDI-X端口,该端口能检测连接是否需要交叉,并自动选择MDI或MDI-X配置以正确匹配与另一端的链路

集线器

从计算机发送出来的网络包会通过集线器进行转发,即集线器的主要功能就是转发信号。集线器使用的是以太网的基本架构,因此当信号到达集线器后,会被广播到整个网络中,也就是会将网络包发送到所有连接了集线器的设备,这些设备会根据接收方MAC地址来判断要不要接收该包。

信号在集线器中传输的流程:

  1. 信号经过网线到达集线器,从RJ-45接口进入集线器
  2. 每个接口后面装有PHY(MAU)信号收发模块,该模块有MDI-X接口,信号从RJ-45接口传输到MDI-X接口进入PHY(MAU)模块中
  3. 信号从PHY(MAU)模块中出来后,会进入中继电路,该电路的功能就是将信号输出到除输入端口之外的所有端口上
  4. 信号从所有端口流出,到达连接在集线器上的所有设备,这些设备在收到信号后会通过MAC头部中的接收方MAC地址判断该网络包是不是发送给自己的,如果是就接收,否则忽略

在这里插入图片描述

集线器更多的是将信号原封不动地转发出去,即使信号因受到噪声干扰发生失真,也会原样转发出去。

交换机

交换机与集线器(现在已经基本不使用集线器了)一样,主要就是将信号原样转发出去。

交换机的接口后面跟着一个PHY(MAU)模块和一个MAC模块。网线接口和后面的电路部分(PHY、MAC)加在一起称为一个端口。也就是说,交换机的一个端口就相当于计算机上的一块网卡。需要注意的一点是,网卡本身具有MAC地址,而交换机的端口并不具有MAC地址,因此交换机不会核对接收方MAC地址,而是直接接收所有的包,并将它们放入缓冲区。

从工作原理上看,交换机的端口和网卡很像,有RJ-45接口、PHY(MAU)模块和MAC模块。但实际上,并不是每一个端口后面都会有一个PHY(MAU)模块和一个MAC模块,一般都是通过一个控制芯片来同时控制多个端口。

交换机的内部有一张MAC地址表,该表记录了设备的MAC地址与网线端口的对应关系。当交换机接收到网络包时,会将相应的发送方MAC地址(即将包发送过来的设备的MAC地址)和输入端口号写入表中,表明将包发送过来的设备是和这个端口号连接的,这样的话如果下次需要将一个网络包从交换机转发到该设备就知道该从哪个端口转发出去了。

信号在交换机中传输的流程:

  1. 信号经过网线到达交换机,从RJ-45接口进入交换机
  2. 接口后面装有PHY(MAU)信号收发模块,信号从RJ-45接口传输到MDI-X接口进入PHY(MAU)模块中;在该模块中,信号会从网线上传输的专门格式转换成通用格式的电信号
  3. 信号从PHY(MAU)模块中出来后,会传递给MAC模块;该模块会将电信号转换为数字信息
  4. 而后通过网络包末尾的FCS进行错误校验,如果没有问题就会将包放入缓冲区(一块内存空间)
  5. 查询包的接收方MAC地址是否已记录在MAC地址表中;MAC地址表主要记录了设备的MAC地址和设备连接在交换机的哪个端口上
  6. 通过交换电路将包发送到相应的端口上,进而转发到下一个设备

在这里插入图片描述

MAC地址表的维护(即表中信息的更新)有两种方式:

  • 增加记录。交换机每次收到包时,都会将发送方MAC地址及其输入端口号写入MAC地址表;因此只要某个设备发送过网络包,它的MAC地址就会被记录到地址表中
  • 删除记录。交换机会将MAC地址表中一段时间不使用的过时记录删除,这个时间一般为几分钟

总之,交换机会自行更新或删除MAC地址表中的记录,不需要手动维护。当地址表中的内容出现异常时,只需要重启一下交换机就可以重置地址表。

交换机中有几种特殊情况:

  • 当交换机查询MAC地址表后,发现记录中的目标端口和这个包的输入端口是同一个端口,也就是网络包从交换机的一个端口输入,又从该端口输出。那么在这种情况下,交换机会直接丢弃这个包
  • 交换机无法从MAC地址表中找到网络包的MAC头部中指定的MAC地址,可能是因为具有该MAC地址的设备还没有向交换机发送过包,因此没有记录,也可能是因为这个设备一段时间没有工作,导致MAC地址表中的记录被删除。这种情况下,交换机无法判断应该把包发送到哪个端口,因此只能将包转发到除了输入端口外的所有端口上,最后由连接这些端口的设备去判断是否接收该包
  • 如果传输到交换机的网络包的接收方MAC地址是一个广播地址(MAC地址中的FF:FF:FF:FF:FF:FF和IP地址中的255.255.255.255都是广播地址),那么交换机会将该包发送给除输入端口外的所有端口

交换机与集线器的区别:

  • 集线器会将接收到的包广播给除输入端口外的所有端口;交换机可以将包发送给指定的端口,因此交换机可以同时转发多个包,在不知道端口的情况下交换机会将包广播给除输入端口外的所有端口
  • 集线器的工作模式为半双工,即可以发送信号,也可以接收信号,但同一时间内只能发送信号或接收信号。为了防止信号混杂,集线器内部还会进行碰撞检测;交换机的工作模式为全双工,可以同时发送和接收信号,而且不需要进行碰撞检测;当然,现在的交换机可以自动选择全双工或半双工,以便采取最优方式进行信号传输

路由器

路由器可以分为转发模块和端口模块。转发模块负责判断包的转发目的地,即应该将包转发到哪个端口;端口模块则负责包的收发工作。

在这里插入图片描述

计算机的网卡除了以太网和无线局域网之外,很少见到支持其他通信技术的品种,虽然从原理上来说,计算机只要安装相应的适配器,就可以支持各种通信技术,但在现实中,除了局域网之外几乎没有其他需求。而路由器的端口模块则支持除局域网之外的多种通信技术,如ADSL、FTTH,以及各种宽带专线等,只要端口模块安装了支持这些技术的硬件即可。

路由器中存在一个路由表,该表的最左侧是目标地址列,这一列记录的是接收方的IP地址(这里的IP地址只记录网络号,主机号部分为0)。路由器会将接收到的包的接收方IP地址与路由表中的目标地址进行比较(只匹配网络号),找到相应的记录。目标地址列的右侧是子网掩码列,这一列只是用来在匹配目标地址时告诉路由器应该匹配多少个比特(网络号的比特数)。

在这里插入图片描述

有时IP地址本身的子网掩码与路由表中记录的子网掩码是不一致的,这是路由聚合的结果。路由聚合会将多个子网合并成一个子网,并在路由表中只产生一条记录,该记录中的目标地址列和子网掩码列也会记录合并后的地址。

举个例子,假设现在有3个子网,分别为10.10.1.0/24、10.10.2.0/24、10.10.3.0/24,路由器B需要将包发往这3个子网。在这种情况下,路由器B的路由表中原本应该有对应这3个子网的3条记录,但在这个例子中,无论发往任何一个子网,都是通过路由器A来进行转发,因此我们可以在路由表中将这3个子网合并成10.10.0.0/16,这样也可以正确地进行转发,但我们减少了路由表中的记录数量,这就是路由聚合。

在这里插入图片描述

路由器在转发包时,会根据端口对应的通信技术将包接收进来或转发出去。对于以太网端口来说,路由器会按照以太网规范来进行工作;对于无线局域网端口来说,则会按照无线局域网规范进行工作。总之,转发模块会委托端口的硬件(物理接口)将包接收或转发。

信号在路由器中传输的流程,这里以以太网端口为例:

  1. 信号经过网线到达路由器端口,从RJ-45接口进入,端口的PHY(MAU)模块将网线上传输的专门格式转换为通用格式的电信号,MAC模块将电信号转换为数字信息,然后通过包末尾的FCS进行错误校验
  2. 如果网络包没问题,就检查MAC头部中的接收方MAC地址是否与本端口的MAC地址一致,如果一致就将包放入缓冲区,否则丢弃;端口是按照以太网规范的,因此会核验端口的MAC地址与包的接收方MAC地址是否一致,若一致则接收
  3. 接收到包后,MAC头部就会被丢弃。转发模块会根据接收到的包的IP头部中记录的接收方IP地址,在路由表中进行查询,找到对应端口。判断转发目标也分几步:
    1. 根据子网掩码列中的值计算出IP地址网络号的比特数,然后看目标地址列中的IP地址网络号是否与包的接收方IP地址相匹配,如果匹配,该条记录就是候选转发目标之一
    2. 可能会匹配到多条候选记录,根据最长匹配原则,路由器会在候选记录中寻找网络号比特数最长的一条记录,如果找到了这么一条,那么就按这条记录的内容进行转发
    3. 有时依据最长匹配原则会找到多条网络号比特数相同的记录,这个时候会再根据跃点数的值来进行选择,跃点数小的说明该路由更近,因此会选择跃点数更小的记录
    4. 如果在路由表中无法找到匹配的记录,则路由器会直接丢弃这个包,并通过ICMP协议将消息告诉发送方
    5. 一般不会出现找不到匹配的记录,因为在路由表中会设置这么一条记录,该记录中的子网掩码为0.0.0.0,即需要匹配的网络号比特数为0,也就是说任何IP地址都能匹配到这一条记录。只要在该条记录的网关列中填写接入互联网的路由器地址,当匹配不到其他路由时,网络包就会被转发到互联网接入路由器。因此这条记录被称为默认路由,这一行配置的网关地址被称为默认网关
  4. 更新包的IP头部中的TTL(Time to Live,生存时间)字段,该字段表示包的有效期。包每经过一个路由器的转发,这个值就会减1,当这个值变成0时,就表示超过了有效期,这个包就会被丢弃。这个机制是为了防止包在一个地方陷入死循环。发送方在发送包时会将TTL设为64或128
  5. 如果需要分片的话,会将包进行拆分
  6. 转发模块将包发送到对应端口,端口再按照硬件的规则将包发送出去

一个路由器上的端口并不只有以太网一种,不同通信技术所能传输的最大包长度也不同,因此输出端口的最大包长度可能会小于输入端口。一旦转发的包长度超过了输出端口能传输的最大长度,就需要使用IP协议中定义的分片功能对包进行拆分。不过在分片之前,需要看一下IP头部中的标志字段,确认是否可以分片(有两种情况不能分片:1、发送方应用程序设置了不允许分片;2、这个包已经是分过片的了),如果查询标志字段发现不能分片,那么就只能丢弃这个包,并通过ICMP协议将消息告诉发送方。从IP协议的角度来看,TCP头部虽然不是用户数据,但它也属于数据的一部分,因此会参与分片。

在这里插入图片描述

路由器与交换机的区别:

  • 交换机是基于以太网设计的,工作在数据链路层;路由器是基于IP设计的,工作在网络
  • 交换机的端口没有MAC地址,更没有IP地址,它通过MAC地址表中MAC地址与端口的对应关系来进行包的转发,因此它只能作为转发者;路由器的端口不仅具有MAC地址(与网卡类似,在生产时就写入了端口的ROM中),还具有IP地址,在以太网中,路由器的端口可以充当接收者和发送者(因为具有MAC地址)
  • 交换机中有MAC地址表,它通过MAC头部中的接收方MAC地址来判断包的转发目的地;路由器中有路由表,它根据IP头部中的接收方IP地址来判断包的转发目的地
  • 交换机中对MAC地址表的维护是包转发操作中的一个步骤;路由器中对路由表的维护与包转发操作是相互独立的。对路由表进行维护的方式有以下两种:
    • 手动维护
    • 根据路由协议(RIP、OSPC、BGP等)机制,通过路由器之间的信息交换由路由器自行维护
  • 交换机如果没有找到匹配的记录,会将包广播到除输入端口外的所有端口;路由器如果没有找到匹配的记录,会直接丢弃这个包。因为路由器连接的网络规模比交换机大得多,如果将包发送到整个网络上,那就会产生大量的网络包,很容易造成网络拥塞

路由器的附加功能 —— 地址转换:

  • 如果让所有设备都直接连到互联网,那么地址管理机构就需要向每一个设备都分配一个固定的IP地址,这样的分配方式是不可持续的。因为一旦固定地址用完,新的设备就无法接入互联网了
  • 为了解决这个问题,可以将网络分成内网和外网。外网一般指的就是公网,比如互联网,覆盖范围极大,连接互联网的设备可以访问互联网上的所有内容;内网通常是一个局域网,在地理范围和站点数目上都有限制,一般不直接连到互联网,因此没办法直接访问互联网
  • 内网与内网之间可以看作是相互独立的(实际并不完全独立),它们不会互相通信(实际会通过互联网进行通信),因此只需要给内网中连接互联网的部分分配固定IP地址,而内网中的其他设备按一定规则随机动态分配地址即可,这样的分配方式可以大幅节省固定IP地址
  • 地址管理机构规定了某些地址用于内网,这些地址叫做私有地址,而原来的固定地址则叫做公有地址。私有地址其实就是将公有地址中没分配的一部分拿出来,规定它们只能在内网中使用而已
  • 内网中的私有地址不需要申请,任何设备都可以自由使用。不同内网中的设备可以使用相同的私有地址,因为它们之间不通信,因此并不会有什么影响,但是同一内网中的设备不能出现重复的地址,否则无法正常传输网络
  • 公司内网可以分成两个部分:一部分是对互联网开放的服务器,可以直接访问互联网,分配固定IP地址;另一部分是分配私有地址的公司内部设备,没法直接访问互联网。如果想让公司内网中的设备访问互联网,就需要进行地址转换,具备地址转换功能的设备也叫做地址转换设备,比如路由器、防火墙等
  • 地址转换的基本原理就是在转发网络包时对IP头部中的IP地址和TCP/UDP端口号进行改写。具体来说,就是在TCP连接操作的第一个包被转发到互联网时,地址转换设备(路由器)会将发送方IP地址从私有地址改写成路由器的互联网接入端口的地址(这个地址是公有地址),同时地址转换设备(路由器)会随机选择一个空闲的端口(不是物理端口,只是一个编号)作为公有地址对应的端口,这样就完成了地址转换。改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一条记录保存在地址转换设备(路由器)内部的一张表中。后面互联网将包发送到公司内网时会根据这张表来查询对应的私有地址和端口号
  • 在对外只能使用一个公有地址(互联网接入端口的地址)的情况下,可以用不同的TCP/UDP端口号来区别内网中的不同终端。这样即使内网中有多台设备访问互联网,也只需要少量公有地址。早期的地址转换机制只改写地址,不改写端口号,这样会导致内网中有多少台设备要访问互联网就得有多少个公有地址。而改写端口号就可以很好地解决这一问题,TCP/IP协议中的端口号(不是物理端口,只是一个编号,对应套接字)是一个16比特的数值,总共可以分配出几万个端口(16比特可以表示65536个端口号,但并不是所有端口都可以用于地址转换)。因此如果用公有地址加上端口号的组合来对应一个私有地址,那么一个公有地址就可以对应几万个私有地址,极大地提高了公有地址的利用率

在这里插入图片描述

有时我们希望能够从互联网访问公司内网。之所以无法从互联网访问内网,是因为表里没有相应的记录,那么我们只要事先手动添加这样的记录就可以了。一般可以将用于外网访问的服务器放在地址转换设备的外面并为它分配一个公有地址。

在这里插入图片描述

在内网中,可用作私有地址的有如下这些:

10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255

路由器的附加功能 —— 包过滤:

  • 包过滤就是在对包进行转发时,根据MAC头部、IP头部、TCP头部的内容,按照事先设置好的规则决定是转发这个包,还是丢弃这个包。我们通常说的防火墙设备或软件,大多数都是利用这一机制来防止非法入侵的
  • 包过滤的原理非常简单,但要想设置一套恰当的规则来区分非法访问和正常访问,只阻止非法入侵而不影响正常访问,这是非常不容易的
  • 举个例子,为了防止从互联网非法入侵内网,我们可以将来自互联网的所有包都屏蔽掉,但是这会造成什么结果呢?我们知道网络包是双向传输的,如果简单地阻止来自互联网的全部包,那么从内网访问互联网的操作也会无法正常进行

接入网

互联网的基本结构与家庭、公司的网络是相同的,互联网也是通过路由器来转发包的,而且路由器的基本结构和工作方式也没什么不同,我们可以将互联网理解成是家庭、公司网络的一个放大版。

互联网与家庭、公司网络有两个主要的不同点:

  • 转发设备之间的距离。在家庭、公司网络中,转发设备间的距离不过几十米到几百米,用以太网线进行连接即可;而互联网的范围覆盖全球,显然无法用以太网线来实现连接
  • 路由表的维护。互联网中的路由器中的路由表是通过自动更新来维护的;家庭、公司网络中的路由器中的路由表一般通过手动维护,也有自动维护机制,但与互联网中的自动维护有所区别

网络包通过“互联网接入路由器”之后,就进入了互联网。互联网接入路由器与以太网路由器不同的一点是,互联网接入路由器是按照接入网规则来发送包的。

接入网指的是将互联网与家庭、公司网络连接起来的通信线路。例如公司里使用的专线,当它用来连接互联网时就叫做接入网;当用户使用运营商提供的通信服务时,用户与运营商之间的线路也叫做接入网。

家用的接入网方式一般包括ADSL、FTTH、CATV、电话线、ISDN等,公司还可能使用专线。

ADSL接入网

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

在这里插入图片描述

使用ADSL接入网方式的网络包从用户传输到网络运营商,流程如下:

  1. 客户端发送的网络包经过多个交换机和路由器的转发,到达互联网接入路由器,路由器会提取出IP头部中的接收方IP地址,从而判断转发目标
  2. 互联网接入路由器会在网络包前面加上PPP头部、PPPoE头部、MAC头部(之前的MAC头部在到达路由器后会被删除),然后将包发送到ADSL Modem(ADSL调制解调器)。如果互联网接入路由器和ADSL Modem之间是通过以太网连接的,那么就会按照以太网的规则执行包发送的操作
  3. ADSL Modem会把包拆分成多个ATM信元(ATM,异步传输;信元由5字节的头部和48字节的数据组成)
  4. ADSL Modem通过调制技术将信元数字信息转换成电信号(正弦波信号),并发送到用户端分离器
  5. 用户端分离器不对信号做什么,从用户端分离器出来就是插电话线的接口,信号从这里出来之后,会通过室内电话线,然后到达大楼的中间配线盘和主配线盘,外面的电话线在这里和大楼内部的室内电话线相连接(如果是独栋住宅,就可以将室外线和室内线直接连起来)
  6. 通过配线盘之后,信号会到达保安器(为了防止雷电等情况下电话线中产生过大电流的一种保护装置,内部有保险丝)
  7. 通过保安器后,信号会进入电线杆上架设的电话电缆(电话线是一种直径0.32~0.9mm的金属信号线;信号线越细衰减率越高,因此距离电话局近的地方使用细线,较远的地方使用粗线)
  8. 信号通过电话电缆中的电话线到达电话局后,会先到达配线盘,再发送到电话局端分离器,这个分离器一方面会对混合信号进行分离(ADSL信号会被过滤掉,剩下的语音信号传入电话机),另一方面会将原本的混合信号继续发送到DSLAM(DSL Access Multiplexer,数字用户线路接入复用器;它是一种电话局用的多路ADSL Modem,可以理解为将多个ADSL Modem整合在一个外壳里的设备)
  9. DSLAM通过读取信号波形,根据振幅和相位判断对应的比特值,将电信号还原成数字信息(即ATM信元)。DSLAM具有ATM接口,在与后方路由器收发数据时使用的是原始网络包拆分后的ATM信元形式
  10. 信元从DSLAM出来之后,会到达一个叫作BAS(宽带接入服务器)的包转发设备,BAS与DSLAM一样,都具有ATM接口,可以接收ATM信元,并且会将接收到的ATM信元还原成原始的网络
  11. BAS会将网络包前面的MAC头部和PPPoE头部丢弃(MAC头部和PPPoE头部的作用就是将包送到BAS的接口,送到后自然可以丢弃),剩下PPP头部以及后面的数据,并在前面加上隧道专用头部(一般使用的隧道技术为L2TP,因此会加上L2TP头部),然后将包发送到隧道的出口
  12. 网络包会到达隧道出口的隧道专用路由器,路由器会将隧道头部丢弃,并取出IP包,根据接收方IP地址将包转发到互联网内部

在这里插入图片描述

当初开发ADSL技术时,通信业比较看好ATM技术,各运营商也在ATM相关的设备上投入了很多资金。在这样的情况下,如果使用信元来传输数据,就比较容易和其他设备进行整合,可以降低开发投入和设备投入。如果不是出于这样的原因,其实并不需要将包拆分成信元,实际上也有一些ADSL运营商使用的ADSL Modem是不进行数据拆分的。

将方波调制成圆滑波形主要有两个原因:

  • 方波信号的波形容易失真,随着距离的延长错误率也会提高
  • 方波信号覆盖了从低频到高频的宽广频段,信号频率越高,辐射出来的电磁噪声就越强,因此信号频谱太宽就难以控制噪声

调制:

  • 用圆滑波形(正弦波)对信号进行合成来表示0和1的技术被称为调制,ADSL采用的调制方式是振幅调制(ASK)和相位调制(PSK)相结合的正交振幅调制(QAM)方式,也被称为正交调幅
  • 振幅调制是用信号的强弱,也就是信号振幅的大小来对应0和1的方式。振幅小的信号为0,振幅大的信号为1,这是一种最简单的对应关系。在这个例子中,振幅大小只有两个级别,如果增加振幅变化的级别,就可以对应更多的比特。例如,如果将振幅增加到4个级别,则振幅从小到大可分别对应00、01、10和11,这样就可以表示两个比特了。这样做可以将单位时间内传输的数据量加倍,也就能够提高速率。以此类推,如果振幅有8个级别,就可以表示3个比特,16个级别就可以表示4个比特,速率也就越来越高。不过,信号会在传输过程中发生衰减,也会受到噪声影响而失真,如果振幅级别太多,接收方对信号的识别就容易出错,因此振幅级别也不能太多
  • 相位调制是一种根据信号的相位来对应0和1的方式。Modem产生的信号是以一定周期振动的波,振动的起始位置不同,波的形状也就不同。如果将波的一个振动周期理解为一个圆,则起始位置就可以用0度到360度的角度来表示,这个角度就是相位,用角度来对应0和1的方式就叫作相位调制。例如,从0度开始的波为0,从180度开始的波为1,这是一种最简单的对应关系。和振幅调制一样,相位调制也可以通过将角度划分为更细的级别来增加对应的比特数量,从而提高速率。但是,角度太接近的时候也容易产生误判,因此这样提升速率还是有限度的
  • 正交振幅调制就是将振幅调制和相位调制组合起来的一种方式。如果信号的振幅可以表示1个比特,相位可以表示1个比特,那么加起来就可以表示2个比特。因此,将两种方式组合起来,正交振幅调制就可以用一个波表示更多的比特,从而提高传输速率。正交振幅调制中,通过增加振幅和相位的级别,就可以增加能表示的比特数。例如,如果振幅和相位各自都有4个级别,那么组合起来就有16个级别,也就可以表示4个比特的值。当然,正交振幅调制与单独使用振幅调制或相位调制的情况一样,级别过多就容易发生误判,因此这种方法提升的速率是有限度的

在这里插入图片描述

在这里插入图片描述

不同频率的波可以合成,也可以用滤波器从合成的波中分离出某个特定频率的波。因此,我们可以使用多个频率合成的波来传输信号,这种合成波能够表示更多的比特数,传输速率也就提高了。

ADSL中,提高传输速率的因素有两个:

  • 使用正交振幅调制(正交调幅)
  • 使用合成波(将多个不同频率的波合成到一起)

分离器:

  • ADSL信号(频率较高)会和电话的语音信号(频率较低)混合起来一起从电话线传输出去。如果信号是从用户端发送出去的,那么用户端分离器并不会做什么,真正起作用的是电话局端分离器
  • 电话局端分离器会对混合信号进行分离,具体来说就是将一定频率以上的信号过滤掉(即过滤掉频率较高的ADSL信号),只留有电话信号,从而让正常的电话信号传入电话机
  • 对于ADSL信号,电话局端分离器会将原本的混合信号发送给DSLAM(局端多路Modem),其内部已经具备将ADSL频率外的信号过滤掉的功能,因此不需要在分离器进行过滤
  • 信号从互联网发送到用户也是一样,用户端分离器会对混合信号进行分离,使得传入电话机的只有电话信号,而传给ADSL Modem的依然是混合信号,因为ADSL Modem内部也具备将ADSL频率外的信号过滤掉的功能
  • 分离器不仅能过滤掉高频信号,防止ADSL信号对电话信号产生干扰,还能防止电话信号对ADSL信号产生干扰。如果没有分离器,那么当放下听筒时,电话机的电路和电话线是断开的,当拿起听筒时电话机就和电话线相连,电话机的信号就会传到电话线上。这两种状态的差异会导致噪声等线路状态的改变,如果ADSL通信过程中拿起话筒导致线路状态改变,就需要重新训练(握手),这就会导致几十秒的通信中断。有了分离器后电话机的电路和电话线可以不用断开,也就不会导致线路状态的改变

在这里插入图片描述

电话电缆:

  • 电话电缆在用户住宅附近一般是架设在电线杆上,但中途会沿电线杆侧面的金属管进入地下。由于电话线必须进入很多住宅和大楼,所以电话局附近就会集结数量庞大的电缆,这么多电缆要通过电线杆引入电话局是非常不现实的,电话局周围得密密麻麻地立满了电线杆,而且电线杆上架设过多的电缆,还会产生防灾方面的问题。因此,在电话局附近,电话线都是埋在地下的。由于电话局附近的地下电缆很多,集中埋设电缆的地方就形成了一条地道,这部分称为电缆隧道。通过电缆隧道进入电话局后,电缆会逐根连接到电话局的主配线盘上
  • 电话电缆中的信号也会受到噪声的干扰,虽然电话线和以太网双绞线的结构有所不同,但它们都是用金属信号线传输电信号,本质上是共通的。电话线受到干扰的方式和双绞线有些不同,双绞线中只有一路方波信号,信号失真后就无法读取还原成数字信号,于是就会产生错误。但ADSL信号受到干扰后并不会立即造成错误,ADSL信号分布在多个频段上,只有和噪声频率相同的信号会受到影响而无法读取,即可用的信号数量减少,结果导致速率下降。因此,电话线架设在噪声比较多的地方时,可能就会导致速率下降,比如电车线路旁边

在这里插入图片描述

FTTH接入网

FTTH(Fibre To The Home,光纤到户)是一种基于光纤的接入网技术。ADSL的通信线路是电话线,FTTH的通信线路为光纤。

光纤的通信原理:先将数字信息转换成电信号,然后再将电信号转换成光信号。这里的电信号非常简单,1用高电压表示,0用低电压表示。将这样的电信号输入LED、激光二极管等光源后,这些光源就会根据信号电压的变化发光,高电压发光亮,低电压发光暗。这样的光信号在光纤中传导之后,就可以通过光纤到达接收端。接收端有可以感应光线的光敏元件,光敏元件可以根据光的亮度产生不同的电压,当光信号照射到上面时,光亮的时候就产生高电压,光暗的时候就产生低电压,这样就将光信号转换成了电信号。最后再将电信号转换成数字信息,我们就能接收到数据了。

在这里插入图片描述

光纤可以分为单模光纤和多模光纤:

  • 单模光纤的纤芯很细,只有入射角很小的光线才能进入,因此在能够保持相位一致的角度中,只有角度最小的光线能进入光纤。多模光纤的纤芯比较粗,入射角比较大的光也可以进入,因此在相位一致的角度中,不仅角度最小的可以在光纤中传导,其他角度更大一些的也可以,也就是说,可以有多条光线在纤芯中同时传导
  • 多模光纤中可以传导多条光线,这意味着能通过的光线较多,对光源和光敏元件的性能要求也就较低,从而可以降低光源和光敏元件的价格。相对地,单模光纤的纤芯中只能传导一条光线,能通过的光线较少,因此对于光源和光敏元件的性能要求就较高,但信号的失真会比较小
  • 单模光纤的失真小,可以比多模光纤更长,因此多模光纤主要用于一座建筑物里面的连接,单模光纤则用于距离较远的建筑物之间的连接。FTTH属于后者,因此主要使用单模光纤

在这里插入图片描述

FTTH接入技术指的就是用光纤来代替ADSL将用户端的互联网接入路由器和运营商的BAS连接起来。FTTH接入技术可以分为直连和分路两种,直连指的是用一根光纤直接从用户端连接到最近的电话局;分路指的是光纤的接入方式是在用户附近的电线杆上安装一个名为分光器的设备,通过这个设备让光纤分路,同时连接多个用户。

FTTH直连的流程:

  1. 客户端发送的网络包到达互联网接入路由器
  2. 互联网接入路由器会在网络包前面加上PPP头部、PPPoE头部、MAC头部,然后将包发送到光纤收发器(也叫做光猫,类似于ADSL中的Modem),光纤收发器会将以太网的电信号转换成光信号
  3. 光纤收发器通过光纤将光信号发送到多路光纤收发器(类似于ADSL中的DSLAM),多路光纤收发器会将光信号转换成电信号
  4. 多路光纤收发器将电信号发送到BAS,BAS会将电信号还原成网络包,并将MAC头部和PPPoE头部丢弃,然后加上隧道专用头部,发送到隧道出口
  5. 网络包到达隧道出口的隧道专用路由器,路由器会将该包转发到互联网内部

FTTH分路的流程:

  1. 客户端发送的网络包到达互联网接入路由器
  2. 互联网接入路由器会在网络包前面加上PPP头部、PPPoE头部、MAC头部,然后将包发送到ONU(光网络单元,类似光纤收发器,可以将电信号转换成光信号)
  3. ONU将光信号发送到分光器,它能将多个用户发送过来的光信号进行分路
  4. 分光器将光信号发送到OLT(光线路终端),将光信号转换成电信号。OLT和ONU能够通过调整信号收发时机来避免多个用户的光信号在分光器中产生碰撞
  5. OLT将信号发送到BAS

在这里插入图片描述

用户认证和配置下发

ADSL和FTTH接入网中,都需要先输入用户名和密码(跟运营商签约时由运营商分配给用户的上网用户名和密码)。

传统的拨号上网使用了PPP协议,其工作流程如下:

  1. 用户向运营商的接入点拨打电话
  2. 电话接通后输入用户名和密码进行登录操作
  3. 用户名和密码通过RADIUS协议从远程访问服务器(RAS)发送到认证服务器
  4. 认证服务器校验这些信息是否正确。当确认无误后,认证服务器会返回IP地址等配置信息,并将这些信息下发给用户
  5. 用户的计算机根据这些信息配置IP地址等参数,完成TCP/IP收发网络包的准备工作

在这里插入图片描述

PPP协议中没有定义以太网中的报头和FCS等元素,也没有定义信号的格式,因此无法直接将PPP消息转换成信号来发送。要传输PPP消息,必须有另一个包含报头、FCS、信号格式等元素的“容器”,然后将PPP消息装在这个容器里才行。于是,在拨号接入中PPP借用了HDLC协议作为容器。

ADSL和FTTH并不能使用HDLC,因此需要寻找另一个机制作为替代。于是,用以太网包代替HDLC来装载PPP协议。此外,以太网和PPP在设计上有所不同,为了弥补这些问题就重新设计了一个新的规格,这就是PPPoE(以太网上的点对点协议)。

在这里插入图片描述

在这里插入图片描述

接入网的整体工作流程:

  1. 互联网接入路由器中需要配置运营商分配的用户名和密码。如果不使用路由器,而是从计算机处直接上网,那么需要在计算机中配置用户名和密码,这时计算机会代替路由器完成PPPoE操作
  2. 互联网接入路由器会根据PPPoE的发现机制来寻找BAS,这一机制和ARP一样是基于广播来实现的
  3. 用户认证。用户名和密码可以通过两种方式发送给BAS,一种是将密码进行加密的CHAP方式,另一种是不加密的PAP方式,具体用哪种方式可以在互联网接入路由器的设置画面中进行选择
  4. 配置下发。在校验密码之后,BAS向用户下发TCP/IP配置信息(包括分配给上网设备的IP地址、DNS服务器的IP地址以及默认网关的IP地址),这些配置信息会被配置到互联网接入路由器的BAS端的端口上,这样路由器就完成接入互联网的准备

DHCP

ADSL使用PPPoE方式时,会先将PPP消息装入以太网包中,再添加PPPoE头部和MAC头部,然后再将以太网包拆分并装入信元。PPPoA方式不添加MAC头部和PPPoE头部,而是直接将PPP消息装入信元中。由于PPPoA没有MAC头部,所以PPP消息是无法通过以太网来传输的,这就意味着需要将收发PPP消息的路由器和ADSL Modem整合成一体。

PPPoA和PPPoE相比有一些优势。PPPoE方式中需要添加PPPoE头部和PPP头部,这意味着MTU就相应变小了,这可能会降低网络的效率。而PPPoA不使用以太网包来传输PPP消息,因此不会发生MTU变小的问题。

PPPoE会降低网络效率,PPPoA也有ADSL Modem和路由器无法分离的限制,这两个问题其实都是由PPP引起的。因此,有一些运营商不使用PPP,他们使用DHCP协议从BAS向用户端下发TCP/IP配置信息。

DHCP经常用于通过公司网络向客户端计算机下发TCP/IP配置信息,其工作流程如下:

  1. 客户端请求配置信息
  2. DHCP服务器下发配置信息

DHCP不需要像PPP那样验证用户名和密码,但是没有用户名和密码,就意味着无法通过用户名来切换运营商网络。不过DHCP有自己的优势,它可以单纯地直接传输以太网包,而不需要添加额外的PPP头部,因此不会占用MTU。DHCP协议中使用的ADSL Modem与PPPoE、PPPoA方式不同,这种ADSL Modem不使用信元,而是直接将以太网包调制成ADSL信号,因此没有ADSL Modem和路由器无法分离的问题。

在这里插入图片描述

POP

互联网的实体并不是由一个组织运营管理的单一网络,而是由多个运营商网络相互连接组成的。ADSL、FTTH等接入网是与用户签约的运营商设备相连的,这些设备称为POP(接入点),互联网的入口就位于这里。

POP的结构根据接入网类型以及运营商的业务类型不同而不同,POP中包括各种类型的路由器,它们的基本工作方式是相同的,只是根据业务的不同分成了不同的类型。

在这里插入图片描述

对于连接接入网的部分来说,由于要连接的线路数量很多,所以路由器需要配备大量的端口,但能传输的网络包数量相对比较少,这是因为接入网的速率比互联网核心网络要低,因此端口多且价格便宜的路由器适用于这些场景。相对地,图中左侧的路由器用于连接运营商和核心NOC(网络运行中心)以及其他POP,所有连接接入网的路由器发出的包都会集中到这里,使用的线路速率也比较高,因此这里需要配备转发性能和数据吞吐量高的路由器。

Web服务器的部署地点

最简单的方式是将服务器直接部署在公司网络上,可以从互联网直接访问。但这种方式一方面容易导致IP地址不足,需要为公司网络中的所有设备,包括服务器和客户端计算机,都分配各自的公有地址;另一方面容易产生安全问题,从互联网传来的网络包会无节制地进入服务器,这意味着服务器在攻击者看来处于“裸奔”状态。

现在常用的一种方式是部署防火墙,这是一种抵御外部网络攻击的防御机制。防火墙的作用类似于海关,它只允许发往指定服务器的指定应用程序的网络包通过,从而屏蔽其他不允许通过的包。

上面两种方式都是将服务器部署在公司里,除了部署在公司,还可以把服务器放在网络运营商等管理的数据中心里,或者直接租用运营商提供的服务器。数据中心是与运营商核心部分NOC直接连接的,或者是与运营商之间的枢纽IX直接连接的。换句话说,数据中心通过高速线路直接连接到互联网的核心部分,因此将服务器部署在这里可以获得很高的访问速度,当服务器访问量很大时这是非常有效的。此外,数据中心一般位于具有抗震结构的大楼内,还具有自主发电设备,并实行24小时门禁管理,可以说比放在公司里具有更高的安全性。数据中心不但提供安放服务器的场地,还提供各种附加服务,如服务器工作状态监控、防火墙的配置和运营、非法入侵监控等,从这一点来看,其安全性也更高。

在这里插入图片描述

防火墙

防火墙可分为包过滤、应用层网关、电路层网关等几种方式,其中任何一种方式都可以实现防火墙的目的,但出于性能、价格、易用性等因素的考虑,应用最广泛的是包过滤方式。

包过滤方式的防火墙可根据接收方IP地址、发送方IP地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。


http://www.ppmy.cn/news/1519883.html

相关文章

人工智能领域面试基础问题整理(二):什么是人工智能?

当你说你的专业是“人工智能”时&#xff0c;面试官问你&#xff1a;“假如我是一个不懂AI的人&#xff0c;你能和我说说&#xff0c;什么是AI吗&#xff1f;”你会怎么回答。 我们可以从以下几个方面入手&#xff1a; 1、人工智能的定义 人工智能&#xff08;Artificial Inte…

Android Studio gradle下载太慢了!怎么办?(已解决)

Android Studio&#xff01;你到底干了什么&#xff1f;&#xff01; 不能高速下载gradle&#xff0c;我等如何进行app编程&#xff1f;&#xff01; 很简单&#xff0c;我修改gradle地址不就是了。 找到gradle-wrapper.properties文件 修改其中distributionUrl的地址。 将 ht…

[Leetcode 51][Hard]-n皇后问题-回溯

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 这种可以算是组合问题的变种&#xff0c;在回溯函数中我们要保存当前已放置皇后的所有位置&#xff0c;同时递归调用时要进行寻找下一个皇后的放置位置。那么我们可以逐行遍历棋盘并作为递归调…

如何完美实现 Go 服务的平滑升级

Go 服务作为常驻进程,如何进行服务升级呢?你可能会觉得这还不简单,先将现有服务停止,再启动新的服务不就可以了。可是将现有服务停止时,如果它还在处理请求,那么这些请求该如何处理?另外,在现有服务已经退出但是新服务还没有启动期间,新的请求到达了又该如何处理? Go…

Logistic分类算法原理及Python实践

一、Logistic分类算法原理 Logistic分类算法&#xff0c;也称为逻辑回归&#xff08;Logistic Regression&#xff09;&#xff0c;是机器学习中的一种经典分类算法&#xff0c;主要用于解决二分类问题。其原理基于线性回归和逻辑函数&#xff08;Sigmoid函数&#xff09;的组…

3.4 数据传送指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

使用JavaScript读取手机联系人列表:从理论到实践

更多内容前往个人网站&#xff1a;孔乙己大叔 在现代Web开发中&#xff0c;随着技术的不断进步&#xff0c;以前看似不可能的任务现在变得可行。例如&#xff0c;使用JavaScript读取手机联系人列表这一功能&#xff0c;在几年前几乎是不可想象的&#xff0c;但现在随着Web API的…

MyBatis之XML配置文件(一)

Mbatis是一个ORM框架&#xff0c;可以用XML配置文件或注解映射SQL语句&#xff0c;映射文件是MyBatis框架的核心&#xff0c;本文主要讲述XML 映射文件的结构和使用方法。 一、SQL映射文件 SQL映射文件就是mapperxml配置文件&#xff0c;主要实现SQL语句的配置和映射&#xf…

pdf.js如何支持base64的查看

1.pdf.js 作为一个查看在线阅读pdf的软件&#xff0c;常常被运用到前端开发中&#xff0c;但是如何让pdf支持base64的查看&#xff0c;这边就需要去进行修改一些代码了 这边我们就进行开发修改 首先去下载 https://mozilla.github.io/pdf.js/ 当然了&#xff0c;低版本的可以…

Kubernetes 上安装 Jenkins

安装 Helm curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加 Jenkins Helm 仓库 首先添加 Jenkins Helm 仓库 helm repo add jenkins https://charts.jenkins.io helm repo update安装 Jenkins 使用 Helm 安装 Jenkins 的最新版本&…

基于分布式计算的电商系统设计与实现【系统设计、模型预测、大屏设计、海量数据、Hadoop集群】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目展示项目介绍 目录摘要Abstract1 引言1.1 研究背景1.2 国内外研究现状1.3 研究目的1.4 研究意义 2 关键技术理论介绍2.1 Hadoop相关组件介绍2.2 分布式集群介绍2.3 Pyecharts介绍2.4 Fl…

Android音视频开发,需要学些什么?

如果你想学习 Android 音视频开发&#xff0c;以下是一些需要学习的内容&#xff1a; 一、基础知识 Java 或 Kotlin 编程语言&#xff1a;Android 开发主要使用这两种语言&#xff0c;确保你对其中一种有扎实的掌握&#xff0c;包括语法、面向对象编程概念、数据结构和算法等…

docker-compose 启动的harbor页面能登录,但是不能推送镜像

问题现象&#xff1a; docker-compose 安装的harbor&#xff0c;页面可以正常打开&#xff0c;但是不能推送镜像。 报错信息提示&#xff1a;connect: connection refused 故障原因&#xff1a; harbor.yml 中的external_url参数写错。这个是提供外部访问。页面请求地址和…

Java 面向对象编程的四个基本原则(封装、继承、多态和抽象),并给出一个简单的例子说明如何在 Java 中应用这些原则?

面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。在 Java 中&#xff0c;面向对象编程的四个基本原则是封装、继承、多态和抽象。每个原则都有其特定的目标&#xff0c;帮助开发者构建更加模块化、可维护和可扩展的代码。 封装 …

ImmersiveTranslate:一键中英对照,Google Chrome上不可或缺的翻译利器

ImmersiveTranslate&#xff1a;一键中英对照&#xff0c;Google Chrome上不可或缺的翻译利器 基本介绍 ImmersiveTranslate 是一款为Google Chrome用户设计的翻译插件&#xff0c;旨在帮助用户轻松实现中英对照翻译。这款插件不仅适合普通用户&#xff0c;同时也为开发者提供…

CSS3动画——飞行的小精灵

CSS3动画——飞行的小精灵 今天的这段代码通过多层结构、渐变色、圆角、多种动画效果以及细节处理&#xff0c;成功地创造了一个充满活力和趣味性的飞行小精灵动画效果。 效果如下&#xff1a; 飞行的小精灵 源代码如下&#xff1a; <!DOCTYPE html> <html lang&quo…

呵,老板不过如此,SQL还是得看我

2018年7月&#xff0c;大三暑假进行时&#xff0c;时间过得飞快&#xff0c;我到这边实习都已经一个月了。 我在没工作之前&#xff0c;我老是觉得生产项目的代码跟我平时自学练的会有很大的区别。 以为生产项目代码啥的都会规范很多&#xff0c;比如在接口上会做很多安全性的…

@Tanstack/vue-query 的使用介绍

Tanstack/vue-query 的使用介绍 前言 在今年的vue conf 会议上&#xff0c;提到了vue-query这个库&#xff0c;这里对它的基本使用做一个介绍。 会议资料地址&#xff1a; https://vueconf.cn/ Tanstack-query的前身是react-query&#xff0c;是一个本地的服务端状态管理的库…

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range

【bug】可图文生图模型 KolorsPipeline IndexError: list index out of range 环境 linux diffusers 0.30.0问题详情 报错详情 from diffusers import KolorsPipelineTraceback (most recent call last):File "Kolors/demo.py", line 6, in <module>pi…

Python编写BC260Y TCP数据收发压力测试脚本

Python编写BC260Y TCP数据收发压力测试脚本 使用BC260Y的TCP AT命令发送数据时&#xff0c;能够在数据中带有’\r\n’&#xff08;回车换行&#xff09;&#xff0c;而其他模组会将’\r\n’当做AT命令处理的结束符&#xff0c;例如EC800E&#xff0c;为了验证TCP数据中带有’\r…