课程链接:https://www.bilibili.com/video/BV1JV411t7ow

Chapter1 整体认知

1.1 Internet

1.1.1 分层

网络采用分层架构,自顶向下分为五层:
应用层 → 传输层 → 网络层 → 数据链路层 → 物理层
每一层只关心自己的职责,层与层之间通过接口通信。

1.1.2 计算机网络

先分清几个基本概念:路由器工作在网络层,交换机工作在链路层。

网络节点分两类:1. 路由器、交换机等交换设备 2. 主机及其运行的程序。

通信方式上,P2P(Point to Point)指网络中一个交换设备到另一个交换设备;E2E(End to End)指终端(PC/手机/Server等)到另一个终端。画图的时候,point 用圆圈表示,End 用方块表示。

链路也分两种:终端接入的叫接入链路,路由器之间的是主干链路。

1.1.3 协议

协议定义了通信的规则。PDU(协议数据单元)是同一层对等实体之间交换的数据单元,在不同层的叫法不同:应用层叫 message,传输层叫 segment。

从服务角度看计算机网络

计算机网络本质上是让分布式应用通过通信设施进行通信。

整个系统可以看作两部分:上面是应用进程,它们只认识其他的应用进程;下面是基础设施,负责在应用之下把所有数据传输到位。通信基础设施为 apps 提供编程接口,这样应用开发者不用关心底层传输细节。

1.2 网络边缘

网络可以分成三大块:边缘、核心和接入。上一节说的 End 就是边缘(edge),Point 是核心(core),把 PC 等边缘设备接入核心网络的过程,叫接入(access)。

边缘侧的通信模式主要有两种:

  • C/S 模式:客户端/服务器模式
  • P2P 模式:peer to peer,对等模式

传输层有一个重要概念:面向连接(也叫有连接)——通信前先建立连接,通信结束后释放。对应的就是无连接,直接发包。

TCP 就是面向连接的协议,提供三个关键保障:

  • 可靠传输
  • 流量控制
  • 拥塞控制

1.3 网络核心

网络核心的交换方式主要有两种:

电路交换——适合电话网络,不太适合计算机通信。建立连接耗时长,线路独享,带宽被分成片(piece),划分方式有频分、时分、波分。缺点是容易浪费资源。

分组交换——现代计算机网络的主流方式。带宽不分片,全用;数据在每个节点存储然后转发,每一跳都有存储时间和排队时间。问题是可能出现排队延迟和丢包。关键功能是路由和转发,核心思想是统计多路复用。

分组交换又分两类:

  • 数据报网络:无连接,每个数据包都携带目标主机的完整地址信息
  • 虚电路网络:每个交换节点需要维持连接状态

接入共享网络

  • 住宅接入:通过 modem(调制解调器)利用已有的电话线
  • 线缆接入
  • 无线接入

互联网结构——网络的网络

ISP 是全球互联的,ICP(内容提供商)会自建数据中心,就近接入 ISP。

延时类型

  • 节点处理延时:微秒级别
  • 排队延时:取决于拥塞程度
  • 传输延时:从节点把比特发到链路上的时间,微秒到毫秒级别
  • 传播延时:物理传播时间,几微秒到几百毫秒

其他概念

  • ICMP:互联网控制报文协议
  • SAP:服务访问点
  • DU:数据单元

Chapter2 应用层

2.1 应用层原理

应用层通信模式有三种:C/S 模式、P2P 模式、混合模式。

  • C/S 模式:不平等,资源集中在服务器,用户一多性能断崖式下降,可扩展性差。
  • P2P 模式:平等,性能平滑,但管理起来比较困难。

应用层通信需要解决三个问题:

1. 标识与寻址
进程间通信得有唯一的标识符——靠 IP 地址 + 端口号来定位。

2. 传输层的服务
无论用 UDP 还是 TCP,每次通信都得带上源 IP、源 port、目标 IP、目标 port,很麻烦。于是有了 socket API:用 TCP socket 时返回一个整型,代表这四元组;之后应用层通信只用这个整型就行了。这样做的目的:①便于管理 ②让穿过层间的信息量最少。

UDP socket:因为 UDP 是无连接的,不需要保存对端信息,接收方仅靠目标 IP 和端口就能区分不同报文。

注意:TCP 和 UDP 本身都不加密,都不安全。

3. 定义自己的协议
包括报文类型、语法、语义、规则。

传输层能提供的服务指标:数据丢失率、延迟、吞吐量、安全性。

举个例子:SSL 是应用层协议,跑在 TCP 之上,提供加密——HTTPS 就是跑在 SSL 上的 HTTP。

2.2 Web 和 HTTP

1. 请求格式

URL 的标准格式:

1
2
prot://user:psw@www.someSchool.edu/someDept/pic.gif:port
\[协议\]://\[用户口令\]@\[主机名\]/\[路径名\]:\[端口\]

2. 基本原理

  • HTTP 基于 TCP,TCP 向上层提供字节流服务——所以 HTTP 协议需要自己维护报文与报文之间的界限。举个例子:客户端 HTTP 给下层 TCP 传了两个 15k 的包;到了服务端,TCP 交给 HTTP 的是一个 30k 的包,HTTP 得自己把它拆回两个 15k。
  • 一开始需要基于 TCP 建立连接,默认端口 80。
  • HTTP 是无状态的。
  • RTT(往返时间):一个小分组从客户端到服务器再回来的时间。

3. HTTP 1.0 和 1.1 的区别

  • HTTP 1.0:非持久连接,每次传完一个对象就关 TCP 连接,每传一个对象都得花 2 个 RTT。
  • HTTP 1.1:持久连接,传完不关;又分流水型和非流水型两种。

4. 报文

编码用 ASCII。

  • 请求方法:GET / POST / HEAD,以及 PUT / DELETE(通常网络管理员用)
  • 响应:状态码

保存在客户端,有过期时间——这个比较熟悉。

6. Web 缓存

  • 可以在局域网建立缓存服务器,通常由 ISP 部署。
  • 好处:用户访问更快,也减轻了远程服务器的压力。
  • 前提是大家搜的东西有趋同性,这样更容易命中缓存。

2.3 FTP

FTP(文件传输协议)使用两个连接:

  • 控制连接:客户端连服务器的 21 号端口,做身份确认、浏览远程目录、请求下载等操作。
  • 数据连接:服务器主动连客户端的 20 号端口,发送数据。

控制和数据分开走,互不干扰。

2.4 Email

三个主要组成部分

  • 用户代理:邮件实际是从发送服务器到目标服务器,用户在客户端操作,所以叫”代理”。
  • 邮件服务器
  • 简单邮件传输协议(SMTP)

SMTP

  • 使用 TCP,端口 25。
  • 负责从发送方服务器把邮件传到接收方服务器。
  • 流程:握手 → 传输报文 → 关闭。
  • 命令用 ASCII 文本,响应是状态码 + 状态信息。
  • 报文必须是 7 位 ASCII 码。
  • 和 HTTP 不同:邮件里可以有多个对象(附件等),HTTP 一次通常只传一个对象。
  • 那中文、图片怎么传?——报文首部声明 MIME(多媒体编码),比如 base64。

邮件拉取协议

邮件到了接收方服务器后,用户怎么取?三种方式:

  • POP3:邮局访问协议,比较简单。
  • IMAP:Internet 邮件访问协议,功能比 POP3 更复杂。
  • HTTP:像 Hotmail 这类网页邮箱直接用 HTTP 拉取。