概述
电路交换
- 特点:
- 面向连接
- 由于计算机数据具有突发性,导致通信线路的利用率很低
- 3个阶段:
- 建立连接
- 通信
- 释放
- 图示
分组交换
关键构建
- 主机:为用户进行信息处理,并且可以和其他主机通过网络交换信息
-
特点
在发送端,把较长的报文划分成较短的、固定长度的数据段,每一个数据段前面添加上首部构成分组;
-
原理
-
图示
![image.png](https://cdn.nlark.com/yuque/0/2021/png/21390724/1630237192198-072e22a1-63b2-4410-8091-14f4df0b2c56.png#align=left&display=inline&height=155&id=ubf2aa845&margin=%5Bobject%20Object%5D&name=image.png&originHeight=155&originWidth=824&size=10317&status=done&style=none&width=824)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/21390724/1630237213645-0145ad64-5cc6-4fa8-8ed1-2f7d784a1435.png#align=left&display=inline&height=426&id=uc6d1d54e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=426&originWidth=900&size=35738&status=done&style=none&width=900)
传输单元
-
分组的首部
每个分组的首部都包含地址等控制信息
- 根据首部中的地址信息,把分组转发到下一个节点交换机
-
优点
高效:动态分配传输带宽,对通信链路是逐段占用
- 灵活:以分组为传送单位和查找路由
- 迅速:不必先建立连接就能向其他主机发送分组
可靠:保证可靠性的网络协议;分布式的路由选择协议网络有很好的生存性
问题
在各结点存储转发时需要排队,会造成一定的延迟
-
报文交换
原理
-
特点
-
三种交换的比较
网络性能指标
速率
- 带宽
- 吞吐量
- 时延
- 时延带宽积
-
计算机网络体系结构
ISO七层模型
应用层:文件传输、电子邮件、文件服务、虚拟终端
- 表示层:数据格式化、代码转换、数据加密
- 会话层:解除或建立与其他节点的联系
- 传输层:提供端对端的会话
- 网络层:为数据包选择路由
- 数据链路层:传输有地址的帧、差错检测
-
TCP/IP四层模型
应用层
- 传输层
- 网际层
-
五层模型
应用层
- 传输层
- 网络层
- 数据链路层
-
网络分层的好处
-
接收和发送模型
物理层
主要任务
确定与传输媒体的接口的一些特性,即机械特性、电气特性、功能特性、过程特性
通信模型
几个术语:数据、模拟信号、数字信号、码元(代表不同离散数值的基本波形)
信号
基带信号:信源的信号,如计算机输出的各种文字、图像
带通信号:基带信号经过载波调制后,把信号频率范围搬移到较高的频段以便传输
调制方法
调幅(AM):振幅
- 调频(FM):频率
-
通信分类
单工通信
- 半双工通信
-
传输媒体
导向
双绞线
- 同轴电缆
-
非导向
无线
- 短波
-
信道复用
分类
频分复用
- 时分复用
- 波分复用
- 码分复用
数据链路层
MAC帧格式
透明传输
- 问题出现
- 解决
- 发送端的数据链路层在数据中出现控制字符的前面插入一个转义字符ESC
- 接收端的数据链路层将数据送往网络层之前删除插入的转义字符
- 如果数据中也出现了转义字符,那么就在其前面再插入一个转义字符,接收端遇到两个连续的转义字符就删除前面一个
差错检测
循环冗余检验CRC
将MAC帧划分为组,再数据后面添加n位冗余码(也称帧检验序列FCS)一起发送,接收端收到后进行校验
不能做到可靠传输
CRC只能做到无差错接收(对错误的MAC帧进行丢弃),但是要做到“可靠传输”,则必须加上确认和重传机制。
PPP协议
特点
全世界使用最多的数据链路层协议——点对点协议(Point-to-Point Protocol)
- 拨号电话线接入因特网一般使用的都是PPP协议
应满足的需求
协议字段
逻辑链路控制LLC
- 媒体接入控制MAC
适配器
- 又称通信适配器或网络接口卡,或网卡
- 功能
- 进行串行/并行转换
- 对数据进行缓存
- 在计算机的操作系统安装设备驱动程序
- 实现以太网协议
CSMA/CD
- 载波监听:检测总线上有没有其他计算机发送的数据信号
- 多点接入:许多计算机以多点接入的方式链接在同一根总线上
- 碰撞检测:检测信道上的信号电压大小,是否产生了碰撞
网络层
虚电路与数据报
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
IP数据报的格式
- 标识:占16位,是一个计数器,用来产生数据报的标识
- 标志:占3位,前一位MF=1表示后面还有分片,0表示最后一个分片,中间位为DF,为0时才允许分片。
- 片偏移:较长的分组在分片后某片在原分组中的相对位置,片偏移以8个字节为偏移单位
- 协议:指出应将数据部分交给哪一个进程
-
中间设备
又称中间系统或中继系统
- 物理层:转发器
- 数据链路层:网桥/桥接器
- 网络层:路由器
- 网桥和路由器的混合物:桥路器
-
IP地址分类
A类:网络号占1个字节且以0开头
- B类:网络号占2个字节且以10开头
- C类:网络号占3个字节且以110开头
- D类:网络号以1110开头,为多播地址
-
IP层数据报的流动
ARP协议
地址解析协议,解析IP地址来寻找同一个网络中数据链路层地址并将这种映射关系存储到ARP高速缓存中的的网络传输协议
- 实际网络中还需要使用硬件地址,所以转发数据报的时候需要根据硬件地址转发
- 4中典型情况
- 主机->本网络另一个主机:ARP寻找目的主机的硬件地址
- 主机->另一个网络的主机:ARP寻找本地网络的一个路由器硬件地址,剩下交给路由器处理
- 路由器->本网络一个主机:ARP寻找目的主机的硬件地址
- 路由器->另一网络的主机:ARP寻找本网络上一个路由器的硬件地址
-
ICMP协议
为了提高IP数据报交付成功的机会,网络层使用网际控制报文协议允许主机或路由器报告差错情况和提供有关异常情况的报告
- ICMP报文格式
- 种类
- ICMP差错报告报文:重点不可达、源点抑制、超时、参数问题、改变路由
- ICMP询问报文:会送请求和回答报文、时间戳请求和回答报文
-
路由选择协议
内部网关协议IGP
一个自治系统内使用的路由选择协议
- RIP:基于距离向量,也称跳数,最大为15;简单,开销小
-
外部网关协议BGP
一个自治系统将数据传到另一自治系统所使用的协议,力求能够到达目的网络且比较好的路由
每一个自治系统的BGP发言人的数目很少,使得自治系统之间的路由选择不至于过分复杂
路由器
作用
具有多个输入端口和多个输出端口,任务是转发分组,根据目的网络从某个合适的输出端口转发给下一跳路由器
结构
转发是路由器根据转发表选择合适的端口
- 路由选择是按照分布式算法,得知网络拓扑的变化情况,动态的改变所选择的路由
- 路由器输入或输出队列产生溢出是造成分组丢失的重要原因
运输层
概述
- 两个主机间的通信就是应用程序间的通信,也称
端到端的通信
- 不同于网络层提供主机间的逻辑通信,运输层提供应用程序间的逻辑通信
-
UDP
特点
只在IP数据报服务上加了端口和差错检测功能
- 提供不可靠交付,但也可能是优点,如在网络通信方面
- 无连接,面向报文,没有拥塞控制,适合多媒体通信
- 一对一、一对多、多对一、多对多
- 首部开销小,对应用程序交付下来的报文,只添加首部就交给网络层了,不拆分不合并
-
UDP报文格式
-
基于端口的分用
TCP
特点
面向连接,每条TCP连接只能由两个端口,因此TCP连接只能是点对点(一对一)的
- 提供可靠交付,提供全双工通信,面向字节流
- 根据接收方给出的滑动窗口大小决定一个报文应该含多少个字节
- 积累了足够的字节后才发出报文段
- TCP连接的端点也被称为套接字或插口,即 TCP 连接 ::={socket1,socket2}={(IP1:port1),(IP2:port2)}
通信过程
- 接收到应用程序的字节后,将字节写入TCP发送缓存中
- 等待积累足够的字节后,加上TCP报文段,开始发送
- 接收方接收到TCP报文段后去掉首部,将字节存入TCP接收缓存中
- 接收方给发送方发送响应,告诉它下一次应发送多少报文段
- 接收方处理TCP接收缓存中的字节流,交付给应用层
TCP报文段格式
- 源端口、目的端口:各占2字节,是运输层与应用层的服务接口,运输层的复用和奋勇功能都要通过端口才能实现。
- 序号字段:TCP连接中传送的数据流中的每一个字节都边上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
- 确认号字段:4字节,是期望收到对方下一个报文段的数据的第一个字节的序号。
- 数据偏移:4位,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。
- 保留字段:6位,今后使用
- 紧急URG:为1时表明禁止指针字段有效,告诉系统该报文段中由紧急数据(优先级较高)
- 确认ACK:为1时确认号字段才有效
- 推送PSH:TCP收到PSH为1的报文段,就应尽快交付接收应用进程,而不等待缓存填满
- 复位RST:为1表明TCP连接中出现严重差错,必须释放连接重新建立连接
- 同步SYN:为1表示这是一个连接请求或连接接收报文
- 终止FIN:用来释放一个连接,为1表明发送端数据已发送完毕,要求释放连接
- 窗口字段:2字节,让对方设置发送窗口依据
- 检验和:包括首部和数据两部分的检测,计算检验和时要在TCP报文段的前面加上12字节的伪首部
- 紧急指针字段:指出本报文段中紧急数据共有多少字节(紧急数据放在本报文段数据的最前面)
- 选项字段:最大报文段长度,告诉对方TCP我的缓存所能接收的报文段的
数据字段
的最大长度时MSS个字节三次握手建立连接
过程
- 第一次握手,客户端发送SYN包,发送完进入SYN-SENT状态
- 第二次握手,服务器回应ACK包,SYN位为1,随后进入LISTEN状态
- 第三次握手,客户端对服务器发送ACK包,进入ESTABLISHED状态
- 服务器收到ACK包后也进入ESTABLISHED状态
- 双方开始通信
总结
- 每次握手过程都是确认自己的发送或接收能力正常
-
重传机制
超时重传
TCP协议保证数据可靠性的一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
- 当一个报文丢失时,会等待一定的超时周期,才重传分组,增加了端到端的时延。
当一个报文丢失时,在其等待超时的过程中,可能会出现这种情况:其后的报文段已经被接收端接收但却迟迟得不到确认,发送端会认为也丢失了,从而引起不必要的重传,既浪费资源也浪费时间。
快速重传
可以使用快速重传,来解决超时重发的时间等待问题。它不以时间驱动,而是以数据驱动。它是基于接收端的反馈信息来引发重传的
- 第一份 Seq=1 先送到了,于是就 Ack回2;
- 第二份 Seq=2 也送到了,于是ACK回3;
- 第三份 Seq=3 由于网络等某些原因,没送到;
- 第四份 Seq=4 送到了,但是由于Seq=3没收到。因此ACK还是回3;
- 后面的 Seq=5,6的也送到了,ACK还是回复3,因为Seq=3没有收到。
- 发送方连着收到三个重复冗余ACK=3的确认(其实是4个哈,但是因为前面的一个是正常的ACK,后面三个才是重复冗余的),于是知道哪个报文段在传输过程中丢失了;发送方在定时器过期之前,重传该报文段。
- 最后,接收方收到了 Seq=3,此时因为 Seq=4,5,6都收到了,于是它回ACK=7。
问题:ACK只向告知发送方,最大的有序报文段。到底是哪个报文丢失了呢?并不确定!那到底该重传多少个包呢?是重传 Seq=3 ?还是重传 Seq=3、Seq=4、Seq=5、Seq=6 呢?因为发送端并不清楚这三个连续的 ACK=3 是谁传回来的
带选择确认的重传
在快速重传的基础上,接收方返回最近收到报文段的序列号范围,这样发送方就知道接收方哪些数据包是没收到的。这样就很清楚应该重传哪些数据包啦
滑动窗口
- TCP 发送一个数据,如果需要收到确认应答,才会发送下一个数据。这样的话就会有个缺点:效率会比较低。
- 为了解决这个问题,TCP引入了窗口,它是操作系统开辟的一个缓存空间。窗口大小值表示无需等待确认应答,而可以继续发送数据的最大值。
- 发送方的接收窗口包含已发送未收到确认和允许发送但尚未发送的数据
-
流量控制
发送方发送速率太快,接收方可能来不及接收,造成数据的丢失。因此通过流量控制让发送方的速率既要让接收方来得及接收,也不要使网络发生拥塞。
- 假如当前发送方给接收方发送了200个字节,那么,发送方的SND.NXT会右移200个字节,也就是说当前的可用窗口减少了200 个字节。
- 接受方收到后,放到缓冲队列里面,REV.WND =400-200=200字节,所以win=200字节返回给发送方。接收方会在 ACK 的报文首部带上缩小后的滑动窗口200字节
- 发送方又发送200字节过来,200字节到达,继续放到缓冲队列。不过这时候,由于大量负载的原因,接受方处理不了这么多字节,只能处理100字节,剩余的100字节继续放到缓冲队列。这时候,REV.WND = 400-200-100=100字节,即win=100返回发送方。
- 发送方继续干活,发送100字节过来,这时候,接受窗口win变为0。
- 发送方停止发送,开启一个定时任务,每隔一段时间,就发送试探报文,询问接受方,直到win大于0,才继续开始发送。
拥塞控制
- 某段时间,对网络中某资源的需求超过了该资源所能提供的可用部分,则性能变坏,产生拥塞
-
慢开始和拥塞避免
刚开始发送报文时先设置拥塞窗口cwnd=1,即最大报文段MSS的数值,每收到一个新的报文段确认后,拥塞窗口加1(呈2的指数增长),即增大MSS,直至拥塞窗口到达一个比较合理的大小,分组注入网络的速率到达合理的大小。
- 满开始门限状态变量ssthresh,当cwnd
ssthresh,停止使用满开始算法而改用拥塞避免算法 - 拥塞避免算法:每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍
- 当网络出现拥塞,就把慢开始门限ssthresh设置为出现拥塞时的发送方窗口之的一半,然后把cwnd重新设置为1,执行慢开始算法,减少分组数,让路由器有足够的时间把队列中积压的分组处理完毕。
快重传和快恢复
- 接收方每接收到一个时许的报文段就立即发出重复确认,让发送方尽早知道报文段丢失
- 发送方只要一连收到三个重复确认就重传对方尚未收到的报文段
- 快重传并不是取消重传计时器,而是在某些情况下能更早的重传丢失的报文段
- 当发送方收到连续三个重复的确认时,就执行乘法减小算法,把慢开始门限ssthresh减半,单步执行慢开始算法,即cwnd不设置为1,而是设置为ssthresh减半的数值,然后执行拥塞避免算法,使拥塞窗口缓慢地线程增大