diff --git a/计算机网络/img/应用层/HTTP报文.png b/计算机网络/img/应用层/HTTP报文.png new file mode 100644 index 0000000..f27b123 Binary files /dev/null and b/计算机网络/img/应用层/HTTP报文.png differ diff --git a/计算机网络/传输层.md b/计算机网络/传输层.md new file mode 100644 index 0000000..9bd4664 --- /dev/null +++ b/计算机网络/传输层.md @@ -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 + +##### 算法选择 + +* 当cwndssthresh时,使用拥塞避免算法 +* 当cwnd=ssthresh时,任意选择一个(一般使用拥塞避免) + +#### 拥塞处理 + +* 发送超时时,ssthresh=cwnd/2 +* cwnd=1 + +##### 快重传算法 + +* 接收方向发送方连续发送3个重复ACK +* 发送方收到后,立刻重传缺失的报文段 + +#### 快恢复算法 + +- 发送方收到连续3个重复确认后,令ssthresh=cwnd/2 +- cwnd=ssthresh +- 执行拥塞避免算法 \ No newline at end of file diff --git a/计算机网络/应用层.md b/计算机网络/应用层.md new file mode 100644 index 0000000..7c0dfa3 --- /dev/null +++ b/计算机网络/应用层.md @@ -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) + diff --git a/计算机网络/数据链路层.md b/计算机网络/数据链路层.md index 0f1e730..6fb1b58 100644 --- a/计算机网络/数据链路层.md +++ b/计算机网络/数据链路层.md @@ -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 @@ | 网桥 | 是 | 否 | | 路由器 | 是 | 是 | +## 其他零散知识 + +* 计算两节点间最大距离时,应保证最短帧长无法在一个争用期发送完成 \ No newline at end of file diff --git a/计算机网络/网络层.md b/计算机网络/网络层.md new file mode 100644 index 0000000..deb58c7 --- /dev/null +++ b/计算机网络/网络层.md @@ -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数据报仅校验首部信息,不校验数据部分 \ No newline at end of file