「札记」网络是怎么连接的
《网络是怎样连接的》
现在我们使用的方案是让人来使用服务器名称,让路由器来使用 IP地址。为了填补两者之间的障碍,需要有一个机制能够通过名称来查询 IP 地址,或者通过 IP 地址来查询名称,这样就能够在人和机器双方都不做出牺牲的前提下完美地解决问题。这个机制就是 DNS。 DNS:Domain Name System,域名服务系统。将服务器名称和 IP 地址进行关联是 DNS 最常见的用法,但 DNS 的功能并不仅限于此,它还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称。
缓存:指的是将使用过的数据存放在离使用该数据的地方较近的高速存储装置中,以便提高后续访问速度的技术。这一技术有很多应用,如 CPU 和内存之间的缓存、磁盘和内存之间的缓存等,在网络中缓存也是一种用来提高访问速度的普遍性技术。
这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此, DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS 服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的 DNS 服务器。
数据收发操作的第一步是创建套接字。一般来说,服务器一方的应用程序在启动时就会创建好套接字并进入等待连接的状态。客户端则一般是在用户触发特定动作,需要访问服务器的时候创建套接字。在这个阶段,还没有开始传输网络包。 创建套接字之后,客户端会向服务器发起连接操作。首先,客户端会生成一个 SYN 为 1 的 TCP 包并发送给服务器。这个 TCP 包的头部还包含了客户端向服务器发送数据时使用的初始序号,以及服务器向客户端发送数据时需要用到的窗口大小。当这个包到达服务器之后,服务器会返回一个 SYN 为 1 的 TCP 包。这个包的头部中也包含了序号和窗口大小,此外还包含表示确认已收到包的 ACK 号。当这个包到达客户端时,客户端会向服务器返回一个包含表示确认的 ACK 号的 TCP 包。到这里,连接操作就完成了,双方进入数据收发阶段。
数据收发阶段的操作根据应用程序的不同而有一些差异,以 Web 为例,首先客户端会向服务器发送请求消息。TCP 会将请求消息切分成一定大小的块,并在每一块前面加上 TCP 头部,然后发送给服务器。TCP 头部中包含序号,它表示当前发送的是第几个字节的数据。当服务器收到数据时,会向客户端返回 ACK 号。在最初的阶段,服务器只是不断接收数据,随着数据收发的进行,数据不断传递给应用程序,接收缓冲区就会被逐步释放。这时,服务器需要将新的窗口大小告知客户端。当服务器收到客户端的请求消息后,会向客户端返回响应消息,这个过程和刚才的过程正好相反。 服务器的响应消息发送完毕之后,数据收发操作就结束了,这时就会开始执行断开操作。以 Web 为例,服务器会先发起断开过程。在这个过程中,服务器先发送一个 FIN 为 1 的 TCP 包,然后客户端返回一个表示确认收到的 ACK 号。接下来,双方还会交换一组方向相反的 FIN 为 1 的 TCP 包和包含 ACK 号的 TCP 包。最后,在等待一段时间后,套接字会被删除。
包是由头部和数据两部分构成的。头部包含目的地址等控制信息,大家可以把它理解为快递包裹的面单;头部后面就是委托方要发送给对方的数据,也就相当于快递包裹里的货物。
IP 模块负责添加如下两个头部。1.MAC 头部:以太网用的头部,包含 MAC 地址;2.IP 头部:IP 用的头部,包含 IP 地址。
IP 模块接受 TCP 模块的委托负责包的收发工作,它会生成 IP 头部并附加在 TCP 头部前面。IP 头部包含的内容其中最重要的内容就是 IP 地址,它表示这个包应该发到哪里去。这个地址是由 TCP 模块告知的,而 TCP 又是在执行连接操作时从应用程序那里获得这个地址的,因此这个地址的最初来源就是应用程序。IP 不会自行判断包的目的地,而是将包发往应用程序指定的接收方,即便应用程序指定了错误的 IP 地址,IP 模块也只能照做。当然,这样做肯定会出错,但这个责任应该由应用程序来承担。
MAC:Media Access Control 的缩写。MAC 头部、MAC 地址中的 MAC 也是这个意思。也就是说,通过 MAC 模块控制包收发操作时所使用的头部和地址就叫作 MAC 头部和 MAC 地址。
以太网信号的本质是正负变化的电压,大家可以认为网卡的 PHY(MAU)模块就是一个从正负两个信号端子输出信号的电路。
从包的转发目标可以看出路由器和交换机之间的委托关系。 IP 并不是委托以太网将包传输到最终目的地,而是传输到下一个路由器。在创建 MAC 头部时,也是从 IP 的路由表中查找出下一个路由器的 IP 地址,并通过 ARP 查询出 MAC 地址,然后将 MAC 地址写入 MAC 头部中的,这表示 IP 对以太网的委托只是将包传输到下一个路由器就行了。当包到达下一个路由器后,下一个路由器又会重新委托以太网将包传输到再下一个路由器。随着这一过程反复执行,包就会最终到达 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 在制定私有地址规则时,这些地址属于公有地址中还没有分配的范围。换句话说,私有地址本身并没有什么特别的结构,只不过是将公有地址中没分配的一部分拿出来规定只能在内网使用它们而已。这个范围中的地址和其他公司重复也没关系,所以对于这些地址不作统一管理,不需要申请,任何人都可以自由使用。当然,如果在公司内部地址有重复就无法传输网络包了,因此必须避免在内网中出现重复的地址。
公司内网并不是完全独立的,而是需要通过互联网和其他很多公司相连接,所以当内网和互联网之间需要传输包的时候,问题就出现了,因为如果很多地方都出现相同的地址,包就无法正确传输了。 于是,当公司内网和互联网连接的时候,需要将公司内网分成两个部分,一部分是对互联网开放的服务器,另一部分是公司内部设备。其中对互联网开放的部分分配公有地址,可以和互联网直接进行通信,这一部分和之前介绍的内容是一样的。相对地,内网部分则分配私有地址,内网中的设备不能和互联网直接收发网络包,而是通过一种特别的机制进行连接,这个机制就叫地址转换。
数字信息并不能一下子变成光信号,而是需要先将数字信息转换成电信号,然后再将电信号转换成光信号。这里的电信号非常简单, 1 用高电压表示,0 用低电压表示。将这样的电信号输入 LED、激光二极管等光源后,这些光源就会根据信号电压的变化发光,高电压发光亮,低电压发光暗。这样的光信号在光纤中传导之后,就可以通过光纤到达接收端。接收端有可以感应光线的光敏元件,光敏元件可以根据光的亮度产生不同的电压。当光信号照射到上面时,光亮的时候就产生高电压,光暗的时候就产生低电压,这样就将光信号转换成了电信号。最后再将电信号转换成数字信息,我们就接收到数据了。 这就是光纤的通信原理。
获得对方的路由信息之后,我们也需要将自身的路由信息告知对方。这样一来,对方也可以将发往我们所在子网的包转发过来。这个路由信息交换的过程是由路由器自动完成的,这里使用的机制称为 BGP。BGP:Border Gateway Protocol,边界网关协议。 根据所告知的路由信息的内容,这种路由交换可分为两类。一类是将互联网中的路由全部告知对方。如果运营商 D 将互联网上所有路由都告知运营商 E,则运营商 E 不但可以访问运营商 D,还可以访问运营商 D 后面的运营商 B、A 和 C。然后,通过运营商 D 就可以向所有的运营商发送包。像这样,通过运营商 D 来发送网络包的方式称为转接。另一种类型是两个运营商之间仅将与各自网络相关的路由信息告知对方。这样,只有双方之间的网络可以互相收发网络包,这种方式称为非转接,也叫对等。
多任务:操作系统提供的一种功能,可以让多个任务(程序)同时运行。实际上,一个处理器在某一个瞬间只能运行一个任务,但通过短时间内在不同的任务间切换,看起来就好像是同时运行多个任务一样。有些操作系统称之为 “多进程”。
多任务和多线程的区别在于任务和线程的区别。在操作系统内部,任务是作为单独的程序来对待的,而线程则是一个程序中的一部分。