壹、计算机网络体系结构
1. 可靠服务与不可靠服务
可靠服务是指网络具有纠错、检错、应答机制,能保证数据正确、可靠地传送到目的地。
不可靠服务是指网络只是尽量正确、可靠地传送,而不能保证数据正确、可靠地传送到目的地,是一种尽力而为的服务。
对于提供不可靠服务的网络,其网络的正确性、可靠性要由应用或用户来保障。例如,用户收到信息后要判断信息的正确性,如果不正确,那么用户要把出错信息报告给信息的发送者,以便发送者采取纠正措施。通过用户的这些措施,可以把不可靠的服务变成可靠的服务。
2. 各层的传输单元
物理层:比特
数据链路层:帧
网络层:数据报
传输层:报文段
贰、物理层
一、通信基础
1. 单工、半双工、全双工
单工:单向信道
半双工:双方都可以进行收发,但不能同时收发
全双工:双方可以同时收发(两条信道)
2. 比特率和波特率
比特率:信息传输速率,单位是b/s或bps
波特率:码元传输速率,单位是波特Baud
若一个码元含n个比特,则波特率 * n = 比特率
3. 信道容量
奈奎斯特定理:理想无噪声信道容量,
其中C为信道容量,B为信道带宽(物理层的带宽单位是HZ),M为进制数(信号状态数)
香农定理:有噪声信道容量,,注意
其中S/N为信噪比,注意需要将以dB为单位的信噪比进行处理,转化为能量比,两者在数值上等价。
为什么需要有dB这个单位进行表示呢?——通常S/N是一个很大的数,取log比较方便。
例如:带宽为2MHz,信噪比为30dB
错误答案:C=2M * log31
正确答案:S/N = 10^(30 / 10) = 1000, C=2M * log(1 + 1000) ≈20MHz
4. 编码
将数据变换为数字信号的过程叫作编码
常见编码有:单双级归零码(前一半有效,中间归零)、单双级不归零码、双相码(曼彻斯特编码)、差分双相码。
曼彻斯特编码:每个时刻中间都会跳变,高到低为1,低到高为0。【有时可能相反,得看题目】以太网采用该编码。
差分曼彻斯特编码:只有两种波形,相邻波形变化为1,不变为0。
图片来自 https://blog.csdn.net/qq_34745941/article/details/128237381
5. 调制
将数据变换为模拟信号的过程称为调制
常见调制方法:2ASK,2FSK,2PSK,QAM
2ASK:二进制幅移键控,改变振幅来表示0和1。抗干扰弱。
2FSK:二进制频移键控,0和1采用不同载波。容易实现,抗干扰强,但频带利用率低。
2PSK:二进制相移键控,0和1差一个π的相位
QAM:正交振幅调制,也称幅值相位联合键控,在相同频率下,将ASK与PSK结合起来。
对于QAM,设波特率为B,采用m个相位,每个相位n种振幅,QAM数据传输速率R。
则
6. 基带传输与频带传输
基带传输:在计算机内部或相邻设备之间近距离传输,可以不经过调制直接在信道上传输,常用于局域网。可以采用不同编码。
频带传输:远距离或无线传输,必须对数字信号进行调制。
二、传输介质
1. 导引型传输介质
导引型传输介质中沿固体媒介(铜丝或光纤)传播。
架空明线:易受干扰,对噪声敏感。
双绞线:主要用于基带传输。可以隔绝相邻导线的干扰,分为屏蔽双绞线STP和无屏蔽双绞线UTP。
同轴电缆:屏蔽性更好,主要用于频带传输。
光纤:利用光的全反射,多模光纤用于近距离,单模用于远距离。
2. 非导引型传输介质(无线电信号的介质)
地波传播:低频电磁波沿地球表面传播,有一定绕射能力,几百千米。
天波传播:高频电磁波可被电离层反射,可传播上万公里,但不稳定。
视线传播:点对点直线传播,通过地面中继站或卫星中继站接力。
三、物理层设备
1. 中继器
将信号整形再生,再转发出去,以消除传输中的衰减。
没有存储转发功能,不能连接两个不同速率的网段。
2. 集线器
多端口的中继器
不能分割冲突域和广播域
叁、数据链路层
一、组帧
以帧为单位进行传输,可以在出错时只重传出错的帧,避免重传整个数据。
组帧时不仅要加上头部,还要加上尾部,明确区分帧在比特流中的起止位置。
为什么网络层的IP数据报不用加上尾部呢?
——因为IP数据报是链路层数据帧的数据部分,没必要加尾部。
二、差错控制
1. Internet校验和
将数据划分为16bit的序列,求和,最高位进位加到最低位。最后逐位取反得到checksum字段的值。
2. 循环冗余检验码CRC
用数据D除以r+1位的G(二进制除法),余下的r位就是待求的R。
3. 检错码与纠错码
略
三、多路访问协议
MAC协议针对广播链路
1. 信道划分MAC协议
多路复用技术
负载重时效率高
码分多址CDMA
2. 随机访问MAC协议
允许冲突,采用冲突恢复机制
负载轻时效率高
典型协议:ALOHA,时隙ALOHA,CSMA,CSMA/CD
CSMA/CD的冲突检测不适用于无线局域网,接收信号会淹没在本地发射信号中
3. 轮转访问MAC协议
轮询;令牌传递
存在额外开销和单点故障问题,效率介于前两种之间
四、ARP协议
1. MAC地址
全世界每块网卡在出厂时都有一个唯一的MAC(介质访问控制)地址,在局域网内标识一个帧从哪一个接口发出,到达那个物理相连的接口。
MAC地址含6个字节,采用16进制表示,每个字节之间用-隔开。如:12-34-56-78-9A-BC
每经过一个节点源MAC地址和目的MAC地址都会改变!
IP地址除了在穿透内网的时候会改变,其他时候不变。
2. ARP地址解析协议
网络层只有IP地址,在同一局域网内,已知目标的IP地址,如何确定其MAC地址呢?
局域网内每个结点(主机和路由器)维护一个ARP表,存储IP与MAC的映射关系。
若A不知道B的MAC地址,则A广播ARP查询分组(含有B的IP),B收到后应答,A将B的MAC存于ARP表中,直至TTL超时。
ARP是即插即用协议,可自行创建ARP表。
五、以太网
1. 局域网
在以太网之前首先了解一下局域网
局域网(Local Area Network, LAN)是指在一个较小的地理范围(如一所学校)内,将各种计算机、外部设备和数据库系统等通过双绞线、同轴电缆等连接介质互相连接起来,组成资源和信息共享的计算机互联网络。
局域网的特性三个元素决定——拓扑结构、传输介质、介质访问控制方式。不同的局域网技术如以太网、令牌环网等。
2. 以太网
以太网是目前占据统治地位的有线局域网技术,逻辑结构是总线型,物理结构是星型。
早期的以太网物理结构是总线型(同轴电缆),目前基本采用星型物理拓扑结构,通过交换机分割冲突域。
以太网提供的是无连接不可靠服务。
无连接:发送方和接收方网卡之间 没有握手过程。
不可靠:接收方 不向发送方进行确认,差错帧直接丢弃,数据恢复依靠高层协议。
以太网的MAC协议采用二进制指数退避算法的CSMA/CD,由网卡NIC实现。
以太网的帧结构,其中最开始的8字节前导码用于时钟同步,默认不算在内(除非有特殊说明)。以太网帧中包含目的MAC、源MAC、类型、数据和CRC校验码。
MAC地址:若目的MAC与当前MAC相同,或目的MAC为全F(广播地址)则接收,否则丢弃。
类型:指出封装的上层协议的类型,如IP数据报等。
数据:MTU为1500B,故至多1500B;为了满足L/R≥RTT,要求L≥64B,即数据部分≥46B。
图片来自 http://c.biancheng.net/view/6391.html
3. 交换机
交换机能够存储-转发以太网帧,检验帧的目的MAC并向一个或多个输出链路转发。
使用CSMA/CD协议
透明、即插即用(无需配置)、隔绝冲突域、不隔绝广播域
交换机的多个端口之间可以同时传输(交换机能够缓存帧)
通过交换表确定转发的接口,交换表可以由自学习过程进行构建
可能存在的疑问——交换机既然隔绝冲突域,为什么还要使用CSMA/CD协议呢?
事实上, 全双工的交换机是不需要CSMA/CD的,有些交换机为了支持半双工或考虑兼容性,才会需要用到CSMA/CD协议。
4. 虚拟局域网
将原先的一个局域网划分成多个组,一组形成一个虚拟局域网VLAN,每一个VLAN是一个小的广播域。
基于端口的VLAN:按端口分组,VLAN之间的转发需要通过路由器(实际中厂家会将交换机与路由器集成到一起)。
跨越多个交换机的VLAN:有时一个VLAN的端口分布在不同交换机上,可以通过在每个交换机上设置中继端口,实现不同交换机上的分组通信。
六、PPP协议
1. 特点
之前的MAC协议针对的是广播链路,而PPP协议针对的是点对点链路,因此无需介质访问控制MAC,也无需明确的MAC寻址。除了PPP,HDLC也是一种点对点链路控制协议。
2. 设计需求
组帧:封装任何类型的网络协议分组(不只是IP数据报)
比特透明传输:必须支持任何比特模式
差错检测:只检测,不纠正
无需支持差错纠正、流量控制,也不存在乱序交付
3. PPP数据帧
其中地址和控制字段可协商决定是否删去,协议、信息、校验字段可协商确定长度,最多可省5B
4. 字节填充
注意到PPP数据帧的定界符是一个特定的0-1串,若数据中出现相同的0-1串,可能被误认为定界符,违背了“比特透明传输”的原则。
发送端:在数据中的<01111110>字节和<01111101>字节之前插入额外的<01111101>字节
接收端:单个<01111101>为填充字节;连续两个<01111101>,只保留第2个;单个<01111110>为定界符。
肆、网络层
一、虚电路网络与数据报网络
网络服务模型包括 连接服务和 无连接服务,前者的代表是ATM的虚电路网络,后者的代表是Internet的数据报网络。
1. 虚电路VC
虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接),由沿路的网络设备共同完成虚电路功能。
虚电路综合了电路交换与分组交换的共同优点,有连接,每个分组选路相同,实时性好。
虚电路“虚”在哪里?——采用分组交换而非电路交换,无需多路复用,每个分组能够利用全部带宽。
每条虚电路包括一条路径、每段链路的虚电路号VCID,路由器利用转发表记录信息。
分组携带的是下一条的VCID而不是目的地址,路由器转发时根据转发表改写VCID。
2. 数据报网络
无连接,每个分组携带目的地址,每个分组独立选路,路由器根据目的地址转发。
路由聚合:IP太多,最长前缀匹配优先
简化网络,复杂边缘
二、IPv4
1. IPv4数据报分组格式
版本号为4
首部长度单位为4B,通常取5(无选项字段)
总长度单位为1B
片偏移单位为8B
2. 分片
注意计算
3. IP编址
接口:主机/路由器与物理链路的连接。路由器通常有多个接口,而主机一般1或2个。
IP地址:标识主机、路由器的接口。通常用点分十进制表示。高位为网络号,地位主机号。
IP子网:网络号相同的设备接口构成IP 子网,不跨越路由器就可以物理联通。
4. 有类IP地址
ABC类可用于标识接口,D类用于多播地址,E类供研究使用。
部分特殊IP
私有IP,在公共互联网上无效
5. 子网划分
略
三、CIDR与路由聚合
1. CIDR无类域间路由
CIDR消除了ABC类地址界限,把网络号和子网号统称为网络前缀,并融合了子网地址与掩码,形如1.2.3.4/22
CIDR的优势——提高地址分配效率;通过路由聚合提高路由效率
四、DHCP协议
主机在互联网中如何获取一个IP地址呢?
静态配置:手动设置IP、掩码、默认网关、DNS服务器等
动态主机配置协议DHCP:即插即用,允许地址重用(不使用的时候可以给别人用)
DHCP是应用层协议,封装到UDP数据报
五、网络地址转换NAT
通过替换解决
外网客户如何连接内网服务器?——NAT穿透问题
静态配置NAT(手动配置转换表)
互联网网关设备协议IGD
中继服务器
六、互联网控制报文协议ICMP
ICMP主要功能——差错报告和网络探询
差错报告:目的不可达;源抑制(缓存已满);超时;参数问题;重定向……
网络探询:回声请求;应答报文
ICMP报文会封装到IP数据报中进行传输(给出错的IP数据报加上ICMP的头部,再加上一个新的IP头)
七、IPv6
1. 介绍
32位IPv4地址已经分配殆尽,提出了128位的IPv6地址
IPv6数据报有固定40B的基本首部,并且不允许分片
相比于IPv4,IPv6的基本首部移除了校验和(减少处理时间)与选项字段
2. 地址表示
地址表示:128位分成8组,以十六进制进行表示,用冒号分割,连续的0可用::代替(但只能使用一次)。
eg:
FF01 : 0 : 0 : 0 : 0 : 0 : 0 : 43 = FF01 :: 43
IPv4嵌入形式:IPv4地址为a.b.c.d,则相应的IPv6地址为 :: FFFF : a.b.c.d
采用地址前缀,不使用掩码
eg:
FF01 : 4321 :: / 32
3. 其他
IPv6有三种基本地址类型——单播,多播,任意播
单播:一对一通信
多播(组播):一对多通信,只能作为目的地址,向一个多播组发送数据报
任意播:与一组中的一个通信(通常是最近的一个)
IPv6没有广播地址,取而代之的是多播
隧道技术:把IPv6作为数据部分封装到IPv4数据报中
八、 路由算法
1. 链路状态路由算法
Dijkstra算法
基于全局信息
存在“震荡”的可能(选择链路通信量作为代价)
2. 距离向量路由算法
Bellman-Ford算法
异步迭代(只在变化时通知邻居)
分布式
“好消息”传播快,“坏消息”传播慢(无穷计数问题,采用毒性逆转、定义最大度量等方法)
3. 层次化路由
将任意规模的网络抽象成图来计算路由——过于理想化。
一个拥有6亿节点的网络,路由表几乎无法存储,并且单纯的路由信息就会淹没网络!
此外还存在管理自治问题。
自治系统AS:聚合路由器为一个区域,AS内路由器运行相同的路由算法。
网关路由器:位于AS边缘,连接其他AS的网关路由器。
AS间路由:需要获取可达性信息。当存在多个网关可以到达目的时,选择最近的网关路由器(热土豆路由)
九、Internet路由
Internet采用层次路由,AS内部路由也称IGP。常见的有RIP、OSPF等。
1. RIP协议
距离向量路由算法
跳步数作为距离,采用毒性逆转技术,最大有效距离为15,邻居之间每30s交换一次距离向量。若180s未收到通告则认定邻居/链路失效,需重新计算路由。
RIP的路由表通过一个应用层进程进行管理,通过UDP数据报发送。
2. OSPF协议
链路状态路由算法
OSPF通告在整个AS范围内泛洪,报文直接封装到IP数据报,不经过传输层协议
优点:所有的OSPF报文可以被认证,安全;允许同时使用多条相同费用的路径(RIP只能选一条);对每条链路可以针对不同TOS设置不同费用度量(分流);集成单播路由与多播路由;支持对大规模AS再次分层。
3. BGP协议
Internet的AS间路由协议——边界网关协议BGP,将Internet粘合为一个整体
BGP会话通告去往不同目的前缀子网的路径(不是长度),报文交换基于半永久的TCP连接。
通告包括前缀和属性,两个重要的属性——AS路径,下一跳边界路由接口
AS内路由侧重性能,AS间路由策略主导
伍、传输层
一、传输层服务
传输层协议为不同主机的进程之间提供了端到端的逻辑通信机制,而网络层则是主机之间
Internet的传输层协议包括TCP和UDP,均不保障时延与带宽
二、多路分用与复用
如果某层的协议对应直接上层的多个实体/协议,则需要分用和复用
接收端:多路分用,根据头部信息给到不同进程
发送端:多路复用,多个socket一起发过去
UDP的socket用二元组(目的IP,目的端口)标识
TCP还引入了源IP与源端口,用四元组标识
三、用户数据报协议UDP
1. 功能
复用/分用
简单的错误校验【注意没有纠正】
可能丢失或乱序到达【需要在应用层增加可靠性机制并采用特定的错误恢复机制】
2. 优点
无需连接,低延时
实现简单,无需维护连接
头部开销小
无拥塞控制,应用可更好地控制发送时间与速率
3. 校验和
四、可靠数据传输
何为可靠数据传输?
不错,不乱,不丢。
1. Rdt1.0——可靠信道上的可靠数据传输
底层信道完全可靠,只要发出就能被正确接收,收发方的FSM独立
2. Rdt2.0——产生位错误的信道
不乱,不丢,只有位错误
停等协议
利用校验和检测位错误
用ACK和NAK显示确认
引入重传机制
3. Rdt2.1——序列号
如果ACK和NAK在传输中出错怎么办呢?——让发送方重传
重传会产生重复分组,因此要引入序列号。
停等协议,只需要两个序列号
序列号不匹配代表已经正确接收文件,只是ACK/NAK出错
4. Rdt2.2——无NAK
取消了NAK,用ACK告知发送方最后一个被接收的分组序号
5. Rdt3.0——超时重传
分组可能丢失,引入计时器
五、滑动窗口协议
1. 流水线机制
一次发送多个分组,提高3.0性能
需要更大的序列号范围和存储空间
采用滑动窗口协议管理已发送而未确认的消息
2. GBN协议
累计确认
只有一个计时器
无缓存,只记住期望收到的序列号,丢弃乱序分组
窗口大小N,序列号k位,满足
3. SR协议
GBN的累计确认会导致大量重传
设置缓存,每个分组单独确认
每个分组设置定时器
接收方也有窗口,与发送方不同步
六、TCP协议
1. 概述
TCP提供可靠的按序字节流机制
发送方和接收方都有缓存
连接状态只在两端维护
全双工
段结构如下,TCP中的ACK号是指希望收到的下一个字节序号
特别注意这里的序号和ACK号都指的是 字节序号而非段本身的编号
图片来自 https://www.cnblogs.com/ts65214/p/12968246.html
TCP没有规定如何处理乱序到达的段,由实现者自行决定
2. TCP可靠数据传输
采用流水线机制和累计确认
TCP使用单一计时器,触发重传的事件包括超时和重复ACK
如何设置超时时间?——应大于RTT——如何估计RTT?
超时时间 = EstimatedRTT + 4 * DevRTT
其中E = (1 - α) * E + α * SampleRTT
D = (1 - β) * D + β * |SampleRTT - E|
若正常收到按序到达的段,接收方会等待500ms,若期间收到另一个按序到达的段,则立刻发送两个ACK。
快速重传机制——3个重复ACK
3. 流量控制
流量控制针对发送方和接收方,接收方会在段的头部字段把自己的RcvWindows告知发送方,让发送方限制自己已发送但未收到ACK的数据大小
若RcvWindows=0,发送方也可以发送很小的段,用于从接收方获取RcvWindows信息
4. TCP连接管理
三次握手建立连接,前两次SYN标志为1
四次挥手关闭连接,可以由客户端发起,也可服务器端发起
七、拥塞控制原理
拥塞控制针对网络,不同于流量控制
拥塞控制方法——端到端拥塞控制(端系统通过隐式观察延迟、丢包率判断拥塞),网络辅助的拥塞控制(路由器显式反馈拥塞信息)
八、TCP拥塞控制
1. 基本原理
根据拥塞窗口大小CongWin限制发送速率
策略——加性增-乘性减AIMD,慢启动SS
AIMD:每个RTT将CongWin增大一个MSS(最大段长度)
SS:每收到一个ACK令CongWin增大一个MSS,每个RTT实现翻倍
何时由SS变为AIMD——Threshold变量。当loss事件发生时,设为loss前CongWin的一半,达到Threshold之前慢启动。
loss事件的处理——3个重复ACK,将CongWin减半,然后AIMD;超时,减为1.
2. 性能分析
平均吞吐率
TCP具有公平性,但UDP和并发TCP会产生不公平
陆、应用层
一、网络应用基本原理
1. 网络应用体系结构
客户机/服务器结构(c/s结构)
点对点结构(P2P结构)
没有永久在线的服务器,任意节点之间可直接通讯
混合结构
2. 网络应用进程通信
进程间的通信是网络应用的基础,不同主机进程的通信依靠套接字socket
进程寻址的标识符——IP地址+端口号
协议内容——消息类型【请求/响应】,消息格式,字段的语义,规则【进程何时以及如何发送/接收信息】
二、Web应用
1. Web应用概述
网页:包含多个对象,如HTML文件、JPEG图片等
对象的寻址:URL统一资源管理器
超文本传输协议HTTP:C/S结构,使用TCP ,是无状态协议
无状态指服务器不维护任何在客户端过去请求的消息
2. HTTP连接类型
建立连接需要1个RTT
持久性与非持久性连接
带流水的持久性连接,理想状态下所有对象只需1个RTT
3. HTTP消息格式
两类消息——请求信息与响应消息
请求消息的格式:请求行+头部行+换行+消息体
方法类型
GET和POST都是上传输入方法
GET在 请求行的URL字段上传输入
POST在 消息体中上传输入
4. Cookie技术
Cookie技术,数据是保存在用户本地的
5. Web缓存技术
设置代理服务器
条件性GET:如果缓存最新,则响应不包含对象
三、Email应用
1. Email应用概述
构成组件:邮件客户端,邮件服务器,SMTP协议【服务器之间传递】
为什么需要服务器,而不是用户之间直接传递?
——不能保证用户24小时在线,未进入Internet时将无法成功发送
SMTP协议:TCP,端口号为25,使用持久性连接和命令/响应交互模式,消息只能包含7位ASCII码
HTTP与SMTP都采用命令/响应交互模式,命令和状态代码都是ASCII码。
HTTP:拉式(PULL),浏览器把网页拉到本地;每个对象封装在独立的响应消息中
SMTP:推式(PUSH),发送方把消息推到接收方;多个对象在有多个部分组成的信息中
2. Email消息格式
通过多媒体扩展,可以发送ASCII码之外的其他格式
3. 邮件访问协议
从服务器获取邮件:POP协议,IMAP,HTTP