课程链接: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 | 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(通常网络管理员用)
- 响应:状态码
5. Cookie
保存在客户端,有过期时间——这个比较熟悉。
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 拉取。