4.2 互联网 (The Internet)

2022-10-02
5分钟阅读时长

互联网是多个网络分布式连接构成的,其中由无数日益增多的互联设备组成。

计算机需要先连接到局域网 (Local Area Network,LAN)—— 即 WIFI 路由器所连接的所有设备组成的小型网络,局域网再连接至广域网 (Wide Area Network, WAN)。

广域网中的路由器又归属于「互联网服务提供商」(Internet Service Provider, ISP),旗下有多个不同范围大小的广域网互相连接。

跳跃主干网络获取资源

若想获取某个资源,数据包(packet)需要先经由互联网主干(由一群超大型、带宽超高路由器组成)到达资源的服务器。

在这个过程中,数据包可能要跳个 10 次才能到达(4 跳进主干,2 跳穿越,4 跳进服务器)。Windows, Mac OS 或 Linux系统,可以用 traceroute 来查看具体跳数。

4.2.1 IP

互联网协议(Internet Protocol, IP) 中规定了数据包 (packet) 在互联网中传输的标准,是非常底层的一种协议。

数据包的头部 (前缀) 是指“关于数据的数据”,又名「原数据」(metadata) 。头部指存储了目标地址,无法用于区分具体将数据交给目标地址的电脑中的哪个程序。

因此需要更高层的协议来区分程序, IP 负责把数据包送到正确的计算机,而 UDP 负责把数据包送到正确的程序中。

4.2.2 UDP

用户数据报协议(User Datagram Protocol, UDP) 是一种传输层协议,其头部包含着端口号 (port) 和校验和 (checksum)等元数据。

每个想要访问网络的程序,会向操作系统申请唯一的端口号。当数据包到达时,根据端口号将数据交付给不同的程序。

端口号

校验和用于检验数据是否正确,最简单的方式是将数据求和后对比。在 UDP 中,校验和以 16bit 的形式进行存储,若求和高于 16 位所能表示的最大值则舍弃高位。

校验和

接收方收到数据包后会重新计算一次数据和,再与头部中的校验和进行对比,若不一致,则可判定数据可能因功率波动或电缆故障等原因而出现了错误。

UDP 不提供修复数据或是数据重发的机制,检验出错后 UDP 会直接丢包,且其无法确认数据包是否已经到达。但其优势在于简单快捷,一些视频通话应用更加青睐。

4.2.3 TCP

传输控制协议(Transmission Control Protocol, TCP) 较之 UDP 的“尽力而为”而言更加可靠,其可以确保“所有数据均必须到达”。TCP 协议最初是和 IP 协议一齐出现,称为 TCP/IP 协议,后拆分为两个协议。

TCP/IP

TCP 有许多更高级的功能,最重要的几个特性如下:

有序

TCP 数据包有序号(sequence numbers),就算传输过程中出现了乱序到达的情况,接收方仍然可以利用序号对数据包进行正确排序。

确认码

TCP 要求接收方的电脑收到数据包、检查"校验和"无误后(数据没有损坏),给发送方发一个确认码 (Acknowledgement, ACK) ,代表收到了数据包。

发送方在收到上一个数据包的确认码之后,会接着再发送下一个数据包。

ACK

若确认码因延误或丢失使得在一定时间后发送方仍未收到,则发送方会再次重发数据包。若接收方收到重复的数据包,可根据序号加判断是否重复需要丢弃。

此外,TCP 可以一次发送多个数据包,等待接收多个确认码,使得效率提升。

拥塞控制

在 TCP 协议中,可以借由确认码的成功率和来回时间来推测网络的拥塞程度,进而调整发送数据包的数量。

简言之,TCP 可以处理乱序、丢失、重发问题,还可以根据网络拥塞情况来自动调整传输速率。

但为了提高可靠性而存在的 ACK 使得数据包数量翻番,信息传输的密度下降,不适用于像是在线射击游戏等对时间要求很高的程序使用。

4.2.4 DNS

计算机根据“IP 地址”和“端口号”对网站进行访问,比如 谷歌的 IP 地址和端口号是 172.217.7.238/80。但数字不利于人类记忆识别,用文字表示的域名 google.com 较之更为友好。

因此,需要使用特殊服务实现“IP 地址/端口号”和“域名”之间的映射对应关系,这种服务称为「域名系统」(Domain Name System, DNS) 。

DNS

输入域名后,浏览器会访问 DNS 服务器去询问其对应的 IP 地址是什么。接着 DNS 会查表,若表项存在则返回相应内容。

因注册的二级域名就已高达数千万个,为了更好地管理,DNS 使用树状结构来存储映射关系。

DNS 结构树

域名自右往左为:「顶级域名」(Top Level Domains, TLD) 、二级域名(lower level domains)、子域名(subdomains) etc.

因 DNS 的结构树非常大,因此这些数据都分布在许多 DNS 服务器中,不同的服务器负责树中不同部分的查询返回服务。

4.2.5 OSI 模型

OSI 模型

开放式系统互联通信参考模型 (Open System Interconnection, OSI) 是一种将网络通信划分为多层次的概念性框架,每层各自处理一部分问题,利用抽象以便更好地简化通信。具体分层如下:

  1. 物理层 (Physical Layer):线路里的电信号,以及无线网络里的无线信号。
  2. 数据链路层 (Data Link Layer):负责操控"物理层",有媒体访问控制地址(MAC)、碰撞检测、指数退避,以及其他一些底层协议。
  3. 网络层 (Network Layer):负责各种报文交换和路由。
  4. 传输层 (Transport layer):有 TCP、UDP 等协议,负责在计算机之间进行点到点的传输,同时提供检测和修复错误的服务。
  5. 会话层 (Session Layer):使用 TCP 和 UDP 来创建连接,传递信息,然后关掉连接,这个过程称为「会话」(session) 。
  6. 表示层 (the Presentation Layer) :
  7. 应用程序层 (Application Layer) :其中有浏览器,Skype,HTML解码,在线看电影等。