【网络基础】网络是怎样连接的

文章目录

    • 1.浏览器生成消息
    • 2.用电信号传输 TCP/IP 数据
    • 3.从网线到网络设备
      • 集线器
      • 交换机
      • 路由器
    • 4.服务器端的局域网中有什么玄机
    • 5.请求到达 Web 服务器,响应返回浏览器

1.浏览器生成消息

  • 1.但实际上除了"http:",网址还可以以其他一些文字开头,例如"ftp:"等
  • 2.浏览器是一个具备多种客户端功能的综合性客户端软件
  • 3.尽管浏览器能够解析网址并生成 HTTP 消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现
  • 4.对于 DNS 服务器,我们的计算机上一定有相应的 DNS 客户端,而相当于 DNS 客户端的部分称为 DNS 解析器,或者简称解析器,解析器实际上是一段程序,它包含在操作系统的 Socket 库中
  • 5.DNS服务器的基本工作
    【网络基础】网络是怎样连接的_第1张图片
  • 6.com 和 jp 的上面还有一级域,称为根域
  • 7.现实中上级域和下级域有可能共享同一台 DNS 服务器
  • 8.具体来说,客户端也会先创建一个套接字,然后从该套接字延伸出管道,最后管道连接到服务器端的套接字上。当双方的套接字连接起来之后,通信准备就完成了。接下来,就像我们刚刚讲过的一样,只要将数据送入套接字就可以收发数据了
  • 9.套接字创建完成后,协议栈会返回一个描述符,应用程序会将收到的描述符存放在内存中。描述符是用来识别不同的套接字的
  • 10.需要委托协议栈将客户端创建的套接字与服务器那边的套接字连接起来。应用程序通过调用 Socket 库中的名为 connect 的程序组件来完成这一操作。这里的要点是当调用 connect 时,需要指定描述符、服务器 IP 地址和端口号这 3 个参数
  • 11.服务器上所使用的端口号是根据应用的种类事先规定好的,仅此而已。比如 Web 是 80 号端口,电子邮件是 25 号端口
  • 12.客户端在创建套接字时,协议栈会为这个套接字随便分配一个端口号 A。接下来,当协议栈执行连接操作时,会将这个随便分配的端口号通知给服务器
  • 13.调用read 时需要指定用于存放接收到的响应消息的内存地址,这一内存地址称为接收缓冲区

2.用电信号传输 TCP/IP 数据

  • 1.在 Windows 中可以用 netstat 命令显示套接字内容
  • 2.协议栈并不是一收到数据就马上发送出去,而是会将数据存放在内部的发送缓冲区中
  • 3.所谓滑动窗口,就是在发送一个包之后,不等待 ACK 号返回,而是直接发送后续的一系列包
  • 4.因此当需要连续发送 ACK 号时,只要发送最后一个 ACK 号就可以了,中间的可以全部省略
  • 5.集线器是按照以太网规则传输包的设备,而路由器是按照 IP规则传输包的设备
  • 6.MAC 头部(用于以太网协议)IP 头部(用于 IP 协议)
  • 7.协议号,它表示包的内容是来自哪个模块的。例如,如果是 TCP 模块委托的内容,则设置为 06(十六进制),如果是 UDP 模块委托的内容,则设置为 17(十六进制)
  • 8.IP 头部中的接收方 IP 地址表示网络包的目的地,通过这个地址我们就可以判断要将包发到哪里,但在以太网的世界中,TCP/IP 的这个思路是行不通的。以太网在判断网络包目的地时和 TCP/IP 的方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,而MAC 头部就是干这个用的
  • 9.以太网是一种为多台计算机能够彼此自由和廉价地相互通信而设计的通信技术,当一台计算机发送信号时,信号就会通过网线流过整个网络,最终到达所有的设备。这就好像所有人待在一个大房间里,任何一个人说话,所有人都能够听到,通过 MAC 头部中的接收方 MAC 地址,就能够知道包是发给谁的
  • 10.网卡驱动从 IP 模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC 模块发送发送包的命令。接下来就轮到 MAC 模块进行工作了。首先,MAC 模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列
    【网络基础】网络是怎样连接的_第2张图片
  • 11.以太网接收返回包时
    • 把这些信号全都收进来
    • 信号转换成数字信息,检查 FCS
    • MAC 头部中接收方MAC 地址与网卡在初始化时分配给自己的 MAC 地址是否一致如果不是
      自己的包就直接丢弃
    • 将包放入缓冲区中
    • 通知计算机的操作会使用一个叫作中断的机制,中断是有编号的,网卡在安装的时候就在硬件中设置了中断号,在中断处理程序中则将硬件的中断号和相应的驱动程序绑定。例如,假设网卡的中断号为 11,则在中断处理程序中将中断号 11 和相应的网卡驱动绑定起来,当网卡发起中断时,就会自动调用网卡驱动了。现在的硬件设备都遵循即插即用 C 规范自动设置中断号
    • 网卡驱动被中断处理程序调用后,会从网卡的缓冲区中取出收到的包,并通过 MAC 头部中的以太类型字段判断协议的类型。比如TCP/IP 协议
  • 12.TCP模块会根据 IP 头部中的接收方和发送方 IP 地址,以及 TCP 头部中的接收方和发送方端口号来查找对应的套接字 A。找到对应的套接字之后,就可以根据套接字中记录的通信状态,执行相应的操作了

3.从网线到网络设备

集线器

  • 当信号到达集线器后,会被广播到整个网络中。以太网的基本架构A就是将包发到所有的设备,然后由设备根据接收方MAC地址来判断应该接收哪些包,而集线器就是这一架构的忠实体现
  • 即便信号受到噪声的干扰发生了失真,也会原样发送到目的地,这时,接收信号的设备,也就是交换机、路由器、服务器等,会在将信号转换成数字信息后通过FCSA 校验发现错误,并将出错的包丢弃,TCP模块会检测到丢包,并对该包进行重传

交换机

  • 并不只是简单地让信号流过,而是先接收信号并将其还原为数字信息,然后再重新转换成信号并发送出去的过程
  • 交换机的一个端口就相当于计算机上的一块网卡A。但交换机的工作方式和网卡有一点不同。网卡本身具有MAC地址,交换机的端口不具有MAC地址
  • 交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口
  • 当交换机发现一个包要发回到原端口时,就会直接丢弃这个包
  • 当交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连在哪个端口上都能收到这个包。这样做不会产生什么问题,因为以太网的设计本来就是将包发送到整个网络的,然后只有相应的接收者才接收包,而其他设备则会忽略这个包
  • 如果接收方 MAC 地址是一个广播地址FF:FF:FF:FF:FF:FF ,那么交换机会将包发送到除源端口之外的所有端口

路由器

  • 交换机是基于以太网规格工作的设备,而路由器是基于 IP 工作的
  • 还会提供一些附加功能,例如将私有地址转换为公有地址的地址转换功能,以及阻止危险网络包的包过滤功能等
  • 家里用的路由器已经集成了集线器和交换机的功能
  • 路由器包括转发模块和端口模块两部分就可以了。其中转发模块负责判断包的转发目的地,端口模块负责包的收发操作
  • 以以太网端口为例,路由器的端口具有MAC地址,因此它就能够成为以太网的发送方和接收
  • 端口还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。当转发包时,首先路由器端口会接收发给自己的以太网包,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。这一点和交
    换机是不同的,交换机只是将进来的包转发出去而已,它自己并不会成为发送方或者接收方
  • 路由器的各个端口都具有 MAC 地址和 IP 地址
  • 交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的,而路由器则是根据 IP 头部中的 IP 地址来判断的。
  • 有时地址本身的子网掩码和路由表中的子网掩码是不一致的,这是路由聚合的结果。路由聚合会将几个子
    网合并成一个子网,并在路由表中只产生一条记录
    【网络基础】网络是怎样连接的_第3张图片
    我们现在有 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
  • 路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃
  • 完成包接收操作之后,路由器就会丢弃包开头的 MAC 头部,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。
  • 通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的MAC 地址
  • 接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作
  • 子网掩码 0.0.0.0 的意思是网络包接收方 IP 地址和路由表目标地址的匹配中需要匹配的比特数为 0,换句话说,就是根本不需要匹配。只要将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录
  • TCP 拆分数据的操作是在将数据装到包里之前进行的,换句话说,拆分好的一个数据块正好装进一个包里。从 IP 分片的角度来看,这样一个包其实是一个未拆分的整体,也就是说,分片是对一个完整的包再进行拆分的过程
  • 路由器也会使用 ARP 来查询下一个转发目标的 MAC 地址
  • 由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据这一地址将包传输到下一个路由器。接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包就到达了最终的目的地
  • 地址转换机制是同时改写地址和端口号的
  • 地址转换设备会从地址对应表中通过公有地址和端口号找到相对应的私有地址和端口号,并改写接收方信息,然后将包发给公司内网,这样包就能够到达原始的发送方了

4.服务器端的局域网中有什么玄机

  • 1.防火墙出于性能、价格、易用性等因素,现在最为普及的是包过滤方式
  • 2.TCP 在执行连接操作时需要收发 3 个包 B,其中第一个包的 TCP 控制位中 SYN 为 1,而 ACK 为 0。其他的包中这些值都不同,因此只要按照这个规则就能够过滤到 TCP 连接的第一个包
  • 3.当使用地址转换时,默认状态下是无法从互联网访问公司内网的,因此我们不需要再设置一条包过滤规则来阻止从互联网访问公司内网
  • 4.缓存服务器使用的代理机制最早就是放在客户端一侧的,称为正向代理
  • 5.使用正向代理需要在浏览器中进行设置,这可以说是识别正向代理的一个特征

5.请求到达 Web 服务器,响应返回浏览器

  • 1.我们将程序分成两个模块,即等待连接模块(图 6.1(a))和负责与客户端通信的模块(图
    6.1(b))A。当服务器程序启动并读取配置文件完成初始化操作后,就会运行等待连接模块(a)。这个模块会创建套接字,然后进入等待连接的暂停状态。接下来,当客户端连发起连接时,这个模块会恢复运行并接受连接,然后启动客户端通信模块(b),并移交完成连接的套接字。接下来,客户端通信模块(b)就会使用已连接的套接字与客户端进行通信,通信结束后,这个模块就退出了
    【网络基础】网络是怎样连接的_第4张图片
    还有一种方法是事先启动几个客户端通信模块,当客户端发起连接时,从空闲的模块中挑选一个出
    来将套接字移交给它来处理
  • 2.是存在一个无法做到左右对称的部分,那就是连接操作。连接这个操作是在有一方等待连接的情况下,另一方才能发起连接
  • 3.创建套接字操作的本质是分配用于套接字的内存空间,这一点上客户端和服务器是一样的
  • 4.那就是在复制出一个新的套接字之后,原来那个处于等待连接状态的套接字会怎么样呢?其实它还会以等待连接的状态继续存在,当再次调用 accept,客户端连接包到达时,它又可以再次执行接受连接操作
  • 5.如果不创建新副本,而是直接让客户端连接到等待连接的套接字上,那么就没有套接字在等待连接了,这时如果有其他客户端发起连接就会遇到问题
  • 6.新创建的套接字副本必须和原来的等待连接的套接字具有相同的端口号
  • 7.确定一个套接字需要两端的IP加上端口号,在套接字刚刚创建好,还没有建立连接的状态下,这 4 种信息是不全的。此外,为了指代一个套接字,使用一种信息(描述符)比使用 4 种信息要简单
  • 8.Web 服务器公开的目录其实并不是磁盘上的实际目录,而是虚拟目录,而 URI 中写的就是在这个虚拟目录结构下的路径名。因 此,当读取文件时,需要先查询虚拟目录与实际目录的对应关系,并将URI 转换成实际的文件名后,才能读取文件并返回数据
  • 9.Content-Type: text/html 其中“/”左边的部分称为“主类型”,表示数据的大分类;右边的“子类型”表示具体的数据类型
  • 10.除了通过 Content-Type 判断数据类型,还需要检查 Content-Encoding头部字段。如果消息中存放的内容是通过压缩或编码技术对原始数据进行转换得到的,那么 Content-Encoding 的值就表示具体的转换方式

你可能感兴趣的:(分布式)