计算机网络总复习
第一章 概述
计算机网络:结点node(计算器、交换机、路由器)+链路link
功能:数据通信、资源共享
Internet TCP/IP ISP 局域网与广域网
电路交换:突发式传输、适用低频
传输时间少、有序到达、但要建立连接、不灵活、利用率低、无差错控制
报文交换:无需连接、存储转发、利用率较高、差错控制、重传代价高
无需连接、有序到达、但转发时延高
分组交换:无需连接、存储转发、分组定长(拆分为多个分组)、重传代价低
更加灵活,前面两种的折中、利用率非常高、传输时间少、支持差错控制、但需要携带很多额外控制信息、且不是有序到达
网络分类
WAN、MAN(城域网)、LAN、PAN(个域网)
广播、点对点
总线型(争用问题)、环形、星型(点对点)、网状(灵活但控制复杂线路成本高)
公用网、专用网
有线网、无线网
性能指标
bps、kbps、Mbps、Gbps、Tbps (按照\[10^3\]递增)
速率(数据率、比特率、数据传输率)bps
带宽:某信道允许通过的最高数据率 bps 或者表示 信号频带范围 Hz
吞吐量:某个网络或节点、信道单位时间内的实际通过的数据量(实际的综合数据率)B
时延:数据一端传送到另一端所需的时间
发送时延/传输时延=\(\frac{数据长度(bit)}{发送速率(bit/s)}\):将数据推向信道所花费的时间(准备过程)
传播时延=\(\frac{信道长度(m)}{电磁波在信道中的传播速度(m/s)}\):电磁波在信道中传播一定的距离所花费的时间(传播过程)
处理时延:受网络负载、路由器性能等诸多因素影响(一般不考虑)
排队时延:数据排队进入、发出路由器所花的时间
总时延=发送时延+传播时延+处理时延+排队时延
时延带宽积(bit):单向传播时延x带宽
往返时延RTT:从发送方发送完数据,到发送方收到来自接收方的确认数据总共经历的时间
信道利用率:某个信道有百分之多少的时间是有数据通过的。
利用率低会浪费带宽、利用率太高会导致网络拥塞
分层结构
每一个层次负责实现一个或多个功能,上一层实体通过“接口”,请求相邻下一层的“接口”,SAP(服务访问点)
实体、对等实体、协议(水平):通信规则集合、服务(垂直):下层提供给上层的功能调用;
OSI:7层法律标准;TCP/IP模型:事实
五层模型(教学用)
PDU:协议数据单元、SDU:服务数据单元、PCI:协议控制信息
协议三要素:语法(格式)、语义、同步(时许)
OSI参考模型 | 任务 | 功能 |
---|---|---|
应用层 | 实现特定网络应用 | 略 |
表示层 | 解决不同主机上信息不一致的问题 | 数据格式转换 |
会话层 | 管理进程间会话 | 会话管理 |
传输层 | 实现端到端通信 | 复用、分用、差错控制、流量控制、连接管理、可靠数据传输 |
网络层 | 将分组从源结点转发到目的结点 | 路由选择、分组转发、拥塞控制、网际互联、差错控制、流量控制、连接管理、可靠数据传输 |
数据链路层 | 确保相邻节点之间的链路逻辑上无差错 | 差错控制、流量控制 |
物理层 | 实现相邻节点比特之间的传输 | 需定义电路接口参数、信号的含义/电气特性等 |
区别TCP/IP模型,对上可以提供无连接不可靠的IP和UDP服务,而OSI只能提供有连接、可靠的服务
第二章 物理层
任务:实现相邻节点之间比特(0或1)的传输
通信原理
信源、信宿、信号、信道
信源通过信道传输信号给信宿
信号是数据的载体,数据是信息的实体
信号有数字信号(离散,如电压正负)、模拟信号(连续,波形)
每一个信号称作一个码元
一个码元可以携带的比特数据位:一个周期内可能出现K种信号
则
\[
1码元=\log_2Kbit
\]
波特Baud(率):每秒传输几个码元(码元/秒)
比特率:每秒传输几个比特(bit/s)
通信原理中的带宽:某信道允许通过的信号频带范围 Hz(最大频率-最小频率)
噪声:对信道产生干扰,影响信号的数据传输效率。
电磁波、电压会受到环境电场、磁场的干扰
奈氏准则
没有噪声(理想低通信道)的信道来说,它的极限波特率是2W波特,其中W是信道的频率带宽Hz。 \[ 极限比特率=2W\log_2Kb/s \] K为一个信号周期内可能出现的信号种类
香农定律
有噪声、带宽有限的信道,则 \[ 极限比特率=W\log_2(1+\frac{S}{N})(bit/s) \] W:信道的频率带宽(Hz)
\(\frac{S}{N}:信噪比\) \[ 信噪比=\frac{S}{N}=\frac{信号的功率(w)}{噪声的功率(w)} \] 用单位记录:db(分贝)分贝转比值,假设分贝为mdb: \[ m分贝=10\log_{10} \frac{S}{N} \]
编码&解码、调制&解调
编码:二进制数据转换为数字信号
解码:数字信号转换为二进制数据
调制:二进制数据转换为模拟信号
解调:模拟信号转换为二进制数据
有线网络适配器:编码-解码器
光猫:调制-解调器
编码技术
不归零编码(NRZ):低0高1,中不变
归零编码(RZ):低0高1,中归0
反向非归零编码(NRZI):跳0不跳1看起点,中不变
曼彻斯特编码:跳0反跳1看中间,中必变
差分曼彻斯特编码;跳0不跳1看起点,中必变
调制方法
基带信号:来自信源的数字信号(需要调制后才能在某些信道上传输,例如空气)
- 调幅AM
有信号就调成正弦波,信号为0就无幅度
- 调频FM
调制正弦波频率
- 调相PM
调制正弦波相位
QAM(正交幅度调制):AM+FM,即\(1码元=\log_2mnbit\)
QAM-16:16种码元
传输介质
导向型(有限):双绞线、同轴电缆、光纤
非导向型:无限传输介质
单模光纤适合远距离传输(只传输一条光线)、多摸光纤适合近距离传输
以太网对有限传输介质的命名规则
速度(Mbps)+Base+介质信息
介质信息:数字则为同轴电缆,5代表最远传输距离500m,F代表光纤,T代表双绞线
电磁波:无线电波、微波(保密性差)
波长越短、频率越高、带宽越高
短波通信需要指向性强、长波不需要
物理层接口特性
机械特性:接线器形状尺寸、引脚数目、排列、固定和锁定装置
电气特性:接口电缆各条线上出现电压范围、传输速率、距离限制
功能特性:某条线上出现某一电平的电压的含义
过程特性(规程特性);对于不同功能的各种可能事件的出现顺序
物理层设备
传输距离越远,越有可能信号失真
因此根据以太网规范限制传输距离长度
可以通过中继器(半双工通信)延续信号,将电压整形为标准的电压
集线器Hub:多端口中继器。将一个端口收到的信号整形再生后,转发到其他所有端口
不可同时发送数据,会导致冲突
Hub的N个端口对应N个网段,各网段属于同一个“冲突域”
合并Hub,组成更大的冲突域(碰撞域💥)
集线器组成的网络拓扑结构是总线型的(逻辑上),物理上是星形
- 连接的带宽共享
第三章 数据链路层
功能:封装成帧、透明传输、差错控制((位错(检错编码、纠错编码)、帧错)、流量控制、可靠传输(通过滑动窗口))
两种链路(信道):点对点(广域网)、广播(局域网)
结点:主机、路由器
链路:两个结点之间物理通道
数据链路:两个结点之间逻辑通道(链路+协议)
帧:链路层协议数据单元
加强物理层传输原始比特流的功能,将物理连接改造成逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路
提供无确认无连接服务、有确认无连接服务、有确认面向连接服务
封装成帧
为IP数据报添加首部和尾部:帧定界
帧同步:接收方应该能区分帧的起始和终止
数据部分<=MTU
透明传输:对高层不可见。
数据链路层的透明性在于能够无视传输的数据内容,但由于帧定界符会与内容混淆,所以需要实现某些规则
实现透明传输
字符填充法(传输的帧):SOH,EOT的8bit数据
在内容部分的控制信息前加入ESC转译义字符,在接收端去除所有转义字符
零比特填充法:一连串比特连续发送,只要连续5个1,就立刻填入一个0,接收端发现5个1就把后面的0删除
差错控制
有差错就要检错,实现了检错的编码
差错的发生是由于噪声引起的:线路的电气特性导致全局性的随机噪声(热噪声)->提高信噪比、外界短暂的特点原因的局部的冲击噪声(产生差错的主要原因)->利用编码技术解决
差错
- 位错 0变1,1变0
- 帧错 丢失、重复、失序
不是所有链路都要差错检测!对于提供无确认无连接服务(通信质量好的链路)不需要
有确认:就是有重传机制,有差错检测
检错编码:奇偶校验码、循环冗余码CRC
纠错编码:海明码
物理层与数据链路层编码不一样:一个是对于单个比特的传输同步、一个是一组比特的传输过程有无差错
奇偶校验码
n-1位信息元+1位校验元
奇校验码:“1”个数为奇数
偶校验码:“1”个数为偶数
CRC循环冗余码
代传数据除以生成多项式(2进制编码),余数为FCS帧检验序列/冗余码,帧加上冗余码发送
接收方接受数据除以生成多项式,余数为0则接受,余数不为0则1丢弃
无差错接受:
“凡是接收端数据链路层接受的帧,都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”
并不是无比特差错的传输,因此不是可靠传输
海明码
海明距离:码距,差错的个数
码距为n,可以检测n-1比特错
- 确认冗余码/校验码位数r,假设源信息有m位
\[ 海明不等式:2^r>=m+r+1 \]
- 确认校验码和数据的位置,校验码放在序号为\(2^n\)的位置(n从1开始,在低位)(eg.1,2,4...)
1号校验码xx1(最低位1,负责1,3,5,7校验)
2号校验码x1x(第二位1,负责2,3,6,7校验)
4号校验码1xx(第三位1,负责4,5,6,7)
采用偶校验,确保每个校验码负责的对应位“1”个数为偶数,从而计算出海明码
检错并纠错,收到的数据对每个校验码对应的负责位数校验检查“1”个数,查看哪一位出错(每一位异或,再结合起来)
可靠传输与流量控制
流量控制:原因较高的发送速度与较低接受能力的不匹配
(二层流量控制是点对点的,四层流量控制是端到端)
手段:接收端发送给发送端一个窗口公告,控制发送速率,使接收方有足够的缓冲空间来接受每一个帧
- 停止等待协议
发送帧-确认帧-发送帧-确认帧 低效
发送窗口大小=1,接受窗口大小=1
- 滑动窗口协议
发送窗口(发送的数据)、接受窗口确认发送帧、发送窗口前进
后退N帧协议(GBN)
发送窗口大小>1,接受窗口大小=1
选择重传协议(SR)
发送窗口大小>1,接受窗口大小>1
可靠传输:发送什么、收到什么
滑动传输解决的就是可靠传输与流量控制(收不下就不给确认+发送方自动重传ARQ)
停止-等待协议
除了镇内比特差错,还会出现丢包问题(帧、包、段)
不考虑全双工,仅考虑半双工
发送一个帧接受一个帧,计时器到期重传,⏰>平均RTT,帧必须编号,重传则丢弃确认帧
RTT(往返时延包括发送时延)吗?一般不包括,包括传播时延+排队时延+处理时延(接收方处理返回确认消息时间)
上文是单向RTT,双向RTT是双向传播时延
\[ 信道利用率=\frac{L}{CT} \]
T:发送周期,从开始发送数据,到收到第一个确认帧为止(计算T:发送时延+双向RTT)
L:T内发送L比特数据
C:发送方数据传输率 \[ 信道吞吐率=信道利用率*发送方的发送速率 \] 停止等待的信道利用率低,大部分时间发送方空闲
后退N帧协议(GBN)
解决停止-等待协议的信道利用率低问题,连续发送多个帧(流水线技术)
- 必须增加序号范围(防止出错)
- 发送方需要缓存多个分组
滑动窗口:01234567...发送的数据必须在窗口内
接受窗口只有1格,收到n号帧就返回对n帧的确认帧(也可以累计确认,发送对前n帧的确认帧)
已经发完的帧(不在窗口)、正在发送的帧,还能发送的帧(在窗口)、不能发送的帧(不在窗口)
窗口已满则不能发送,但可以放在缓存
GBN累积确认:对前n号帧的全部接受
超时计时器:后退N帧,若N帧的发送帧/确认帧没有收到,重传N帧以及后续未确认的帧,ACK一直发送ACK N-1
GBN总结:累积确认、接收方按序接受、ACK最大按序到达的帧,提高信道利用率,但是重传的效率偏低
选择重传协议(SR)
解决GBN累积确认导致的批量重传带来的效率降低问题
解决方法:设置单个确认、加大接受窗口、设置接受缓存、缓存乱序到达的帧
发送,接受窗口:N
发送窗口:发送完被确认的帧、已经发送但等待确认的、还能发送的
接受窗口:希望收到但没收到的、收到且返回确认的(在缓存中)、等待接受的
发送方:上层调用后SR发送帧或加入发送缓存、收到ACK移动窗口、超时时间后只重传一个帧
接收方:对于接受窗口内的帧来者不拒,失序的帧将被缓存并返回给发送方该帧的确认帧(收到谁确认谁),直到所有帧均被收到为止,这时可以将一批帧按需交付给上层,然后向前移动窗口
如果接收到窗口左边的帧,返回ACK;
超时重传;
帧的标识位是有限的,会出现n号帧是新帧还是旧帧的无法确认,因此窗口不能过大 \[ W_Tmax=W_Rmax=2^{(n-1)} \] n:帧编码个数
W:窗口大小
SR总结:数据帧逐一确认、只重传出错帧、接收方有缓存
信道划分&介质访问控制
点对点链路(PPP,广域网)、广播式链路(总线以太网、局域网:星型(逻辑总线型))
介质访问控制:采取一定措施,使得两对节点之间的通信不会发生相互干扰:
- 静态划分信道
频分多路复用FDM、时分多路复用TDM、波分开多路复用WDM、码分多路复用CDM
- 动态分配信道
轮询访问:令牌传递协议
随机访问介质:ALOHA,CSMA,CSMA/CD,CSMA/CA
多路复用技术:多个信号组合在一条物理通道
实质:广播信道组合为点对点信道
- FDM
每个用户同时分带宽的各个频段
- TDM
带宽一致,每个用户交替使用信道(轮流、周期性)
- STDM(统计时分复用)
发送到集中器的缓存,按需动态分配
- WDM
本质:光波的频分复用
- CDM
每个比特指定固定的m位芯片序列
发送1时候发送对应芯片序列、发送0时候发送芯片序列反码
- 发送的时候两个芯片序列互相正交,规格化内积为0
\[ S·T=\frac{1}{m}\sum_{i=1}^{m}S_iT_i=0 \]
- 两个向量到了公共信道上,线性相加,S-T
- 数据分离:合并的数据和原站点规格化内积,得到发送的数据,1代表1,-1代表0
\[ S·(S-T)=1 \]
\[ T·(S-T)=-1 \]
以下为动态划分信道
特点:信道并非在用户通信时固定分配给用户
随机访问:所有用户可随机发送信息,发送信息时占据全部带宽。(不协调)
ALOHA
每个站点不监听信道,随机重发 成功率低
时隙ALOHA
时间片同步接入信道。发生冲突则等待到下一个时间片再重发
CSMA(载波监听多路访问协议)
先听再说!
CS:发送数据前检测总线电压摆动值(检测碰撞)
MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上
坚持CSMA:监听信道忙,则监听直到有空闲直接传输
如果有冲突等待一个时间再监听
非坚持CSMA:忙则不继续监听,等待一个随机时间再监听
p-坚持CSMA:对于信道空闲的时候,以p概率进行直接传输;1-p概率等到下一个时间槽再传输
忙则持续监听直到信道空闲,再以p概率发送
若冲突则等待下一个时间槽再监听并重复以上过程
CSMA/CD
先听再说,边听边说
CS:载波监听
MA:多点接入 总线型
CD:碰撞检测
监测到数据错误(碰撞💥),立刻停发数据
单程端到端传播时延:\(\tau\)
B监测到碰撞时间(A发送的数据到达):\(t=\tau\)
假设B发送的时间为\(t=\tau-\delta\)
则A检测到碰撞时间\(t=2\tau-\delta\)
因此,最迟需要\(t=2\tau\)时间才能监测到自己发送的数据有没有和其他数据产生碰撞(两倍总线端到端时延,一个争用期)
重传时间:截断二进制指数规避算法
- 退避时间=基本争用期\(2\tau\)
- 定义k为重传次数(小于10),再大就一直保持10
- 从\([0,1,2^k-1]\)中随机取出一个数r
\[ 重传退避时间=r倍的基本退避时间=2r\tau \]
- 重传16次还未成功,则抛弃此帧并向网络层报告(网络拥挤)
帧太短会再发送完毕之前检测不到碰撞,因此需要规定最小帧长:帧的传输时延至少要两倍于信号在总线上的传播时延 \[ \frac{帧长(bit)}{数据传输速率}\geq2\tau \] 因此 \[ 最小帧长=总线传播时延\times数据传输速率\times2=2\tau\times数据传输速率 \] 以太网规定最小帧长64Bytes
CSMA/CA
应用:无线局域网
空闲发送RTS(request to send),收到接收端的CTS(clear to send),开始预约信道
接收端收到帧后用CRC检验,正确响应ACK帧,收到则继续发送,否则进行二进制指数退避算法重传
局域网基本概念和体系结构
多采用分布式控制和广播式通信
星形拓扑、总线型拓扑✅(以太网:逻辑总线)、环形拓扑、树形拓扑
IEEE 802标准
IEEE 802.3 以太网介质访问控制协议(CSMA/CD)及物理层技术规范
IEEE 802.5 令牌环网(单点故障)
IEEE 802.8 光纤技术环网
IEEE 802.11 无线局域网(WLAN)
LLC子层、MAC子层
以太网
Ethernet 使用CSMA
满足速率要求:10Mb/s~10Gb/s
DIX Ethernet v2或IEEE 802.3
无连接、不可靠的服务
10BASE-T 无屏蔽双绞线 10Mb/s 100m 曼彻斯特编码
局域网通信:适配器(网卡)
MAC地址 48bit 前24bit代表厂家(IEEE规定)后24位厂家自定
物理层:前导码+MAC帧
MAC层:6B目的地址(全F为广播)、6B源地址、类型(上层协议)、数据(IP数据报)46(最小帧长64B-6-6-2-4)-1500B(MTU)、FCS(帧检验序列)
高速以太网
100BASE-T 双绞线 100Mb/s 星形 可以全双工无冲突
吉比特以太网 光纤或双绞线 1Gb/s 可以全双工无冲突
10吉比特 光纤 10Gb/s 只支持全双工 无冲突
IEEE 802.11 无线局域网
2B | 2B | 6B | 6B | 6B | 2B | 6B |
---|---|---|---|---|---|---|
帧控制 | 生存周期ID | RA接收端 | TA发送端 | DA目的地址 | 序列控制 | SA源地址 |
AP无线接入点:基站
发送端和接收端:两个基站的MAC地址
BSS:基本服务集,由一个AP(Access Point接入点)和多个无线客户端
ESS:扩展服务集,多个BSS互联
基站之间有限通信
漫游:自动选择最近的AP
VLAN
- 流量隔离(广播帧的泛洪)
- 用户管理
- 降低路由成本
将局域网内的设备划分成与物理位置无关的逻辑组,每个VLAN是单独的广播域
交换机转发表 MAC地址:端口 映射
- VLAN表 VLAN id:端口 or MAC地址
贴标签:在类型前加入4B VLAN标记(后12位VID,0-4095)
WAN
广域网:分组交换技术,强调资源共享
PPP:全双工链路,无流量控制和纠错,帧定界符,透明传输,多种网络层协议、多种类型链路、差错检测、检测连接状态、最大传输单元、网络层地址协商、数据压缩协商
LCP(链路控制)身份验证、NCP(网络控制)
定界符7E,转义字符7D,地址字段A FF
F、A、C、协议、信息部分、FCS、F
扩展以太网
集线器:具有冲突域
网桥:转发与过滤MAC帧,能够区分网段
交换机:多端口网桥
网桥转发表自学习:地址和端口,没有就写入广播,有就转发,每隔一段时间清空
交换机自学习算法,与网桥一样
冲突域:每个结点都能收到所有被发送的帧
广播域:网络中能接收到一个结点发出广播帧的所有设备的集合
(物理层)中继器、集线器:不能隔离冲突域和广播域
(链路层)网桥、交换机:能隔离冲突域、不能隔离广播域
(网络层)路由器:都能
第四章 网络层
sdn:控制平面
IP数据报:版本、首部长度5-4B、区分服务、总长度1B、标识、标志、片偏移、TTL、协议(数据部分)、首部检验和、源地址和目标地址:32位、可选字段0~40B、填充:全0,把首部补成4B整数倍
IP数据报分片
从0开始
不能超过以太网的MTU 1500Bytes,超过则ip分片
标识:标志同一数据报的分片
标志:最低两位有意义,DF(不许分片)1禁止,0允许,MF(更多分片),1还有分片,0代表没有分片
片偏移8B:某片在原分组中的相对位置(字节序除以8Bytes)
IPv4
在哪个网络?
在网络下的哪个主机?
IP编址:
- 分类IP地址:<网络号><主机号>32位/4B 每1B点分十进制
A类 1~126 网络号1B 主机号3B 0
最大网络数 \(2^7-2\) 1 126 最大主机数 \(2^{24}-2\)
B类 128~191 网络号2B 主机号2B 10 最大网络数 \(2^14-1\) 128 191 最大主机数 \(2^{16}-2\)
C类 192~223 网络号3B 主机号1B 110 最大网络数 \(2^8-2\) 192 223 最大主机数 \(2^8-2\)
D类 224~239 多播地址 1110
E类 240~255 保留 1111
0.0.0.0 只可以作为源地址,本网络范围内表示主机,路由表表示默认路由
网络号全0,主机号特定值 只能源地址,表示本网范围内某个主机
255.255.255.255(全1)只能作为目的地址,广播地址,路由器不转发
网络号特定值,主机号全0 不可作为地址,表示一个网络
网络号127,主机号任何数(不全为0或者1),可以作为目的地址和源地址 环回地址 本地软件环回测试 (软件测试)
私有(内部)IP地址
A类
10.0.0.0~10.255.255.255 网段个数1
B类
172.16.0.0~172.31.255.255 网段个数16
C类
192.168.0.0~192.168.255.255 网段个数256
网络地址转换 NAT
目的:私有ip转换为公有ip
NAT路由器:NAT转换表 WAN端对应LAN端的ip和端口号
子网划分和子网掩码
将主机号划分为:子网号、主机号
主机号不能全0(网络号)和全1(广播)
子网掩码与IP地址逐位相与,得到子网网络地址
直接交付(子网掩码相与查看网络号是否匹配)、间接交付(特定主机路由、路由表路径检测、默认路由、丢弃报告出错)
CIDR无分类编址
IP地址后加上/,写上网络前缀的位数
CIDR子网掩码:网络前缀多少就前多少个1
超网
多个子网聚合成一个较大的子网,叫做构成超网
取网络号前n位的交集,合并成一个更大的网络
最长前缀匹配
使用CIDR,查找路由表可能得到多个匹配结果,应选择具有最长网络前缀的路由
ARP协议
知道源ip地址的MAC地址(封装的时候填入),如何知道目的ip地址的MAC地址?
查询本地ARP高速缓存(ip:MAC),没有则使用ARP协议
主机发送ARP广播帧,目的MAC地址全F(1)
有对应MAC地址的主机响应单播ARP响应地址
“下一跳”:到下一个具有ip地址(MAC地址)的设备
10-20min更新一次ARP缓存
主机要找本网内:ARP找到本网主机MAC;找外网:ARP找到本网路由器MAC
路由器要找本网内:ARP找到本网主机MAC;找外网:ARP找到另一个路由器MAC
DHCP
静态配置:ip+子网掩码+默认网关
动态ip地址分配:DHCP服务器(应用层,基于udp),地址重用
租用期:限时
主机广播DHCP发现报文(找服务器)、服务器广播DHCP提供报文(预分配ip)、主机发送DHCP请求报文(请求分配)、服务器广播DHCP确认报文(正式分配ip)
ICMP
支持主机或路由器的差错(异常)报告
网络探询
五种差错报告报文:终点不可达、拥塞丢弃、超时、首部出错、重定向(改变路由:不是最好的路由)
ICMP前8Bytes+IP首部+数据字段前8Bytes=ICMP差错报告报文
装入IP字段(加IP首部)
组播、特殊地址、第二个及以后分片不发送ICMP差错报告
ICMP询问报文
- 回送请求和回答报文 收到询问主机必须给源主机或路由器发送ICMP回送回答报文 ping
- 时间戳请求和回答报文 回答当前时间日期,进行时钟同步和时间测量
应用:PING、Traceroute(跟踪源点到达终点的路径)
IPV6
IPv4已经耗尽,CIDR NAT治标不治本...
基本首部、有效载荷
基本首部:版本、优先级、流标签(从一个源到一个目的)、有效载荷长度、下一个首部、跳数限制、源地址(128bit)、目的地址(128bit)
- 删除校验和字段
- 删除可选字段,加入扩展首部
- 即插即用(自动配置),不需DHCP
- 首部长度是8B整数倍,IPv4是4B整数倍
- IPv6只能在主机出处分片,IPv4可以在路由器和主机分片
- ICMPv6:附加报文分组过大
- 支持资源预分配
- 取消协议字段,改成下一个首部字段
- 取消总长度字段,该用有效载荷长度字段
- 取消服务类型字段
表示:冒号十六进制记法
单薄、多播、任播
兼容性:双栈协议、隧道技术
回顾:路由选择协议
- 内部网关协议 RIP、OSPF
- 外部网关协议 BGP
RIP
分布式、基于距离向量的路由选择 简单
每个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(最短跳数)
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net2 | 1 | 直接交付 |
Net1 | 2 | R1 |
Net4 | 2 | R3 |
距离=跳数=从源到目的经过路由器个数
RIP仅允许一条路由包含15个路由器,距离为16代表网络不可达
- 只能和相邻的路由器交换信息
- 路由器交换的信息是自己的路由表
- 30秒交换一次路由表
路由器初始只知道距离为1的下一跳,接着和相邻路由器交换并更新路由信息
经过若干次更新,达到收敛
- 修改相邻路由器x发来RIP报文所有表项,下一跳改为x,距离+1
- 对修改后RIP报文每一项:
路由表没有Net,则把该项目填入表
有Net,则查看下一跳:
下一跳是x,则用收到的项目更新路由表
不是x,则原来距离比x远则更新,否则不处理
- 180s内没收到x的更新路由表,则把x标记为不可达,即距离设置为16
- 返回
RIP报文在UDP数据报中,也就是说RIP是应用层协议
一个RIP最多20个路由信息
缺点:会造成传输错误信息的循环,好消息快收敛,坏消息慢收敛
OSPF
开放最短路径优先 Dijkstra 最短路径算法SPF
分布式链路状态协议
- 使用泛洪法向自治系统内所有路由器发送信息,而每一个相邻路由器又将此信息发送给所有相邻路由器 广播
- 发送信息是相邻路由器的路由状态
- 只有当链路状态发生变化时,路由器才向所有路由器泛洪
链路状态路由算法
使用Dijkstra算法算出最优选择
OSPF将自治系统划分为区域,适合大规模系统
在IP数据报内发送,是网络层协议
30min更新一次,收敛速度很快,坏消息也很快
BGP
AS自治系统间交换信息,通过BGP发言人(边界路由器)
发生变化才更新
BGP交换的信息是到达某个网络所要经过的一系列AS
交换路径向量,沿某一路径\((AS_1,AS_2)\)可以到达网络\(N5,N6,N7\)
BGP报文放入TCP报文的数据段,是应用层协议
BGP支持CIDR,开始运行交换整个路由表,后续之交换变化的信息
BGP-4连接
- OPEN报文
- UPDATE报文
- KEEPALIVE报文:周期性确认连通性
- NOTIFACTION报文:可以关闭连接
总结:RIP内部网关,使用广播UDP,跳数最少,距离-向量;
OSPF是内部网关,使用IP,代价最低,泛洪,链路状态;
BGP是外部网关,使用TCP,较好,路径-向量;
IP组播
单播:点对点,源-目的
广播:点对多点,全部端口
组播(多播):只给相同需求的主机发送,点对多点,最后一步路由器才会复制
IP组播地址:部分D类地址:224.0.0.0~239.255.255.255,一个D类地址表示一个组播组。只能用作分组的目标地址,最大努力交付UDP,不产生ICMP
组播MAC地址01-00-5E开头,后面将IP地址后23位映射到以太网地址
IGMP
让局域网上的组播路由器知道网内是否有主机参加或退出了某个组播组
使用IP数据包
- 发送IGMP报文给某个路由器,声明想要加入某个组播组
- 利用协议把关系发给其他组播路由器
- 周期性探询本地路由器是否是组播组的成员,经过几次探寻未响应就不再把成员关系发给其他的组播路由器
组播路由选择协议
组播转发树
移动IP
到达不同物理地点,保持ip地址不变
网络层设备
路由器:多输入/输出端口的专用计算器,任务是转发分组
根据路由选择协议构造路由表、更新维护路由表、根据转发表对分组进行转发
输入端口:接受分组、直到网络层分组排队:查表和转发(产生时延)
输出端口: 设置缓冲队列,排队输出
分组丢失原因:输入队列或输出队列缓冲区因为排队溢出
根据路由表(默认路由全0)来得出转发表
第五章 传输层
概述
端系统层次:主机独有
为应用层提供通信服务
- 提供进程与进程间的逻辑通信
- 复用和分用
- 报文进行差错检测
TCP、UDP
面向连接、可靠和无连接、不可靠
复用:应用层所有的应用进程都可以通过传输层再传输到网络层
分用:传输层从网络层收到数据后交付给对应应用进程
端口:传输层SAP(服务访问点),本地意义
端口号
- 服务端:熟知端口号0~1023,登记端口号1024~49151
- 客户端:49152~65536动态选择
FTP:21
TELNET:23
SMTP:25
DNS:53
TFTP:69
HTTP:80
SNMP:161
套接字Socket=(ip,port)
UDP
复用分用、差错检测
无连接、最大努力交付
面向报文,长度不改变,适合一次性少量数据
首部8B,数据字段可以为0
首部:源端口号2B,目的端口号2B,UDP长度2B,UDP检验和2B
找不到目的端口号丢弃报文,发送ICMP“端口不可达”差错报告报文
UDP校验
伪首部:模仿ip首部,只有计算校验和时出现
TCP
虚连接,点对点连接(进程对进程)
可靠有序,不丢不重
全双工通信:发送缓存(准备发送的数据&已发送但未收到的数据);接受缓存(按序到达但尚未被应用程序读取的数据&不按序到达的数据)
面向字节流:传输层将应用层报文视作连续字节流
首部格式
20B首部,源端口目的端口各2B,总共4B,
序号:字节流的第一个字节的顺序编号
确认号:期望收到对方下一个报文段的第一个数据字节的序号,若确认号位N,则证明到N-1点所有数据已正确收到
数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段段起始处有多远,4B一个单位
紧急位URG:为1时在缓存区优先发送
确认位ACK:为1时确认位有效
推送位PSH:为1时接收方尽快交付接受应用进程
复位RST:为1时需要释放TCP连接
同步位SYN:表明是连接请求/连接接受报文
终止位FIN:为1时表明发送方数据已发完,要求释放连接
窗口:自己的接收窗口,可以容纳的字节流,对方应根据窗口设置发送窗口(流量控制)
检验和:检验首部+数据,检验时加上伪首部12B,第四个字段为6
紧急指针:URG=1时有意义,指出紧急数据的字节数
选项:可选,最大报文段长度MSS、窗口扩大、时间戳、选择确认...
TCP连接管理
客户-服务器方式(C/S)
三次握手-四次挥手**
C:连接请求报文段,无数据
- SYN=1,seq=x(随机)序号
S:为TCP连接分配缓存和变量,返回确认报文段,无数据
- SYN=1,ACK=1,ack=x+1(想要收到的下一个序号),seq=y(随机)
C:确认的确认,可以携带报文数据,分配TCP连接缓存和变量
- SYN=0(同步已经完成了),ACK=1,seq=x+1,ack=y+1(想要收到下一个序号)
SYNFLOOD泛洪攻击
- 攻击者发送大量第一个握手数据包SYN,服务器返回ACK确认后,攻击者不进行确认。TCP连接处于挂起状态,浪费服务器资源导致崩溃
连接释放
C:发送连接释放报文段,停止发送数据
- FIN=1,seq=u
S:服务器送回确认报文段--半关闭状态
- ACK=1,seq=v,ack=u+1
S:服务器发送完毕所有数据,发出连接释放报文段
- FIN=1,ACK=1,seq=w,ack=u+1
C:客户端送回一个确认报文段,在等待时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭
- ACK=1,seq=u+1,ack=w+1
可靠传输
可靠:保证接收方进程从缓冲区读出的字节流与接收方一致
确认机制
直到接收方完整接收到报文段,才把缓存区中的发送报文段删除(确认报文段)
累积确认:只确认第一个丢失字节开始的报文段
重传:超时重传
RTTs(加权平均往返时间):自适应算法计算的时间
冗余ACK(确认):快速重传,每当比期望序号大的失序报文段到达时、发送一个冗余ACK,指明下一个期待字节的序号
可靠传输在数据链路层已经讲过
流量控制
发送方的速率放慢
TCP利用滑动窗口机制实现流量控制
接收方根据接受缓存大小,动态调整发送方发送窗口大小、即接受窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接受窗口rwnd和拥塞窗口cwnd的最小值
e.g. ACK=1,ack=201(期望收到下一个是201开头的报文段),rwnd=300(允许发送201-500B的窗口)
然后发送窗口往前移动,发两次100B的报文段(最大报文段),然后发送窗口满了,进入等待状态,直到接收方传来新的确认以及rwnd的大小,改变窗口大小并前进,重复以上过程
如果窗口为0,启动一个持续计时器,到期后发送0窗口探测报文段,接收方给出现在的窗口值,若为0则继续等待开启计时器
拥塞控制
条件:对资源需求的\(总和\ge可用资源\)
网络吞吐量随输入负荷增大而下降,因此要协调防止过多的数据注入到网络中
与流量控制区别:流量控制是点对点一对一对,拥塞控制是多对一的,有很多主机占据一条带宽
四种算法
慢开始、拥塞避免、快重传、快恢复
假设:
- 数据单方向传送,另一个方向只传送确认
- 接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度
\[ 发送窗口=Min(接受窗口rwnd,拥塞窗口cwnd) \]
接受窗口:接收方根据接受缓存设置的值,并告诉发送方,反映接收方容量
拥塞窗口:发送方根据自己估算的网络拥塞程度设置的窗口值,反映网络当前容量
- 慢开始和拥塞避免
开始cwnd=1,“指数增长”,直到ssthresh门限初始值16,然后开始拥塞避免,”加法增大“,直到网络拥塞,记录下当前的cwnd拥塞窗口,设置新的ssthresh=\(\frac{cwnd}{2}\),设置cwnd=1,重复慢开始流程。
- 快重传和快恢复
慢开始、拥塞避免“加法增大”、收到3个重复的ACK(说明冗余了),立刻执行快重传算法(比超时计时器快,节省时间),快恢复“乘法减小”,降到新的门限制为\(\frac{cwnd}{2}\),然后继续加法增大...
第六章 应用层
为应用程序的通信提供服务
定义:
- 应用进程交换的报文类型,请求还是响应?
- 各种报文类型的语法,如报文中的各个字段机器详细描述
- 字段的语义、即包含在字段中的信息的含义
- 进程何时、如何发送报文,以及对报文进行的响应的规则
文件传输、访问和管理、电子邮件、虚拟终端、查询服务和远程作业登陆
FTP、SMTP、POP3、HTTP、DNS
C/S模型、P2P模型
DNS
域名解析为ip地址
根域名 .
顶级域名
- 国家 cn,us,uk
- 通用顶级域名 com,net,org,gov,int,aero,museum,travel
- 基础结构域名/反向域名 arpa(ip反DNS到域名)
二级域名
- 类别域名 ac,com,edu,gov,mil,net,org
- 行政区域名 bj,js
- 自定义域名
三级域名
四级域名
域名树🌲表示
DNS服务器:层次划分
特殊:本地域名服务器,优先发给本地DNS Server
如果本地DNS服务器没有,查询根域名服务器 13个 但有更多分服务器
两种方式:递归查询和迭代查询
递归查询:根域名服务器知道下一级顶级域名服务器的位置,然后是权限域名服务器(只能负责一个区:每一个区是某个域名及其子域名的管理,自定义),如果还不能完成请求,那就再给出其他的权限域名服务器地址进行查询,直到查询成功逐层返回,直到给本地域名服务器
迭代查询:由本地域名服务器一个个询问(多用)
FTP
文件上传、下载
C/S协议,TCP实现可靠传输
1个主进程,多个从属进程
20端口
文本模式:ASCII
二进制模式:Binary
电子邮件
SMTP客户、邮件服务器
邮件服务器间POP3,IMAP
端口25
C/S
WWW和HTTP
World Wide Web,大规模联机的信息储藏空间
使用统一资源定位符URL标识唯一资源HTML(超文本标记语言HyperText Markdown Language)
URL格式:<协议名>://<主机>:<端口>/<路径>
通过超链接获取资源,这些资源通过超文本传输协议HTTP(HyperText Transfer Protocol)
C(Browser浏览器)/S(Server)
一个服务器监听TCP端口80
浏览器分析URL,向DNS请求解析为IP地址,浏览器与服务器建立TCP连接,发送HTTP请求报文,获得HTTP响应报文,获取资源,浏览器解析并展示,释放TCP连接
HTTP 无状态、无连接(虽然有TCP连接) Cookie本地存储历史记录
连接方式:
- 非持久连接 TCP连接三次握手 接下来发送和接受HTTP报文,关闭TCP连接
- 持久连接 多次请求报文的时候不关闭TCP连接,分为流水线式(等待两个RTT)和流水线式(一个RTT)
HTTP报文结构
面向文本,每一个字段都是ASCII码
请求报文:方法 URL 版本 回车行CRLF
首部字段名 值 CRLF
...CRLF
主体
响应报文:版本(HTTP/1.1 HTTP/2 HTTP/3) 状态码 短语 CRLF (状态行)
首部字段名 值 CRLF
...CRLF
主体
响应状态码:
- 1xx表示通知信息,请求收到或正在处理
- 2xx表示成功,接受
- 3xx表示重定向,如需完成请求需要进一步行动
- 4xx表示客户出错,如请求中语法错误或不能完成
- 5xx表示服务器出错,如服务器失效或无法完成请求