计算机网络复习@Zerun Li
基础:
OSI五层模型
- 应用层 进程到进程 报文 SMTP\Telnet\HTTP\FTP\DHCP
- 传输层 进程到进程 报文段 Segment
- 网络层 主机到主机 数据报 Datagram
- 链路层 端到端 帧
- 物理层 比特
应用层
常用网络体系
- 客户-服务器 C/S架构
- 点对点结构 P2P
- 高度可伸缩
- 难于管理
- 混合结构 Hybrid
- 文件传输用P2P
- 文件搜索用C/S架构
进程标识符:IP地址+端口号
HTTP概述
- HTTP是无状态的 不维护任何过去客户端发出的请求
- HTTP是一种‘拉’协议,把内容从服务器拉回来
- HTTP有非持久性连接(每个连接只传输一个对象)和持久性连接(一个连接可以传输多个对象)
- 持久性连接
- 无流水线的–接收端收到前一个响应后才发起新的请求
- 带有流水线机制的–客户端只要有需要的对象就发出请求 无需等待上一个响应
- HTTP格式:POST、GET、DELETE、PUT、HEAD
- HTTP响应码: 200-OK 400-请求错误 404-NOT Found 505-HTTP版本不支持
WEB缓存技术
在不访问服务器前提下满足用户HTTP请求
- 好处:缩短客户机请求的响应时间、减少机构流量、大范围内实现有效的内容分发
- 过程:用户对缓存服务器发起HTTP请求:
- 若请求对象在缓存服务器,则缓存服务器返回该对象
- 若请求对象不在缓存服务器,则缓存服务器请求该对象并缓存,返回给客户机
Email应用组成
- 邮件客户端(用户代理) user-agent
- 邮件服务器
- 邮件传输协议SMTP
- 使用端口号25的TCP协议
- 是一种‘推’协议,把内容推到对方邮件服务器,使用持久性连接
- SMTP消息格式:
- Header:To、From、Subject
- Boby:消息本身,只能是ASCII字符
- 邮件访问协议 (从服务器获取邮件)
- POP协议(Post Office Protocol,无状态协议):认证/授权(客户端-服务器)和下载
- IMAP协议(Internet Mail Access Protocol):功能更多 能够操作服务器上的储存的消息
- HTTP:163,qq mail
DNS
Domain Name System 基于UDP
- 完成IP地址-域名的映射
- 主机别名
- 邮件服务器别名
- 负载均衡:web服务器
域名服务器:
- 根域名服务器 (本地域名服务器无法解析时访问根域名服务器)
- 顶级域名服务器TLD 负责com,org,net,edu等顶级域名
- 权威域名服务器(提供组织内部服务器的解析服务)
- 本地域名解析服务器
- 不严格属于层级体系
- 每个ISP都有一个本地域名服务器,也是默认域名服务器
- 主机查询DNS时,是向本地域名服务器发出请求
本地域名服务器查询方式:
- 迭代式:
- 被查询服务器返回域名解析服务器名字
- 我不知道这个域名,但是你可以问这个服务器
- 递归式:
- 将域名解析任务交给所联系的服务器
DNS记录缓存和更新:
- 只要域名解析服务器获得域名-IP映射,那么就缓存这个映射
- 一段时间后,该映射自动删除
- 本地域名服务器一般缓存顶级域名服务器映射,因为根域名服务器不常被访问
DNS记录RR(Resource records) RR format:(name,value,type,ttl)
- Type =A 那么name是主机域名 value是IP地址
- Type = NS 那么name是域 value是该域权威域名服务器主机域名
- Type = CNAME 那么name是主机别名 value是真实域名
- Type = MX 那么value是name对应的邮件服务器
P2P搜索信息
-
集中式索引:信息到节点位置(IP地址+端口号)的映射
问题:单点失效问题,性能瓶颈,版权问题
内容和文件传输是分布式的,但是内容定位是集中式的
-
洪泛查询Query flooding:
完全分布式架构 每个节点对且只对他共享的文件进行索引
-
层次式覆盖网络:
介于集中式索引和洪泛查询之间
每个节点是一个超级节点或被分配一个超级节点
传输层
概述
传输层协议为运行在不同host上的进程提供了一种逻辑通信机制
- 发送方将应用层传下的消息分为一个/多个segment 交给网络层
- 接收方将收到的segment组成消息 交给应用层
多路复用/分用
接收端多路分用:
- 传输层一局头部信息将收到的segment交给正确的socket 即不同的进程
发送端多路分用:
- 从多个socket接收数据 为每个数据封装头部信息,生成segment交给网络层
TCP的socket四元组标识:源IP地址,源端口号,目的IP地址,目的端口号
UDP
提供Best effort的尽力而为的服务,不保证可靠性
UDP是无连接的:
- UDP发送方和接收方之间无需握手建立连接
- 每个UDP的段的处理独立于其他段
UDP校验和:
- 发送方计算所有内容的和,进位加在和的后面,得到的值按位翻转,得到校验和
- 接收方计算收到的段的校验和 与校验和字段进行对比
- 相等 没有检测出错误(有可能出错)
- 不相等 检测出现错误
Rdt
Rdt1.0
基于可靠信道上的可靠数据传输(假设底层信道完全可靠(不会出错和丢失))
Rdt2.0
引入新机制:
-
引入校验和检测位错误
-
引入确认机制ACK:显示告诉发送方分组已经正确接受
-
NAK:接收方显示告诉发送方分组有错误 发送方收到NAK后,重传分组
基于这种重传协议的Rdt成为ARQ协议(Automatic Repeat reQuest)
Rdt2.1
引入了序列号,解决Rdt2.0的ACK/NAK被破坏情况
Rdt2.2
扔掉了NAK 只需要ACK即可
- 接收方通过ACK告知最后一个被正确接收的分组
- 在ACK消息中显示加入被确认分组的序列号
- 发送方收到重复ACK,重传当前分组
Rdt3.0
引入定时器,如果在一定时间内没收到ACK,那么重传(若是因为延迟造成的,那么序列号机制也能够处理)
流水线机制
允许发送方在收到ACK之前连续发送多个分组
发送方/接收方需要更大空间来缓存分组
滑动窗口协议
窗口:允许使用的序列号范围
窗口尺寸为N:最多有N个等待确认的消息
滑动窗口协议:GBN GO-BACk-N,SR Selective-repeat
序列号空间大小与窗口尺寸关系:
N
s
+
N
r
≤
2
k
Ns + Nr ≤ 2^k
Ns+Nr≤2k
Ns为发送窗口大小 Nr为接受窗口大小 k为序列号空间大小
Go-Back-N协议
是一种累计确认方式
Ack(n):确认到序列号n的分组均已经正确接收
可能收到重复Ack
发送方:
- 设置定时器:若发生超时,重传序列号大于n且没收到Ack的分组
接收方:
- 乱序到达的分组直接丢弃,只确认序号高的按序到达的分组
Selective-Repeat协议
Ack不是累计确认,收到分组就返回该分组的Ack
- 设置缓存机制,缓存乱序到达的分组 而非像GBN那样直接丢弃
- 发送方只重传没收到Ack的分组
TCP
TCP概述
- TCP是全双工的,同一连接中可以双向传输数据流
- TCP是面向连接的
- 通信前双方必须建立连接
- 连接状态只在双方端点维护 沿途节点不维护
TCP序列号和ACKs
TCP序列号:指的是报文段的第一个字节编号
建立连接时,双方随机选择序列号
TCP-ACKs
- 累计确认,该序列号之前的字节都已被收到
- 希望收到的下一个字节的序列号
TCP可靠数据传输
- 流水线机制
- 累计确认
- 单一重传计时器
触发重传事件:
- 超时
- 收到重复ACK
快速重传:
- 若收到统一数据的3个ACK(该数据以后的都丢失了),那么在计时器超时之前进行重传
TCP流量控制
- 发送方不要发太快以至于淹没对方
接收方为TCP连接分配buffer
RcvWindow(未处理数据) + TCP data in buffer(应用层使用) = RcvBuffer
接收方通过segment的头部字段将RcvWindow大小告诉发送方
发送方限制自己已发送但未收到ack的数据不超过RcvWindow
TCP三次握手
- 客户端发起请求,序列号seq = x,SYN=1 不能携带数据 大小为1
- 服务器序列号seq = y,Ack = x+1,SYN=1 不能携带数据 大小为1
- 客户端发送seq = x+1,Ack = y+1 ,SYN=0,可以携带数据
TCP四次挥手
- client发送FIN=1的segment,进入FIN_WAIT_1状态
- server收到,发送ACK,关闭连接,进入CLOSE_WAIT状态.发送FIN,client收到进入FIN_WAIT_2状态,server进入LAST_ACK状态
- client收到,发送ACK,进入TIME_WAIT状态,若收到FIN,重新发送ACK
- server收到ACK,连接关闭,
TCP拥塞控制
感知网络拥塞loss:
- timeout
- 三个重复ACK
发生loss事件后,发送方降低发送速率
加性增-乘性减:AIMD
- 每个RTT将CongWin增大一个MSS
- 发生loss将CongWin减半
慢启动:SS
- 每个RTT将CongWin翻倍
- 当目前Congwin到达loss的1/2时,加性增
- loss事件发生后,把Threhold置为CongWin的1/2
loss事件处理:
- 三个重复ACK:CongWin减小一半,然后线性增长
- timeout:CongWin设为一个MSS,指数增长到Threhold再线性增长
网络层
核心功能
- 转发-将分组从路由器的输入端口转移到合适的输出端口
- 路由-确定分组从源到目的经过的路径
网络层连接:两个主机之间的全部设备(路由器等)
传输层连接:两个应用进程之间(对中间设备透明)
网络层服务模型
- 无连接服务-数据报网络
- 不事先确定分组的传输路径
- 每个分组传输路径独立
- 连接服务-虚电路网络
- 首先确定分组传输路径(建立连接)
- 分组的传输路径相同
- 传输结束后拆除连接
虚电路网络
- 提供网络层连接服务
- 类似于传输层的面向连接的TCP服务
- 是主机到主机的一种服务,是网络的核心实现
- 虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接)
- 每个分组携带虚电路标识(VC ID),而非目的主机地址
- 简化“边缘”,复杂网络
数据报网络
- 网络层无连接
- 每个分组携带目的地址
- 路由器根据分组的目的地址转发分组
- 简化网络,复杂"边缘"
最长前缀匹配优先:
-
在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口
即如果A 和 B都可以匹配目的des 那么谁匹配的前缀长选择谁
IP协议
- 首部至少20字节
- 总长度 = IP分组总字节数 = 首部长度+数据长度
- 最大IP分组总长度:65535B 最小IP分组首部:20B IP分组可以封装最大数据:65535B-20B = 65515B
- 协议若为6 表明封装的是TCP 若为17表明封装的是UDP
IP分段
MTU-最大传输单元
当IP分组过大时,要分割成多个分组
标志位DF = 1,禁止分片 DF=0,允许分片
标志位MF = 1,非最后一片 MF=0,最后一片(或未分片)
片偏移:一个IP分组分片封装原IP分组数据的相对偏移量,以8字节为单位
例如:MTU=1500,数据报为4000B,DF=0
第一片:MF=1,offset = 0,封装1500-20 = 1480B数据(减去首部)
第二片:MF=1,offset = 1480/8=185,封装1500-20 = 1480B数据(减去首部)
第三片:MF=0,offset = 2960/8=370,封装(4000-20)-2*1480=1020B数据
IP编址
IP地址:32比特,分为网络号(高位比特)和主机号(低位比特)
IP子网:IP地址具有相同网络号的设备接口,不跨越路由器便可物理联通
有类编址:
A类地址:网络位8位,第一位是0
B类地址:网络位16位,前两位是10
C类地址:网络位24位,前三位110
D类地址:网络位32位,前四位1110
E类地址:网络位32位,前四位1111
特殊IP地址:
NetID | HostID | 作为IP分组原地址 | 作为IP分组目的地址 | 用途 |
---|---|---|---|---|
全0 | 全0 | 可以 | 不可以 | 本网表示本机,整个网络表示默认路由 |
全0 | 特定值 | 不可以 | 可以 | 表示本网内某个特定主机 |
全1 | 全1 | 不可以 | 可以 | 本网广播地址 |
特定值 | 全0 | 不可以 | 不可以 | 表示一个网络 |
特定值 | 全1 | 不可以 | 可以 | 对特定网络上的所有主机进行广播 |
私有IP地址:
Class | NetIDs | Blocks |
---|---|---|
A | 10 | 1 |
B | 172.16-172.32 | 16 |
C | 192.168.0-192.168.255 | 256 |
子网划分
IP地址:网络号、子网号、主机号
子网掩码:网络号与子网号全取1,主机号全取0
IP分组目的地址与子网掩码按位与运算,得到子网地址
CIDR-无类域间路由
CIDR-Classless InterDomain Rounting
消除传统的A类、B类和C类地址界线
NetID+SubId -> Network Prefix 可以任意长度
a.b.c.d/x x为前缀长度
路由聚合:
多个子网组成一个更大的子网
223.1.0.0/23 223.1.2.0/24 223.1.3.0/24都可表示为223.1.0.0/22
选用更具体的路由:最长前缀匹配优先
DHCP
- 动态主机配置协议-Dynamic Host Configuration Protocol
- 即插即用
- 基于UDP 是应用层协议
过程:
- 主机广播 DHCP discover(发现报文)
- DHCP服务器利用DHCP offer(提供报文) 响应
- 主机请求IP地址 DHCP request(请求报文)
- DHCP服务器分配IP地址:DHCP ack(确认报文)
NAT
- 网络地址转换-Network Address Transform
实现:
- 利用(NAT IP地址,新端口号)替换外出IP的(源IP,源端口号)
- 将(NAT IP地址,新端口号),(源IP,源端口号)储存到映射表
- 根据映射表,把进入的IP替换(1的逆过程)
ICMP
- 互联网控制报文协议-Internet Control Message Protocol
- 封装到IP数据报里
- 支持主机/路由器:
- 差错报告
- 目的不可达
- 源抑制
- 超时
- 参数问题
- 重定向
- 网络探寻
- 回声请求与应答报文
- 时间戳请求与应答报文
- IPv6增加报文类型Packet Too Big
- 差错报告
IPv6
特点
- 固定首部大小40B
- 不允许分片
- 在ICMP报文中增加类型Packet Too Big
- 移除了校验和,减少在每一跳的处理时间
地址类型
- 单播unicast 一对一通信
- 多播multicast 一对多通信
- 任播anycast 一对一组之一(最近一个)通信
IPv4与IPv6
- IPv4和IPv6会长期共存
- 隧道:IPv6数据报作为IPv4数据报的数据部分封装穿越IPv4网络
路由算法
链路状态路由算法
-
Link-State算法
-
迪杰斯特拉算法 计算一个节点到其他节点的最短路径
K次迭代后,就得到了到达K个节点的最短路径
-
把自己到邻居的信息发给所有节点
距离向量路由算法
- Distance Vector算法
- 基于Bellman-Ford方程(动态规划)
- 获得最短路径的下一跳,该信息用于转发表中
- 把自己到所有节点的信息发给邻居
层次路由
区域自治系统
- 聚合路由器为一个区域自治系统Autonomous Systems
- 同一AS内运行同样的路由协议
- 网关路由器Gateway Router位于AS边缘,连接其他AS的网关路由器
- 同一AS内部的路由器会相互传播可达信息
热土豆路由
- 通过AS间路由协议学习到子网X可以由多个网关到达
- 利用通过AS内部路由器信息获得到达每个网关的路径费用
- 选择费用最小的那个网关,更新转发表
AS内部路由
- AS内部路由称为内部网络协议IGP-Interior gateway protocols
- 常见AS内部路由协议:
- 路由信息协议RIP-Routing Information Protocol
- 开放最短路径优先OSPF-Open Shortest Path First
RIP
- 基于距离向量路由算法DS
- 向邻居发送自己到所有节点的信息
- 距离度量:跳数hops
- 每隔30s,邻居之间交换一次DV,称为通告“通告”
- 无穷大距离=16hops
- 若180s没有收到通告->邻居/链路失效
- 重新计算路由
- 向邻居发送新的通告
- 邻居再依次向外发送通告
- 毒性逆转技术预防ping-pong环路问题
- 通告报文基于UDP-因为既然是通告,没必要建立连接
OSPF
- 采用链路状态路由算法LS
- 利用迪杰斯特拉计算路由
- OSPF通告在整个AS内洪泛(即向所有节点广播自己到邻居的信息)
- OSPF报文直接封装在IP数据报中
RIP和OSPF相比较
- OSPF允许使用多条相同费用的路径(RIP只能使用一条)
- OSPF安全性高
- OSPF支持大规模AS分层,所以用在大规模网络多
BGP协议
- 边界网关协议-Border Gateway Protocol
- BGP为每个AS提供一种手段:
- eBGP:从邻居获取子网可达信息
- iBGP:向所有AS内部路由器传播子网可达性信息
- BGP报文交换基于半永久的TCP连接
BGP报文类型
OPEN | 与peer建立TCP连接 |
---|---|
UPDATE | 通告新路径 |
KEEPALIVE | 无UPDATE时,保留连接 |
NOTIFICATION | 报告之前报文的差错、也用于关闭连接 |
链路层
- 链路层数据分组是帧,封装网络层的数据报
- 链路层负责通过一条链路从一个结点向另一个物理链路通过相连的相邻结点传送数据报
链路层服务
- 组帧,封装数据报加首部和尾部构成数据帧
- 链路接入link access
- 相邻结点之间可靠交付
- 流量控制
- 差错检测
- 差错纠正
校验码
奇偶校验码
- 自己去看看吧
循环冗余校验码
- 自己去看看吧
MAC协议
- 多路访问控制协议-Multiple Access Control Protocol
- 采用分布式算法决定节点如何共享信道(即何时可传送数据)
MAC协议分类
- 信道划分MAC协议
- 多路复用技术
- TDMA、FDMA、CDMA、WDMA
- 随机访问MAC协议
- 信道不划分,允许冲突
- 采用冲突"恢复"机制
- 轮转MAC协议
- 节点轮流使用信道
信道划分MAC协议
TDMA
- 时分多路访问协议,Time Division Multiple Access
- 每个节点周期性接入信道,每个时隙相同
FDMA
- 频分多路访问协议,Frequency DIvision Multiple Access
- 信道被划分为若干频带frequency bands
- 每个节点分配一个固定的频带
- 无传输频带空闲
CMDA,WDMA不太重要,读者可自己把握
随机访问MAC协议
- 当节点发送分组时,不事先与其他节点协调
- 利用信道的全部数据速率发送分组
- 这样就可能多个节点之间发生冲突
- 如何检测冲突
- 如何从冲突中恢复
ALOHA协议
- 当节点有帧生成时,立即发送
- 如果在t0时刻发送,那么会与在[t0-1,to+1]期间其他节点发送的帧发生冲突
- 成功发送帧概率为0.18
时隙ALOHA协议
假定:
- 所有帧大小相同
- 时间被划分为等长的时隙(每个时隙可以传送一个帧)
- 节点时间同步
运行:
- 当节点有帧生成时,在下一个时隙开始时发送
- 若无冲突,该节点可在下一个时隙继续发送其他帧
- 若有冲突,该节点在下一时隙以概率p重传帧,直至成功
- 最大效率为0.37
CSMA协议
- 载波监听多路访问协议 Carrier Sense Multiple Access
- 发送帧之前,监听信道
- 1-坚持CSMA 信道空闲发送帧,信道忙则一直监听直至空闲
- 非坚持CSMA 信道空闲发送帧,信道忙随机等待时间再监听信道
- p-坚持CSMA 信道空闲以p概率发送帧,1-p概率延迟一个单位发送帧
- 冲突仍然可能发生
- 信号传播延迟
- 若继续发送冲突帧,浪费信道资源
CSMA/CD协议
- CSMA with Collosion Detection 带有冲突检测的CSMA
- 短时间内可以检测到冲突
- 冲突后终止传输,减少信道浪费
- “边发边听,不发不听”
CSMA/CD应用于以太网
CSMA/CA应用于802.11无线局域网
轮转访问MAC协议
主节点轮询
- 主节点轮流邀请从属节点发送数据
- 问题:
- 轮询开销
- 单点故障
- 等待延迟
令牌控制
- 控制令牌一次从一个节点传递到另一个节点
- 令牌:特殊的帧
- 问题:
- 令牌开销
- 单点故障
- 等待延迟
ARP协议
MAC地址
- MAC地址:用于局域网内标识一个帧从哪个接口发出,到达那个物理相连的其它接口
- 48位,固化在网卡的ROM中
- 局域网内每块网卡都有一个唯一的MAC地址
ARP协议
- 地址解析协议
- 即插即用,自主建立ARP表,无需干预
- ARP表:LAN中的每个IP节点维护一个表
- 存储<IP地址;MAC地址;TTL>映射
- 经过TTL后丢弃该映射
A想要给同一局域网的B通信过程:
- 若A中有B的MAC-IP映射,那么直接发送即可
- 若A中没有B的MAC-IP映射(不知道B的MAC地址)
- A广播ARP查询分组,包括B的IP地址,MAC地址为全F
- LAN中的所有节点都会收到该查询分组
- B收到该分组,IP地址与自己的匹配
- B向A单播发送自己的MAC地址
- A收到该应答,缓存该MAC-IP映射
A想要给不同局域网的B通信过程:
- A构造数据报,源IP是自己,目的IP是B的IP地址
- A封装帧,源MAC是自己的,目的MAC是相连路由器接口的MAC
- 路由器收到,解封帧,在与B相连的接口构造帧,目的MAC是B的,源MAC是该接口
- B收到该帧,解封即可用
- 整个过程中只有MAC地址变化,IP地址不变
以太网
以太网物理结构
- 总线型(节点连到同一根总线)-所有节点在同一冲突域内
- 星型(中心交换机),每个节点单独一个冲突域(彼此间不冲突),目前主流
以太网特点
- 无连接:发送帧的网卡和接受帧的网卡没有“握手”
- 不可靠:接受网卡不向发送网卡进行确认(差错帧直接丢弃)
- MAC协议(非坚持):采用二进制指数退避算法CSMA/CD
- 第m次冲突后,选择n=min(m,10)
- 从{0,1,2…,2^n-1}选择一个数K
- 等待K*512比特的传输时间再监听信道
交换机
特点
- 是链路层设备,存储-转发以太网帧
- 透明transparent - 主机感知不到交换机存在
- 即插即用plug-and-play
- 自学习self-learning
- 在链路上利用CSMA/CD转发帧,但无冲突(星型),且可全双工
交换表
- 每个交换机有一个交换表switch table
- 存放<主机MAC地址,到达主机的接口,时间戳>
- 交换机通过自学习建立交换表
- 当收到帧,记录帧的源MAC地址与输入接口
- 利用目的MAC地址检索交换表
- 若目的地址不在MAC表中,则**泛洪,向除输入接口的所有接口转发该帧**
- 若目的地址在MAC表中
- 若目的主机位于收到帧的网段,则丢弃
- 若目的主机不在收到帧的网段,则**将帧转发到MAC地址对应的接口**
交换机与路由器
- 交换机是链路层设备,检查帧首部
- 路由器是网络层设备,检查数据报首部
- 交换机通过自学习,泛洪建立转发表(依据MAC地址)
- 路由器根据路由算法建立路由表(依据IP地址)
网络设备对比
集线器Hub | 交换机Switch | 网桥Bridge | 路由器Router | |
---|---|---|---|---|
层次 | 物理层 | 链路层 | 链路层 | 网络层 |
冲突域隔离 | no | yes | yes | yes |
广播域隔离 | no | no | no | no |
即插即用 | yes | yes | yes | no |
优化路由 | no | no | no | yes |
直通传输 | yes | yes | yes | no |
PPP协议
-
常见的点对点数据链路控制协议:
- HDLC-High Level Data Link Protocol
- PPP-Point to Point Protocol
-
PPP设计需求
- 组帧
- 比特透明传输
- 差错检测
- 连接活性检测-检测,并向网络层通知链路无效