Network01 Intro
2022-08-14 15:41:57

网络

形式化的定义网络为图

计算机网络

层级

  • 应用层(application)
  • 网络层(network)
  • 传输层(transport)
  • 链路层(link)
  • 物理层(physics)

每层都向上提供接口,利用下层的服务实现更强的功能

逻辑上数据传输是在同层之间的,实际上是通过向下调用接口实现真正的传输,最终是物理信号在真实世界里的传输。

节点

特别的,计算机网络中的节点有两种类型

  • 主机(host)。通常用 \(\square\) 表示
  • 网络交换设备(packet switch),包括交换机、路由器等等。通常用 \(\bigcirc\) 表示

链路指连接两个节点的边,同样有两种类型

  • 接入网链路,边的一端为主机。
  • 主干链路,非接入网链路。

可以发现逻辑上我们只关心所有 \(\square\) 组成的网络,所有的 \(\bigcirc\) 只是为了中继。这是因为只有主机会产生和消费数据,而所有的交换设备只负责转发(当然也有交换设备会消耗数据,例如带拦截广告功能的软路由...)

互联网

以 TCP 和 IP 协议为主的最大的那个网络。感觉这个定义非常有意思。

粗略地讲,可以把网络划分为三个部分

  • 核心,即非主机的、提供网络连接功能的部分
  • 接入,即主机到核心的连接
  • 边缘,即所有主机,提供了网络的应用服务

边缘

主要是应用进程。这些应用通过 OS 提供的网络 api 来进行远程进程通信

通信模式

  • C/S 模式,即主从关系
  • P2P 模式,即对等关系

通信方式

  • 面向连接,即在正式通信前需要建立连接,进行准备。
  • 无连接

网络不过是另一种进程间通信,具体的细节对于用户进程而言是不可感知的。

核心

电路交换(circuit switch)

从电话网来

  • 通信双方建立专有连接(耗时)
  • 中间节点需要维护通信状态
  • 每段线路划分为固定的片,每个用户每次只能用其中一片
  • 划分的方式包括:
    • 时分复用
    • 频分复用

分组交换(packet switch)

  • 无需建立专有连接
  • 中间节点无需感知通信状态
  • 通信数据被划分成段传输。任意时刻,数据独占一段通信线路,可以实现同时间内不同线路的共享
  • 转发节点内有等待队列
  • 本质上是一种离散的时分复用,也叫 statistical multiplexing

还可以细分为 datagram switch 和 virtual circuit switch,后者本质上是希望 packet switch 能有 circuit switch 的某些特性提出来的 hack。

接入

这部分解决了我对一些名词的陈年疑惑...非常奇妙

调制解调器(modem)

最早是利用已有的电话线路接入网络的。modem 负责把数字信号调制成音频信号,由电话线路传输后入网。

  • 上网和打电话不能同时进行
  • 带宽很低
  • 成本低,复用线路
  • 是专线

有些实现把电话线频分复用,专门留出一部分给网络。其中又分出上下行专用的带宽,这样就可以同时打电话和上网了。这样的方式叫 DSL(Digital Subscriber Line)

有线电视(cable)

同样是类似的思路,利用已有的有线电视线路。

这下终于知道为什么以前爹妈拔掉机顶盒的线就没法上网了。

电网

可以调制解调到电力(电流)上...

物理媒体

  • 导引性媒体,有型介质、存在导体、可以定向传播,例如光纤、电缆
  • 非导引性媒体,例如电磁波

四层

应用层

注意到网络提供的服务本质上就是 RPC,因此协议做的事情和 shell 命令解析是同样的。

有 HTTP FTP SMTP POP3 一大堆协议。这是因为应用很多,不同应用的协议通常不共享。

应用层的许多协议因为历史原因,都是明文传输数据的(即协议本身不负责内容的加密)。解决的办法是在此之上加一层加密层(例如 HTTP + TLS = HTTPS),这样明文传输的就是加密后的内容了。

进程通常在 OS 中通过 socket api 来管理和使用它与其它进程的连接。连接(即进程-进程对)与 socket 是一一对应的关系,而和端口号没有数量关系(一个进程可以通过一个端口和多个进程建立连接,此时多个连接共享一个端口,各自通过不同的 socket 把数据传递给对应的进程)

传输层

提供的是进程到进程的字节流通讯,进程通过端口号区分。

TCP(Transmission Control Protocol)

  • 面向连接,通信前需要握手建立连接
  • 可靠服务,保证顺序、正确性等等
  • 流量控制,可以协调发送方和接收方的传输速度
  • 拥塞控制,可以适应网络的拥堵

UDP(User Datagram Protocol)

  • 无连接
  • 不可靠
  • 无流量控制
  • 无拥塞控制

网络层

IP 协议提供了主机到主机的不可靠通信。这里主要包括

  • 路由,即修改和查询路由表这个数据结构
  • 转发,查询路由表,把 packet 发给下一跳设备
  • 缓冲,提供队列缓冲已处理但还未轮到发送的 packet
  • TTL,丢弃可能走入环路的包
  • 校验

链路层

也有可靠和不可靠的协议,通常介质越可靠则协议越不可靠;介质越不可靠则协议越可靠。

还有被动介质的说法,例如 WiFi 的工作原理决定了所有的数据都会被发送给终端设备,那些不属于目标设备的数据帧将会被终端设备自行丢弃。这使得同一 WiFi 下的终端设备可以彼此看到对方的数据帧,从而还原出数据包,这就带来了潜在的窃听风险。