mirror of
https://github.com/OmegaZhou/408-notes.git
synced 2026-02-03 10:43:17 +08:00
finish computer network
This commit is contained in:
BIN
计算机网络/img/应用层/HTTP报文.png
Normal file
BIN
计算机网络/img/应用层/HTTP报文.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
324
计算机网络/传输层.md
Normal file
324
计算机网络/传输层.md
Normal 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
|
||||
- 执行拥塞避免算法
|
||||
249
计算机网络/应用层.md
Normal file
249
计算机网络/应用层.md
Normal 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文件,并将界面显示给用户
|
||||
|
||||
* 报文结构
|
||||
|
||||
* 分类
|
||||
|
||||
* 请求报文
|
||||
* 响应报文
|
||||
|
||||
* 结构
|
||||
|
||||
* 开始行:区分报文类型
|
||||
* 首部行:说明浏览器,服务器以及报文主题的一些信息
|
||||
* 实体主体
|
||||
|
||||

|
||||
|
||||
@@ -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 @@
|
||||
| 网桥 | 是 | 否 |
|
||||
| 路由器 | 是 | 是 |
|
||||
|
||||
## 其他零散知识
|
||||
|
||||
* 计算两节点间最大距离时,应保证最短帧长无法在一个争用期发送完成
|
||||
435
计算机网络/网络层.md
Normal file
435
计算机网络/网络层.md
Normal 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数据报仅校验首部信息,不校验数据部分
|
||||
Reference in New Issue
Block a user