思考为什么网络是这样的?能做什么?
概念与术语
| 概念 | 含义 | 
|---|---|
| 进程 | |
| 线程 | |
| 协程 | |
| 并行 | |
| 并发 | |
| 同步 | |
| 异步 | |
| 堵塞 | 
| 缩写 | 全称 | 中文 | 含义 | 
|---|---|---|---|
| LAN | 局域网 | ||
| ISP | Internet Service Providers | 互联网服务提供商 | |
| ICP | Internet Content Providers | 互联网内容提供商 | |
| DC | Data Center | 数据中心 | |
| RTT | Round Trip Time | 往返延迟 | |
| PDU | Protocol Data Unit | 协议数据单元 | 在传输系统的每一层都将建立协议数据单元(PDU)。PDU 包含来自上层的信息和当前层的实体附加的信息 | 
| SAP | service access point | 服务访问点 | |
| DU | Data Unit | 数据单元 | |
| IDU | Interface Data Unit | ||
| SDU | Service Data Unit | 服务数据单元 | |
| PDU | Protocol Data Unit | 协议数据单元 | |
| ICI | Interface Control Information | ||
| End Point | 端节点 | ||
| Peer | 对等体 | ||
| SDU | 
什么是计算机网络
从服务角度
计算机网络是分布式服务 + 提供服务的基础设施(包括网络本身)
从具体构成角度
- 边缘系统(edge)
 - 接入系统(access)
 - 网络核心(core)
 
- Edge 通过 access 接入 core,目的是进行 edge 之间的数据交换;核心就像一个大水池,有无数的河道通向不同 edge
 - 网络里面还有网络,有不同层级(局域网,网域网)
 
什么是协议
规定了格式,次序,动作的规范、标准
边缘系统
模式
- 客户端 - 服务端
- 可扩展性不强
 
 - P 2 P 模式
每个节点同时是客户端和服务器- 多用于文件传输(e.g.: 迅雷),可以同时从多个服务器请求数据片段
 
 
方式
- 面向连接(TCP)
 - 无连接(UDP)
 
网络核心
线路交换(Circuit Switch)
通过信令系统为两个节点之间找到独享线路
性能有保障
将带宽分片
一般用于电话
带宽划分方式
- 频分(Frequency-division multiplexing)
 - 时分(Time-division multiplexing)
 - 波分(Wave-division multiplexing)
光纤通信 - CDMA
 
不适合计算机通信
- 建立时间长
 - 计算机数据交换有突发性,会造成资源浪费
 - 可靠性?
 
分组交换(Package Switch)
- 把数据分成包
 - 使用线路全部带宽
 - 存储 - 转发:存储在一个传输主机上之后再传给下一个
- 牺牲:消耗了额外的排队延迟和存储时间,并且如果路由器缓存用完,分组会被丢弃
 - 换取:不会一直独享线路,从而可以共享线路资源
 
 
路由算法(全局):计算分组传输路径
转发(局部):将分组从路由器输入链路转移到输出链路
存储转发方式
- 虚电路(virtual circuit)
有连接,查虚电路表建立虚电路 - 数据报(Datagram)
无连接,独立路由 
分组延迟
每一跳(hop)要经历
- 节点处理延迟
 - 排队延迟
不确定 - 传输延迟
 - 传播延迟
- LAN: 还没传输完已经收到,信道容量大
 - WAN: 传输完了还没收到,信道容量小
 
 
排队延迟取决于流量强度(Intensity)
取值范围 
R: 带宽
L: 每个分组长度(字节数)
a: 分组数量
分组丢失
三种处理方案
- 上一条链路重传
 - 源主机重传
 - 不重传
 
吞吐量
在源端和目标端之间传输的速率(数据量/单位时间)
- 平均
 - 瞬时
 
吞吐量
瓶颈链路:路径上吞吐量最小的部分链路
一条链路使用的主机对越多,人均带宽越小,更可能是瓶颈链路
接入网和物理媒体
BPS(带宽)共享 or 独享
接入方式
住宅接入 - 调制解调(modem)
把上网数据调制加载到音频信号上,在电话线上传输,在局端解调出来
调制方式
- 调频
 - 调幅
 - 调相位
 - 综合调制
 
DSL (Digital subscriber line) & ADSL
4 k 以下带宽用于语音通话,4 k 以上
拨号调制解调器
线缆网络
有线电视公司把电视信号线缆双向改造
FDM:在不同频道传输不同信道数据,数字电视和上网数据(上下行)
企业接入(Ethernet)
无线接入
物理媒体
导引型媒体
信号沿着固体媒介被导引:同轴电缆、光纤、双绞线
e.g.: 双绞线(TP)——两根绝缘铜导线拧合
非导引型媒体
开放的空间传输电磁波或者光信号,在电磁或者光信号中承载数字数据
物理媒体类型
- 双绞线
屏蔽双绞线(STP)——进一步减少电磁干扰;无屏蔽双绞线(UTP) - 同轴电缆
两个铜导体同心而非并行
用作引导型共享媒体 - 光纤
 - 陆地无线电信道
 - 卫星无线电信道
 
ISPs
ISP(Internet Service Providers) 互联网服务提供商
组织和个人通过 ISP 接入互联网
那么 ISP 如何互联呢?
全局 ISP
(全局范围内覆盖)客户 ISPs 和提供者 ISPs 有经济合约
形成市场竞争、合作

ICP 自己部署 DC
靠近全局 ISP,解决全球服务问题和成本问题
Internet 结构
第一层 ISP
e.g.: UUNet, BBN/Genuity, Sprint, AT&T
国家国际覆盖,带宽大,速率高
第二层 ISP:更小的 ISP(通常是区域性)
第三层 ISP:Local ISP
ISP 之间的连接
松散的层次结构
| 连接方式 | 是否有费用结算 | 内容 | 
|---|---|---|
| POP | 有 | 上层到下层 | 
| 对等接入 | 无 | |
| IXP | 无 | 多个对等 ISP 互通 | 
| ICP | 有 | ICP 自己部署专用网络 | 
协议
协议层次
layer 好处
- 关注点分离 separation of concerns
 - Modularity 层次首先将复杂问题分解为相互独立的子问题。
 - 可以更好地组织和分配,结构清晰,不会混乱
 - 同时子问题可以引进先进地解决方案,可迭代性强
 - 下层向上册提供服务同时可以加入新的服务
 - peer-to-peer communication
害处 - 效率低
 
封装 Encapsulation
- 加上一个 header 和 footer
 
{
  "versionAtEmbed": "0.2.2",
  "filepath": "Ink/Writing/2024.5.24 - 0.30am.writing"
}服务模型
服务访问点
- 用处:用来处理服务谁
 - 形式:原语(primitive)
 - 地方:层间接口
 - 服务访问者通过 SAP 来请求服务,服务方通过原语告诉访问者提供什么服务
 - 类型
面向连接/无连接 

- 协议和服务的关系

 
Internet 协议栈
各层次协议数据单元(五层)
- 应用层:message 报文
 - 传输层:segment 报文段
 - 网络层:packet 分组 datagram 数据报
 - 链路层:frame 帧
 - 物理层:bit 位
 
{
	"versionAtEmbed": "0.2.2",
	"filepath": "Ink/Writing/2024.5.23 - 22.47pm.writing"
}- 应用层
- 实现网络应用
 - 协议非常多
 
 - 传输层
- 功能
- 区分进程到进程
 - 让不可靠变可靠
 
 - 协议
TCP UDP 
 - 功能
 - 网络层
在链路层基础上,传输以分组为单位的端到端(E2E)的数据- 功能
- 转发
 - 路由
 
 - 协议
IP 路由协议(一系列) 
 - 功能
 - 链路层
点到点(P2P)之间传输以帧为单位数据- 协议
PPP 802.11 (WIFI) Ethernet 
 - 协议
 - 物理层
传输比特- 发送端
把链路层传过来的帧(frame)变成物理信号 - 接收端
把物理信号还原成帧信号 
 - 发送端
 
物理层和链路层协议被封装在网卡中提供
- 表示层和会话层是干什么的? link #ticktick %%[ticktick_id:: 6907103e751f58429840cd81]%% ➕ 2024-06-19 ✅ 2024-06-24
 
应用层
应用层协议原理
对话形式
- P2P
参与的主机间歇性连接且可以改变 IP 地址- 优点
自扩展性 - 缺点
难以管理 
 - 优点
 - C/S
 - 混合模式
C/S+P2P- Napster
文件搜索:集中
文件传输:P2P - 即时通信
聊天:P2P
在线检测:集中 
 - Napster
 
进程标识和寻址
SAP+IP+Port
采用的传输层协议
- TCP or UDP
 
TCP 和 UDP 的端口号不同
约定的端口
- HTTP: TCP 80 Mail: TCP 25 ftp: TCP 22
 
传输层如何向应用层提供服务
包含内容
- 谁发的
 - 发给谁
 - 货物
 
套接字 socket
为了减少传输的信息量,便于管理,发明了套接字(socket)
==用一个整数表示包含的内容 ==
TCP socket
- 4 元组 (源 IP,源 port,目标 IP,目标 port) 的一个具有本地意义的标示
 - 维持端节点之间的会话关系
 
UDP socket
- 二元组(源 IP+ 源 port)的本地标识
 - 传输报文时要附上目标 IP 和 UDP port
 - 指定一个端节点,不维持会话关系
 
如何实现应用
根据应用层协议 -> 写程序
应用层协议
定义了运行在不同端系统上的应用 进程如何相互交换报文
- 公开协议
- 由 RFC 文档定义
 - 允许==互操作 ==
 - 如 HTTP, SMTP
 
 - 专用(私有)协议
- 协议不公开
 - 如:Skype
 
 
衡量指标
- 数据丢失率
 - 吞吐
 - 延迟
 - 安全性
常见应用对传输服务的要求

 
传输层提供的服务
TCP & UDP 服务
UDP 存在意义
- 端口支持
 - 工作量少(无需可靠性,建立连接需要)
 
Internet 应用及其应用层协议和传输协议

NAT
NAT 会建立一个映射,把公网 IP 的不同端口映射到不同的内网 IP
现在家庭一般都有内网和外网 IP,也就是都通过 NAT 和外网相连
Web 与 Http
Http 使用 TCP,端口号为 80
响应时间模型

往返时间 RTT:一个小分组从客户端到服务端,再回到客户端的时间
响应时间
- 用于发起 TCP 请求的 RTT
 - 用于发送 HTTP 请求并等待 HTTP 响应的 RTT
 - 文件传输时间
 
持久与非持久
持久
- 非流水线
 - 流水线:不用等前一个请求响应收到后就发送下一个请求
 
HTTP 请求报文
ASCII 码(可读)
结构


注:cr(回车\r)lf(换行\n)是 http 标准的换行格式,sp 是空格
HTTP 响应报文

TCP 提供字节流服务,不负责字节数边界划分
HTTP 响应状态码
- 使用 cookies 不安全,容易隐私泄露,被更改
 - 不利于持久维护
 - 占用传输资源
 - 用其他网站的访问资源,挖掘出用户的深层需求、喜好…
 
版本迭代
HTTP/1.0
- 简单的 TCP request & response
HTTP/1.1 - keep-alive 字段,告诉 server 是否要继续请求(无需再次建立 TCP 连接)
 - 用满带宽,提高并行(TCP 的拥塞控制起作用)
SPDY → HTTP/2.0 - pipeline(图片等可以异步加载,先传输网页)
 - 去掉冗余的头部(比如说浏览器信息)
 
Cookies
Web 缓存
网络的 2-8 定律:80% 的人访问 20% 的网站
优点
问题
- 对象有更改
 - → conditional get: 加一个头部,有修改就获取,没修改只是传回一个无修改信息
 
FTP(文件传输协议)
再 C-S 间建立两个 TCP 连接,数据传输(20 端口)和控制传输(21 端口)分别进行
邮件软件是 FTP 的用户代理
STMP 协议
- 持久连接
 - 收发邮件报文
 - 使用 TCP 协议,25 端口传输报文
 - 三个阶段:握手,传输,关闭
 - ASCII 码格式(可读),报文必须为 7 位 ASCII 码
 - 结构

- 首部(From, To, Subject)
 - 主体,ASCII 码
- MIME 多媒体邮件扩展(multimedia mail extension)<RFC 2045, 2056>:将主题进行 base64 编码,将 ASCII 之外的字符转化成更长的 ASCII 码字符

 
 - MIME 多媒体邮件扩展(multimedia mail extension)<RFC 2045, 2056>:将主题进行 base64 编码,将 ASCII 之外的字符转化成更长的 ASCII 码字符
 
 
邮件拉取协议
POP3, TMAP, HTTP
DNS
DNS 是在应用层给其他应用(e.g.: Web 应用,FTP 应用,STMP 应用)使用的基础设施
IP 地址 -> 有意义的字符串
P2P 应用
分类
- 结构化
 - 非结构化
- 集中化目录
 - 完全分布式
 - 混合体
 
 
CDN
用来解决视频等占用大量带宽的杀手级应用
视频
- 高码率
 - 压缩
- 空间冗余
同一帧的相同像素可压缩 - 时间冗余
相邻帧之间只保留变化的像素 - CBR: (constant bit rate): 以固定速率编码
 - VBR: (variable bit rate): 视频编码速率随 时间的变化而变化
 
 - 空间冗余
 
流化服务
多媒体流化服务 DASH(Dynamic, Adaptive Streaming over HTTP)
告示文件(manifest file): 提供不同块的 URL
把一个视频分成若干块,每个块进行多种编码,在客户端通过告示文件(manifest file),测算(自身缓冲区大小,带宽…)出之后能最快下载的最高码率的视频块,从而最大程度提高视频码率和流畅度
自适应下载
- 下载什么码率(带宽,缓冲区大小…)
 - 从哪里下载(带宽,距离…)
 - 什么时候下载(缓冲区有多大)
 
CDN(Content Distribution Network)
在全网部署多个 CDN 服务器,提前拷贝需要的流媒体资源,用户向服务商请求该资源时,通过域名解析重定向,转到距离最近的 CDN 服务器请求该资源
对于用户来说,整个过程是被隐藏的,只需要配置好服务器的重定向和 CDN 节点
Socket 编程
- 控制报文 vs. 数据报文
 - 带内、带外集中式 vs. 分散式
 - 无状态 vs. 维护状态
 - 可靠的 vs. 不可靠的报文 传输
 
传输层
多路复用 & 解复用
UDP(User Datagram Protocol 用户数据报协议)
不保证可靠
- 数据丢失
 - 乱序
 
无连接 -> 减少延迟
- UDP 发送与接收端无需握手
 - 每个 UDP 报文段被独立处理
 
适用于
- 流媒体
 - DNS
 - SNMP
应用传输速度=主机网络速度 
格式

头部
- 源端口和目标端口(2*2=4 字节)
 - 长度(2 字节)
 - 校验和:EDC(差错检测码)
 - 一共 8 byte,32 bit
 
EDC(Error Detection Code)
把校验范围分成若干 16bit 的小块,每个块视作数字,求和得到的值为校验和
求和细节
- 进位回滚(多出来的位到最低位再加)
 - 取反
 
结果检测
- 若校验范围 + 校验和 ≠ 111…,则错误
 - 若和全为 1,则大概率正确(小概率校验码和检测范围出错结果刚好匹配:残存错误)
 
TCP
不出错,不乱序
超时重传
ACK
序列号
流量控制
拥塞控制
- slow start,开始时,
 - 没检测到拥堵,+1 MSS
 - 检测到拥堵,/2
 
网络层
两大层面
- 宏观层面的 Control Plane,使用 routing 算法
 - 微观层面的 Data Plane,使用 forwarding 算法
 
Data Plane
路由器 Router
line termination | link layer protocol (In)| swtich fabric |(Out) link layer protocol | line termination
IO 如何尽量做到不限速?
- 最早使用 CPU,通过内存读写
 - Bus,bus contention
 - interconnection network: crossbar → multistage switch → 并行组合成更高阶传输
 
{
	"versionAtEmbed": "0.2.2",
	"filepath": "Ink/Writing/2024.5.22 - 12.16pm.writing"
}Queuing
Input Port 排队
- Head of Line(HOL) blocking
Output Port 排队 - Bufferinng
- 多大 buffer?N flows: ,如果太大,会导致 TCP 的拥堵检测迟钝(一直填不满 Buffer),增加 RTT
 - → Drop policy(超出 buffer)
- Priority Drop
 - Tail Drop
 
 - → Marking,网络辅助的拥塞控制时,标记一些拥堵标志位
 
 - Sechedule discipline 选择谁下一个传输?
- First Come First Serve(FCFS)
 - priority
 - round robin
 - weighted fair queuing
 
 
三个 "clear, bright lines"
- no blocking
 - no throttling
 - no paid prioritization
 
Forwarding
Destination-based Forward
- 只根据 dest IP address 决定转发(唯一动作)
 - 分成多个 link interface,longest prefix matching(LPM) 区分
Generalized Forward - 多个 head fields,多种 action
 - 04 OpenFlow

 - 应用
- 局部
- Router
 - Switch(链路层)
 - 防火墙
 - NAT
 
 - 全局
- 与 router 相连的 openflow SDN统一管理 forward table 来控制整体上的转发策略
 
 
 - 局部
 
IPv4

statistical multiplexing
- 网络的使用一般是突发性的
 - 让 packet switching 尽可能简单高效,只关注于数据的转发,就可以让每个人共享全部带宽
 
Address Structure
- 最早是分成固定类别
 - 后来 Classless Inter-Domain Routing(CIDR)
- e.g.: /16 表示长度 16 的 netmask 掩码,能表示 的地址
 
 
网络层的 IP 地址和链路层的 MAC 地址,设计之初是低耦合但实际却是高耦合的。所以 ARP 协议直接把两者做了一个映射关系。
ARP 协议
- 广播 - 回应
 - ARP 报文

 - 在局域网内广播目标 IP,自己的 IP 和 MAC 地址,所有接收到报文的更新源 IP 和 MAC 的映射。从而维护了一个 IP 和 MAC 的映射关系
 - 映射保存时间视设备而定
 
IPv6
- 09 IPv6
 

- no checksum
 - 40 bytes 固定长度头部
 
IPv4 → IPv6
- 通过一个 IPv4 的 tunnel 连接 IPv6 路由器
 
{
	"versionAtEmbed": "0.2.2",
	"filepath": "Ink/Writing/2024.5.30 - 14.12pm.writing"
}- 假设一个 IPv6 报文 A → F
 - B → C 时,会直接套一个 IPv4 的头,指定 src 为 B,dest 为 E,之后通过 IPv4 转发到 E
 - E 会拆开 IPv4 的头部,得到里面的 IPv6 报文,之后通过 IPv6 转发到 E
 
Control Plane
Routing
对一个网络,找到某一个节点为根节点,叶子节点为端节点的最小生成树
Dijkstra
Bellman Ford
动态规划思想
每个节点执行三个步骤
- wait,等邻居给自己消息
 - recompute,重新算到其他所有端节点的最小值 
消息滞后 - good news travels fast
 - bad news travels slow
- infinity problem
 
 
OSPF
SDN
ICMP
- 背英语 link #ticktick %%[ticktick_id:: 69071eafb9b8ab169adbaad3]%% 📅 2025-11-02