1
0
mirror of https://github.com/OmegaZhou/408-notes.git synced 2026-10-28 19:04:23 +08:00

finish computer network

This commit is contained in:
Zhou
2020-07-19 20:57:11 +08:00
parent b977138da0
commit 2fcd6ec961
5 changed files with 1039 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View File

@@ -0,0 +1,324 @@
# 传输层
## 功能
* 提供应用进程间逻辑通信
* 差错检测
* 提供无连接或面向连接的服务
* 复用和分用
* 面向连接的服务特有功能
* 连接管理
* 流量控制和拥塞控制
## 传输层寻址和端口号
* 使用端口号标识进程
### 端口号分类
#### 熟知端口
* 0~1023
* 常见熟知端口
| 应用名 | 端口号 |
| ------------------------ | ------------------------------ |
| FTP | 21(控制端口),20(数据端口) |
| TELNET | 23 |
| SMTP | 25 |
| DNS | 53 |
| TFTP | 69 |
| HTTP | 80 |
| SNMP(简单网络管理协议) | 161 |
| HTTPS | 403 |
### 登记端口
* 1024~49151
* 为没有熟知端口号的应用程序使用,使用这类端口号需要在IANA登记,避免重复
### 客户端端口或短暂端口
* 49152~65535
* 客户进程运行时动态运行时的临时端口
* 通信结束后,此端口自动空闲出来
## 套接字(SOCKET)
* 用于标识某一主机的某个进程
* Socket= ( IP地址 , 端口号 )
## 无连接和有连接服务
### 无连接服务(UDP)
* 传输数据无需建立连接
* 数据到达后无需确认
* 不可靠交付
* 报文头部段,传输开销小,时延较短
### 有连接服务(TCP)
* 面向连接
* 不提供短播,多播服务
* 报文头部长,传输开销大
## UDP(用户数据报协议)
### 优点
* 无需连接
* 无需维护连接状态表
* 首部只有8B
* 发送速率不受网络拥塞状态影响(无拥塞控制),适合实时性应用
* 支持一对一,一对多,多对一,多对多的交互通信
### 数据报组成
* 首部字段:8B
* 数据字段
### 数据单元
* 数据报(传输上层交付的整块数据)
### 首部格式
* 源端口:2B
* 目的端口:2B
* 长度:2B,(数据报长度最大为2^16^-1B,但一般取512B以下)
* 校验和:2B,校验伪首部,首部和数据
### 伪首部
* 仅用于校验
* 可从IP数据报中提取
* 不向下传送,也不向上递交
* 长度:12B
* 组成
* 源IP地址:4B
* 目的IP地址:4B
* 全0字段:1B
* 协议字段:1B,UDP为17
* UDP长度字段:2B
### UDP校验
#### 发送方步骤
1. 添加12B伪首部
2. 将全零字段填入校验和字段
3. 添加8B首部
4. 添加数据字段(若数据字段为奇数,再补一个全0字节,该字节不发送,仅用于计算校验和)
5. 将这些数据以4B为一组,使用二进制反码计算进行累加
6. 得到的结果的反码即为校验和,将其填入校验和字段
#### 接收方步骤
1. 添加12B伪首部
2. 添加8B首部
3. 添加数据字段(若数据字段为奇数,再补一个全0字节,该字节不发送,仅用于计算校验和)
4. 将这些数据以4B为一组,使用二进制反码计算进行累加
5. 若结果为**1111 1111 1111 1111**(全1),则数据无误
#### 差错处理
* 可丢弃,也可附上错误报告交付上层
#### 优点
* 简单
* 速度快
#### 缺点
* 检错能力差
## TCP(传输控制协议)
### 特点
* 面向连接
* 端到端
* 可靠交付服务
* 全双工通信
* 使用缓存
* 发送缓存
* 准备发送的数据
* 已发送未确认的数据
* 接收缓存
* 按序到达但未交付上层的数据
* 不按序到达的数据
* 面向字节流
### 数据单元
* 报文段(认为所有数据都是无结构字节流,不按结构切分数据)
### TCP报文段
#### 首部长度
* 最短为20B
* 可以4B为单位增加首部选项
* 最大长度为60B
#### 组成
* 源端口:2B
* 目的端口:2B
* 序号:4B,每一字节数据编上一个序号,该字段为本次传输数据的第一个字节序号
* 确认号字段:4B,期待的下一个报文段的第一个序号,确认号为N,则证明前N-1个数据已收到
* 数据偏移:4位,数据字段距离报文段起始处的距离,代表首部长度
* 保留字段:6位,全0
* 紧急位字段URG:1位,URG=1,代表该数据有高优先级
* 确认位ACK:1位,连接建立后必须把ACK置1
* 推送位PSH:1位,置1代表应尽快交付数据,无需等缓存填满
* 复位RST:1位,置1代表线路出现严重错误,需要断开连接重连
* 同步位SYN:1位,SYN=1,代表请求连接或连接接收报文
| SYN | ACK | 含义 |
| ---- | ---- | ------------ |
| 1 | 0 | 请求连接 |
| 1 | 1 | 同意建立连接 |
* 中止位FIN,1位,置1时代表此报文段发送方数据已发送完毕
* 窗口字段:2B,代表报文段发送者当前的接收窗口大小
* 校验和:2B,与UDP一样的计算方式,协议字段改为6
* 紧急指针字段:16位,代表本报文段的紧急数据长度(单位B),紧急数据放于报文段数据开头,与URG一同使用,紧急数据不经过缓冲区直接发送
* 选项字段:长度可变
* MSS:报文段数据最大长度
* 填充字段:使首部长度为4B的整数倍
### 连接管理
#### 规定
* 当SYN=1时,不携带数据,但消耗一个序号
#### 建立连接
* 三次握手
* 主机A向主机B建立连接步骤
1. A发送SYN=1,ACK=0,seq=x
2. B发送SYN=1,ACK=1,seq=y,ack=x+1
3. A发送ACK=1,ack=y+1(该报文段可携带数据,不携带数据时,不消耗序号)
#### 断开连接
* 四次挥手
* 主机A与主机B断开连接步骤
1. A发送FIN=1,seq=u
2. B发送ACK=1,seq=v,ack=u+1
3. A关闭发送数据通路
4. B继续发送数据
5. B发送FIN=1,seq=w,ack=u+1
6. A发送ACK=1,seq=u+1,ack=w+1
7. A等待2MSL,关闭连接
#### A等待2MSL的原因
* 保证网络中所有报文段消失
* 若A发送的ACK丢失,B将重发FIN,二者花费时间不会超过2MSL
* 若重传FIN丢失,B将无法正常关闭
#### 四次挥手原因
* 一个FIN和一个ACK断开一端发送数据通道
#### 三次挥手原因
* 采用二次挥手
* 若ACK丢失,A将不知道B是否准备好连接,也不知道B起始序号
* B将认为A准备好数据通信
* A会认为连接未建立,忽略B的所有数据,产生死锁
### 可靠传输
#### 编号和确认
* 使用累计确认
* 支持可选选项**选择确认SACK**(携带已收到的数据段),兼容累计确认
#### 重传
* 重传时延计算,使用加权平均
* $平均RTT=(1-\alpha)*(平均RTT)+\alpha*(新时延) \ \ \alpha一般取0.125$
* $重传时间RTO=\beta*平均RTT \ \ 其中\beta>1$
* Karnn算法
* 发生重传后,就不采用其作为时延样本
* 令$RTO=\gamma*RTO \ \ 其中\gamma>1,一般取2$
* 不发生重传时,再使用往返时延更新RTT
### 流量控制
* 采用滑动窗口
* TCP为每个连接建立持续计数器,若一方接到**零窗口通知**,则启动计数器,到期时发送零窗口探测报文段,若窗口大小仍为0,重置计数器
* 发送时机控制
* TCP维持一个MSS变量,当缓存区数据达MSS大小时,发送
* 发送方使用PSH字段指名发送
* 计数器到期,将缓存区不超过MSS的数据发送
### 拥塞控制
#### 变量定义
1. 各变量单位为MSS
1. 接收窗口rwnd:接收方目前的接收窗口大小
2. 拥塞窗口cwnd:发送方根据网络情况估计的窗口大小
3. $实际发送窗口=min(cwnd,rwnd)$
4. ssthresh:慢开始门限
#### 算法
##### 慢开始算法
1. 初始时,设cwnd=1
2. 每收到一个ACK报文cwnd+=1
3. 故在网络畅通且不断发送数据的情况下,第i个RTT后,cwnd=2^i^
##### 拥塞避免算法
* 每隔1个RTT,cwnd+=1
##### 算法选择
* 当cwnd<ssthresh时,使用慢开始算法
* 当cwnd>ssthresh时,使用拥塞避免算法
* 当cwnd=ssthresh时,任意选择一个(一般使用拥塞避免)
#### 拥塞处理
* 发送超时时,ssthresh=cwnd/2
* cwnd=1
##### 快重传算法
* 接收方向发送方连续发送3个重复ACK
* 发送方收到后,立刻重传缺失的报文段
#### 快恢复算法
- 发送方收到连续3个重复确认后,令ssthresh=cwnd/2
- cwnd=ssthresh
- 执行拥塞避免算法

View File

@@ -0,0 +1,249 @@
# 应用层
## 应用模型
### 客户/服务器模型(C/S)
#### 工作流程
1. 服务器等待请求
2. 客户机发出请求,等待接收结果
3. 服务器收到请求后进行处理,并返回客户机
#### 常见C/S模型应用
* Web
* FTP
* 远程登录
* 电子邮件
#### 特点
* 地位不平等
* 客户机间互相不直接通信
* 可扩展性不佳
### P2P模型
#### 特点
* 网络中任意一对计算机(对等方)都可直接通信
* 减轻了服务器的依赖
* 可扩展性好
* 网络健壮性强
#### 缺点
* 占用较多内存
* 损害硬盘
* 使网络拥塞
## DNS
### 组成
* 层次域名空间
* 域名服务器
* 解析器
### 层次域名空间
* 域名不区分大小写
* 除**连字符(-)**外不允许使用其他标点
* 每个标号不允许超过63字符,整个域名最长不能超过255字符
* 域名级别从左到右递增
* 顶级域名分类
* 国际顶级域名(nTLD),如cn,us
* 通用顶级域名(gTLD),如com,net
* 基础结构域名:只有一个arpa,用于反向解析域名
### 域名服务器
#### 根域名服务器
* 13个冗余集群服务器
* 管理顶级域
#### 顶级域名服务器
* 管理该顶级域名下的所有二级域名
#### 授权域名服务器
- 将其管辖的主机域名转换为IP地址
#### 本地域名服务器
* 用于接收主机发出的DNS解析请求
* 在网络配置中填写的域名服务器地址
### 域名解析过程
#### 递归查询
1. 主机查询本地DNS
2. 本地DNS查询跟DNS
3. 根DNS再查询下一个DNS
4. 以此类推,得到结果后递归返回
#### 迭代查询
1. 主机查询本地DNS
2. 本地DNS查询根DNS
3. 根DNS告诉本地DNS下一个查询的DNS
4. 本地DNS继续查询,以此类推
5. 得到结果后返回主机
### 缓存
* 当一个DNS得到某个域名解析结果后,可对其进行缓存,优化查询时间
## FTP
### 功能
* 提供不同种类主机间的文件传输能力
* 以用户权限管理的方式提供用户对远程FTP服务器上的文件管理能力
* 以匿名FTP的方式提供公用文件共享能力
### 工作步骤
1. 打开熟知端口(21)等待连接
2. 用户发送请求后,启动从属进程处理用户请求,处理结束后从属进程关闭
3. 回到等待状态
**注**:
* FTP在整个会话期间保持用户信息,以跟踪用户当前目录等
#### 控制连接
* 使用21端口
* 用于传输控制信息(使用7为ASCII码)
#### 数据连接
* 用于传输数据
* 一般使用20端口
* 修改文件时,先将文件副本传送到本地主机,再将修改后的文件副本传回服务器
#### 主动模式与被动模式
* 主动模式:服务器使用20端口主动连接客户机传送数据
* 被动模式:客户机连接服务器的随机端口进行数据传输
## 电子邮件
### 构件
* 用户代理:用户与邮件系统的接口
* 邮件服务器
* 邮件协议
* SMTP(简单邮件传输协议):发送邮件
* POP3(邮局协议版本3):拉取邮件
* IMAP(交互邮件访问协议):拉取邮件
### 发送和接收过程
1. 发信人使用**用户代理**编写邮件,**用户代理**使用**SMTP**将邮件发送至发送端邮件服务器
2. 发送端邮件服务器将邮件放入缓存区中,等待发送
3. 发送端邮件服务器的SMTP客户进程发现有待发送邮件,向接收端邮件服务器的SMTP服务器建立TCP连接,传输邮件
4. 接收端邮件STMP服务器收到邮件后,将其放入用户邮箱中
5. 收件人调用**用户代理**,**用户代理**使用**POP(或IMAP)**将邮件从邮件服务器的用户信箱取回
### 邮件格式
* 信封
* 内容
* 首部:由RFC 822规定
* 主体:用户自行编写
### 多用途网际邮件扩充(MIME)
* 定义了传送非ASCII编码的邮件
* 内容
* 新首部字段
* MIME版本
* 内容描述
* 内容标识
* 内容传送编码
* 内容类型
* 定义了新的内容格式(包括多媒体邮件)
* 定义了传送编码
* 传送编码
* quoted-printable编码
* ASCII编码不败你
* 对于非ASCII编码,每两B前增加一个'='字符
* 对于等号,也再其前面增加一个'='字符
* base64
* 将二进制代码划分为若干24位长度的单元
* 每六位一组,从0~63分别用大写字母,小写字符,数字,‘+’,‘/’表示
* 最后使用==表示最后一组只有8位,用=表示最后一组只有16位
### STMP
* 步骤
1. 建立连接,发送主机的STMP客户端和接收主机的SMTP服务器,不需要中间主机
2. 邮件传输
3. 释放连接
* 缺点:
* 任何客户端都可向邮件服务器发送邮件,造成垃圾邮件泛滥
### POP3
* 工作方式(按拉起邮件之后邮件服务器是否删除邮件来区分)
* 下载并保留
* 下载并删除
* 密码:明文存储
### WEB邮件系统
* 客户代理与邮件服务器使用HTTP通信
* 邮件服务器之间使用SMTP
## WWW(万维网)
### 组成
* 统一资源定位符(URL)
* 超文本传输协议(HTTP)
* 超文本标记语言(HTML)
### HTTP
* 无状态
* 连接方式
* 非持久连接:每个网页连接都需要建立一个TCP连接
* 持久连接(HTTP/1.1支持):服务器响应请求后保持连接
* 非流水线:客户机收到前一个响应后才能发送下一个请求
* 流水线(默认):客户机可连续发送对引用对象的请求
* 步骤
1. 浏览器分析URL
2. 浏览器向DNS申请解析域名
3. DNS解析域名并返回
4. 浏览器与服务器建立TCP连接
5. 浏览器发出HTTP请求
6. 浏览器相应请求
7. TCP连接断开
8. 浏览器解释html文件,并将界面显示给用户
* 报文结构
* 分类
* 请求报文
* 响应报文
* 结构
* 开始行:区分报文类型
* 首部行:说明浏览器,服务器以及报文主题的一些信息
* 实体主体
![image-20200719205609443](img/应用层/HTTP报文.png)

View File

@@ -413,6 +413,33 @@
* 各节点地位平等,中间节点皆为转发节点,具有路由功能
* 自组织网络可以使用自己特定的路由选择协议,可以不与因特网相连
#### 帧地址字段格式
地址字段在数据帧中的用法:
| 功能 | To DS | From DS | Address1(接收端) | Address2(发送端) | Address3 | Address4 |
| --------------------- | ----- | ------- | ------------------ | ------------------ | -------- | -------- |
| IBSS | 0 | 0 | DA | SA | BSSID | 未使用 |
| To AP(基础结构型) | 1 | 0 | BSSID | SA | DA | 未使用 |
| From AP(基础结构型) | 0 | 1 | DA | BSSID | SA | 未使用 |
| WDS(无线分布式系统) | 1 | 1 | RA | TA | DA | SA |
缩略语:
IBSS(Independent Basic Service Set)独立基本服务集
BSSID(Basic Service Set Identifier)基本服务集标识符
DA(Destination Address)目的地址
SA(Sender Address)源地址
RA(Receiver Address)接收端地址
TA(Transmission Address)发送端地址
WDS(Wireless Distribution System)无线分布式系统
#### 物理层
* 跳频扩频(FHSS)
@@ -570,6 +597,7 @@
* 直通式交换:只检查目的地址
* 优点:速度快
* 缺点:安全性低,不支持不同速率端口的交换
* **注**:此时转发时延只有读取目的地址6B的时间,考虑前导码时则是14B
* 存储转发式交换:先将帧存储在高速缓存中,检查数据无误后再进行转发,数据有误直接丢弃
* 优点:可靠性高,支持不同速率端口交换
* 缺点:延迟高
@@ -588,3 +616,6 @@
| 网桥 | 是 | 否 |
| 路由器 | 是 | 是 |
## 其他零散知识
* 计算两节点间最大距离时,应保证最短帧长无法在一个争用期发送完成

View File

@@ -0,0 +1,435 @@
# 网络层
## 功能
### 异构网络互联
* 使得适用不同标准的网络在网络层中形成一个虚拟互联网络(逻辑互联网络)
* 网络互联使用的中继设备
* 物理层:中继器,集线器
* 数据链路层:网桥,交换机
* 网络层:路由器
* 网络层以上:网关
### 路由与转发
* 路由选择
* 分组转发
### 拥塞控制
* 开环控制:设计时考虑发生拥塞的因素,做决定时不考虑当前网络状态
* 闭环控制:不考虑发生拥塞的因素,监视网络状态,使用响应措施调整系统,主要措施有**检测拥塞**,**报告拥塞**,**调整措施**
## 路由算法
### 静态路由
* 手动配置路由表
* 简单,开销小
* 不能及时适应网络变化
* 仅适合于小网络
### 动态路由
* 较好的适应网络变化
* 实现复杂,开销大
* 适合复杂网络
#### 距离-向量算法
* 每个节点定期发送字节的路由选择表(包含**每条路径目的地**,**路径的代价**,**下一跳**)给所有直接相邻的节点
* 节点根据其他节点发来的路由表更新自己的路由表
* 若网络中节点过多,路由选择信息的数量会变得非常庞大
* 具体步骤见**RIP协议**
#### 状态-链路算法
* 主动测试所有邻接节点状态
* 定期将链路状态广播给其他节点
* 特征
* 在自治系统中,发送链路信息采用**洪泛法**(路由通过所有端口向相邻节点发送信息,相邻节点以同样方式转发)
* 发送信息为本路由器的**链路状态**(相邻路由器及其度量值)
* 当链路状态改变时,才发送信息
#### 层次路由
* 因特网将整个互联网划分成多个**自治系统**(包含多个局域网系统)
* 自治系统内部自行选择路由协议,称为**内部网关协议(IGP)**
* 自治系统间使用**外部网关协议(EGP)**通信
* 自治系统内路由选择:域内路由选择
* 自治系统间路由选择:域间路由选择
* OSPF协议还可以将自治系统进一步划分成更小的子系统,称为**区域**
* OSPF协议按层次将区域分为上层区域(骨干区域,使用0.0.0.0作为标识)和下层区域
* 骨干区域用来联通所有下层区域,骨干区域内的路由器称为骨干路由
* 各个**区域**间使用区域边界路由器进行通信,各个**自治系统**间使用自治系统边界路由器
* 存在骨干区域的自治系统,自治边界路由器位于骨干区域内
## IPV4协议
### 数据报格式
* 首部长度:20~60B,长度必须为4的倍数,不足的部分使用自动填充,默认为20B
* 字段:
* 版本:4位,用于区分IP协议版本
* 首部长度:4位,单位为4B,故最大可表示60B
* 区分服务:1B
* 总长度:2B,包括首部和数据部分,单位为1B
* 标识:2B,计数器产生的字段,用于标识数据报
* 标志:3位
* 第一位:MF字段,标记该数据报是否为最后一个分组,MF=0,代表该数据报为最后一片
* 第二位:DF字段,若DF=1,则该数据报不能进行分组,此时若长度超限,则丢弃该数据报
* 第三位:无用
* 片偏移:13位,代表分片后的数据报起始位置在原数据报的偏移值,单位为8B
* 生存时间(TTL):8位,数据报可通过的最大路由器数
* 协议:8位,代表传输层使用的协议
* 首部校验和:8位,仅校验首部
* 源地址:4B
* 目的地址:4B
### 地址分类
| | A类地址 | B类地址 | C类地址 | D类地址 | E类地址 |
| ---------- | ------- | ------- | ------- | -------- | ------- |
| 起始位 | 0 | 10 | 110 | 1110 | 1111 |
| 网络号位数 | 8 | 16 | 24 | 多播地址 | 保留 |
| 主机号位数 | 24 | 16 | 8 | 多播地址 | 保留 |
#### 特殊地址
| 地址类型 | 网络号 | 主机号 | 作为源地址还是目的地址 | 功能 |
| ---------------- | ------ | ---------- | ---------------------- | ---------------------------- |
| 网络地址 | 特定 | 全0 | 都不是 | 标识一个网络 |
| 直接广播地址 | 特定 | 全1 | 目的地址 | 广播该网络中的所有主机 |
| 受限广播地址 | 全1 | 全1 | 目的地址 | 广播当前网络的所有主机 |
| 0.0.0.0 | 全0 | 全0 | 源地址或默认目的地址 | 代表自己的IP或默认目的地址 |
| 网络中的特定主机 | 全0 | 特定 | 目的地址 | 本网络下的特定主机 |
| 环回地址 | 127 | 不全为0或1 | 源地址或目的地址 | 限制在本机范围(常用于测试) |
### NAT
#### 专用地址(仅用于内网通信)
* **10.**0.0.0~**10.**255.255.255(1个A类地址)
* **172.16.**0.0~**172.31.**255.255(16个B类地址)
* **192.168.0.**0~**192.168.255.**255(256个C类地址)
#### 功能
* 将内网地址映射成外网地址
### 子网划分
#### 原因
* 二级IP地址设计的不合理
* 地址空间利用率有时很低
* 每一个物理网络分配一个网络号可能会使路由表过于臃肿
* 二级IP地址不够灵活
#### 子网掩码
* 不是必须令**前若干位为1,剩下位为0**
#### 注意
* 子网号不能全0或全1,但由于CIDR的广泛使用,在使用CIDR划分时,支持全0或全1
### CIDR
* 使用网络前缀划分子网,IP地址又变为2级结构
* 使用最长匹配原则
* 将小的网络汇聚成大的超网
### ARP
* 网络层协议
* IP地址转为MAC地址
* ARP请求分组:广播(携带源主机IP地址和硬件地址,目的主机IP地址)
* ARP响应分组:单播
* ARP只能解析本网络内的物理地址,对于跨网络的物理地址,只能通过路由器进行代理转发
### RARP
* 将物理地址转化为IP
* 现已淘汰
### DHCP
* 应用层协议
* 动态分配IP地址
* 使用UDP协议
* 请求报文源地址:0.0.0.0,目的地址:255.255.255.255
* DHCP服务器分配的IP是临时的,分配时间称为租用期
* 步骤
1. 客户机广播**DHCP发现消息**,寻找DHCP服务器
2. 服务器收到**DHCP发现消息**后,广播**DHCP提供消息**,提供IP地址和相关配置
3. 客户机收到**DHCP提供消息**后,若接受该IP和参数,广播**DHCP请求消息**,申请分配该IP
4. 服务器收到**DHCP请求消息**后,广播**DHCP确认消息**分配IP
### ICMP协议
* 网络层协议
* 用于报告发送数据的主机相应错误信息
* 分类
* ICMP差错报文
* ICMP询问报文
* ICMP差错报文分类
* 终点不可达
* 源抑制:发生拥塞
* 时间超过
* 参数问题
* 改变路由(重定向)
* ICMP询问报文分类
* 有回送请求和回答报文
* 时间戳请求和回答报文
* 掩码地址请求和回答报文
* 路由器询问和通告报文
* 不发送ICMP的情况
* 对ICMP差错报文不再发送ICMP差错报文
* 对第一个分片的后续所有分片
* 对有组播地址的数据报
* 对具有特殊地址的数据报(如0.0.0.0,127.0.0.1)
* 应用
* ping:使用**有回送请求和回答报文**,测试主机联通性,该软件工作在应用层
* tracert:追踪分组路径
* ICMP报文组成
* 类型+代码+校验和:4B
* 内容取决于ICMP报文类型:4B
* IP数据报首部
* IP数据报数据部分的前8B(带有TCP,UDP报文的端口号)
## IPV6
### 特点
* 更大的地址空间(128位)
* 扩展的地址层次结构
* 灵活的首部格式
* 改进的选项允许协议继续扩充
* 支持即插即用(自动配置)
* 支持资源的预分配
* 长度为8B的整数倍
### 基本首部长度
* 40B
### 首部格式
* 版本:4位
* 通信量类:8位,指定数据报类别和优先级
* 流标号:20位
* 有效载荷长度:16位,除基本首部外的所有字节数
* 下一个首部:8位,相当于IPV4的可选字段或协议字段
* 条数限制:8位
* 源地址:128位
* 目的地址:128位
### 地址类型
* 单播
* 组播(广播为组播的特例)
* 任播(交付于一组主机中的任意一个)
### 地址简写
* 以每16位作为一个位域
* 每个16位域的前导0可省略
* 对于连续0值域,可用一个**::**代替,该简写至多出现一次
### 协议过渡
* 双协议站
* 隧道技术
## 路由协议
### 路由信息协议(RIP)
* 类型:内部网关协议
* 协议层级:应用层
* 使用UDP(端口520)
* 规定
* 每个路由器维护自身到其他每个目的网络的距离(这是**一组**距离,称为距离向量)
* RIP中距离定义为**跳数**
* RIP认为好的路由即条数最少的路由
* RIP中跳数最多为15,距离为16时,定义为**不可达**
* 每30s广播一次路由更新信息
* RIP不支持带子网掩码的RIP广播,故每个网络子网掩码必须相同,RIP2支持变长子网掩码和CIDR
* 特点
* 仅与相邻路由器交换信息
* 交换信息为自己的路由表
* 按规定时间交换信息(如30s)
* 算法(距离向量算法)步骤:
1. 每个节点定期发送字节的路由选择表(包含**每条路径目的地**,**距离**,**下一跳**)给所有直接相邻的节点
2. 节点收到来自节点X的路由表后,修改所有**下一跳**字段为X,**距离**字段+1
3. 对每一项条目,执行如下操作
1. 若目的网络不在自身路由表中:将该项目添至路由表中
2. 若**下一跳**字段与路由表中的地址一样:用该项目替换原项目
3. 若新项目距离小于原项目:用该项目替换原项目
4. 若180s(默认时间)未收到相邻路由信息,则更新路由表,将该路由设置为不可达路由
5. 返回
* 报文格式:
* 首部:4B,1B命令,1B版本,2B填充0
* 路由:每条20B,最多25条
* 优点:
* 简单
* 开销小
* 收敛速度快
* 缺点:
* 最大距离15限制了网络规模
* 网络规模越大,路由表传输开销也越大
* 网络出现故障时,会出现慢收敛现象
### 开放最短路径优先协议(OSPF)
* 类型:内部网关协议
* 协议层级:网络层
* 使用IP协议
* 特点
* 路由器向自治系统内的所有路由器发送信息,使用**泛洪法**
* 交换信息为本路由器和所有相邻节点的链路状态(说明本路由器与哪些路由器相连,以及该链路的度量)
* 链路状态改变时才发送信息
* 更新过程收敛速度快
* 针对不同链路以不同方式计算距离度量
* 负载均衡(相同代价路径上均匀分配流量)
* 支持可变长子网划分和CIDR
* 每个链路状态带有一个序号标识新旧程度
* 以组播地址发送报文(替代过去的广播发送)
* 原理(链路状态算法):
* 路由器更新链路状态后,使用Dijkstra算法计算最短路径
* 路由表中只存储下一跳
* 将自治系统进一步划分成区域,路由器仅在自身区域内使用泛洪法传播信息
* 各路由器存储全网络的链路状态(链路状态数据库的同步)
* 分组类型
* 问侯分组:发现和维持邻站的可达性(一般每隔10s交换一次,若40s未收到回复,则认为该节点不可达)
* 数据库描述分组:自己链路状态数据库的所有链路状态的摘要信息
* 链路状态请求分组:向对方请求某些链路状态项目的详细信息
* 链路状态更新分组:用泛洪法对全网更新链路状态
* 链路状态确认分组:对链路更新的分组的确认
### 边界网关协议(BGP)
* 类型:外部网关协议
* 协议层级:应用层
* 使用TCP协议
* 尽力选择一条可达目的地的较好网络,原因如下:
* 因特网规模过大,路由选择非常困难
* 难以寻找最佳路由
* 自治系统间的路由选择必须考虑相关策略
* 原理(路径-向量算法)
* 每个自治系统选择**至少**一个路由器作为**BGP发言人**
* 每个发言人与其他自治系统的发言人交换路由信息(先使用TCP建立连接,之后建立**BGP会话**,再利用**BGP会话**交换信息)
* 各发言人交换完网络可达性信息后,就能找出到达各自治系统的较好路由了
* 路由交换方式
* 首次:整个路由表
* 非首次:有变化的部分
* BGP报文类型
* 打开报文:与相邻的BGP发言人建立关系
* 更新报文:发送某一路由信息和列出要撤销的路由信息
* 保活(Keep a live)报文:确认打开报文和周期性证实邻站关系
* 通知(Notification)报文:发送检测到差错
* 特点
* 节点数量级为自治系统的数量级
* 每个自治系统的BGP发言人数目很少
* 支持CIDR
* 首次交换整个路由表,之后只交换更新的部分
## IP组播
* 仅用于UDP
### 组播地址
* 使用D类地址
* 只能用于目的地址
* 不提供可靠交付
* 不产生ICMP报文
* 非所有地址都可组播
### 分类
* 本局域网上的硬件组播
* 因特网范围内的组播
### 组播IP与MAC转换
* 取IP地址后23位,补上前导0,构成24位
* 前面再补上固定首部01-00-5e,则构成MAC地址
### IGMP
* 用于局域网的组播协议
* IGMP让本地局域网的组播路由器知道是否有主机参加或退出某个组播组
* 步骤
* 新主机加入组播组时,向该组播组发送一个IGMP报文,组播路由器收到后,将组成员关系转发给其他组播路由器
* 组播路由器周期性探询局域网内主机是否仍是组的成员,若在若干次探询后某一组无主机相应,则不再转发该组的成员关系给其他组播路由器
* 路由选择:找出以源主机位根节点的组播转发树,每个分组再每条链路上至转发一次。不同源点的同一组播组和不同组播组都对应一个不同的多播转发树
### 因特网组播路由算法
* 链路状态的路由选择
* 距离-向量的路由选择
* 协议无关的组播(PIM)
## 移动IP
### 实体
* 移动节点
* 本地代理:移动节点所属网络的代理
* 外部代理:再外部网络中转发移动节点的代理
### 技术
* 代理搜索:让节点知道自己在漫游
* 申请转交地址
* 登录:移动节点在外网进行的认证,注册,建立隧道的过程
* 隧道:本地代理和外部代理间临时建立的双向数据通道
### 过程
1. 本地网络中,使用传统的通信方式
2. 节点漫游到外地网络时,向本地代理注册转发地址(外部代理地址或动态配置的地址)
3. 本地代理接收注册后,构建一条隧道,将发给移动节点的数据转发给转发地址
4. 移动节点使用网络的路由器和代理进行通信
5. 移动节点来到另一外网时,向本地代理更新新的转发地址
6. 移动节点回到本地时,向本地代理注销转发地址,即回到原通信方式
## 路由器
### 组成
* 路由选择部分
* 功能:更新和维护路由表
* 核心:路由选择处理器
* 分组转发部分
* 组成:
* 输入端口
* 交换结构
* 输出端口
* 交换方法
* 通过存储器交换
* 通过总线交换
* 通过互联网络交换
### 转发表和路由表
* 转发表根据路由表构建
* 转发时路由器根据转发表选择下一跳
* 转发表!=路由表
* 在路由选择中,一般不对其区分
## 其他零散知识
* IPV4分组在目的端主机重组
* IPV6禁止中间路由器进行分配操作
* IPV6不使用头部校验来保证传输正确性
* IPV6首部固定长度
* IP数据报仅校验首部信息,不校验数据部分