绪论概念
计算机网络:
是一个将分散的、具有独立功能的计算机系统,通过通信设备与路线连接起来,由功能完善的软件实现资源共享和信息传递的系统。
是一个互连(互联互通)的、自治(无主从关系)的计算机集合
分类
- 按分布:广域网(交换技术)、城域网、局域网(广播技术)、个人区域网(WAN、MAN、WAN、PAN)
- 按使用者:公用网、专用网(军队、政府、银行等拥有相应的角色和权限才可使用)
- 按交换技术:电路交换、报文交换、分组交换
- 按拓扑结构:总线型、星型、环形、网状形(常用于广域网)
按传输技术:广播式网路(共享公共通信信道)、点对点网络(使用分组存储转发和路由选择的机制)
MSS
**MSS = MTU - TCP首部 - IP首部**
,既TCP报文的数据长度
TCP报文的长度不能无限大,依然要受制于MTU, TCP的单个数据报的大消息长度称为MSS
TCP在建立连接时,首先会和对方协商MSS的大小。理想的情况下,MSS的值正好是在IP不会被分片处理的大长度(这个长度仍然是受制于数据链路层的·MTU)使用TCP的四个协议
分层
优点
各层之间是独立的,某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供的服务。
- 灵活性好。当任何一层发生变化时(例如由于技术的变化),只要层间接口关系保持不变,则在这层以上或以下各层均不受影响。此外,对某一层提供的服务还可进行修改。
- 结构上可分割开。各层都可以采用最合适的技术来实现。
- 易于实现和维护。这种结构使得实现和调试一个庞大而又复杂的系统变得易于处理,因为整个的系统己被分解为若干个相对独立的子系统。
能促进标准化工作。因为每一层的功能及其所提供的服务都已有了精确的说明。
功能
(可包含一种或多种):
差错控制:使相应层次对等方的通信更加可靠
- 流量控制:发送端的发送速率必须使接收端来得及接收,不要太快。
- 分段和重装:发送端将要发送的数据块划分为更小的单位,在接收端将其还原。
- 复用和分用:发送端几个高层会话复用一条低层的连接,在接收端再进行分用。
连接建立和释放:交换数据前先建立一条逻辑连接,数据传送结束后释放连接
拓扑结构
网络体系结构
七层各层功能
应用层:所有能和用户交互产生网络流量的程序;
用户与网络的界面;
典型服务:文件传输FTP、电子邮件STMP、万维网HTTP
- 表示层:用于处理在两个通信系统中交换信息(指数据传递)的表示方式(语法和语义)
功能:
- 数据格式变换
- 数据进行加密解密
- 数据的压缩和恢复
- 会话层:向表示层实体/用户进程提供建立连接并在连接上有序地传输数据;这叫会话,也叫建立同步(SYN);
运用协议:ADSP、ASP
功能:
- 建立管理终止会话
- 使用**校验点**可以使会话在通信失效地时候从校验点/同步点继续**恢复通信**,实现数据同步,适用于传输大文件
- 传输层:负责主机中两个进程的通信,即端到端通信;
传输单位使报文或用户数据报功能:(可差流用)
- 可靠传输、不可靠传输
- 差错控制
- 流量控制:控制发送方发送数据的速度
- 复用分用:多个应用层进程可同时使用下层传输层的服务(复用);(分用)运输层把收到的信息分别交付给上层应用层中相应的进程
- 网络层:把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务;传输单位是数据报
功能:
- 路由选择:选择最佳路径
- 流量控制:协调发送端的发送速度和接收端的关系(限制发送端的速度)
- 差错控制:检错+纠错
- 拥塞控制:(主要是**全局的速度**)若所有节点都来不及分组而要丢弃大量分组的话,网络就处于拥塞状态,因此需要采用一系列措施来缓解这种拥塞
- 数据链路层:把网络层上传下来的数据包组装成帧
功能:
- 封装成帧,定义帧的开始和结束位置
- 差错控制,帧错(丢弃or改正--可靠传输协议)+位错
- 流量控制,关于发送方和接收方的接收发送速率的协调
- 访问(接入)控制,控制对信道的访问
- 物理层:主要任务是在屋里媒体上实现比特流的su透明传输(无论所传的数据是什么样的比特组合,都应该在链路上传送),传输单位是比特
功能:
- 定义接口特性
- 定义传输模式(单工、双工、半双工)
- 定义传输速率
- 比特同步
- 比特编码
网络的性能指标
速率
往往指的是额定速率或标称速率,而并非网络实际上运行的速率
- 传输速率(时延)
-
带宽
表示网络中某通道传送数据的能力,因此网络带宽表示 在单位时间内网络中的某信道所能通过的”最高数据率”
吞吐量
时延
时延(delay latency)是指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。
- 发送时延(传输时延) : 发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。 因此发送时延也叫做传输时延
发送时延 = 数据帧长度/发送速率
- 传播时延 : 传播时延是电磁波在信道中传播一定的距离需要花费的时间。
传播时延 = 信道长度 / 电磁波在信道上的传输速率
电磁波在自由空间的传播速率是光速,即 3.0 X 10^5 km/s。 - 处理时延 :主机或路由器在收到分组时要花费一定的时间进行处理
- 排队时延 : 分组在经过网络传输时,要经过许多路由器,进入路由器后要先在输入队列中排队等待处理。在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。
排队时延的长短往往取决于网络当时的通信量。当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排队时延为无穷大。发送时延 & 传播时延
发送时延发生在机器内部的发送器中,与传输信道的长度(或信号传送的距离)没有任何关系。
但传播时延则发生在机器外 部的传输信道媒体上,而与信号的发送速率无关。信号传送的距离越远,传播时延就越大。**总时延** = 发送时延+传播时延+处理时延+排队时延
对于高速网络链路,我们提高的仅仅是数据的发送速率而不是比特在链路上的传播速率。
- 发送时延(传输时延) : 发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。 因此发送时延也叫做传输时延
时延带宽积
往返时间
利用率
- 信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。
- 网络利用率则是全网络的信道利用率的加权平均值
单位换算
1Byte(字节) = 8bit(位)
1KB = 1024Byte(字节) = 2^10b (大写的k,小写的k:1k = 1000)
1MB = 1024KB = 2^20b
1GB = 1024MB = 2^30b
1TB = 1024GB = 2^40b
物理层
信道复用技术
- FDM:频分复用
- TDM:时分复用
- WDM:波分复用
-
传输介质
传输介质不是物理层,是第零层
在传输媒体中传输的是信号,但传输媒体并不知道所传输的信号代表什么意思。但物理层规定了电气特性,因此能够识别所传送的比特流。数据通信
数据:传送信息的实体,通常是有意义的符号序列
信号:数据的电气/电磁的表现,是数据再传输过程中的存在形式
码元:是一个固定时长的信号波形(数字脉冲),代表不同离散数值的基本波形,是数字通信中数字信号的计量单位;这个市场内的信号成为k进制码元。码元传输速率
单位时间内数字通信系统所传输的码元个数(也可称为脉冲个数or信号变化次数),单位Baud;与进制数无关
信息传输速率
单位时间内数字通信系统所传输的二进制码元个数(比特数)
若一个码元携带n bit信息量,则M Baud的码元传输速率所对应的信息传输速率为M × n bit/s
香农定理
在带宽受限且有噪声的信道中,为了不产生误差,信息的数据传输率有上限值。
信道的极限数据传输速率 C = W log2(1+S/N) (b/s)
其中:C是信道支持的最大速度或者叫信道容量;W是信道的带宽;S是平均信号功率;N是平均噪声功率;S/N即信噪比。数据链路层
在物理层上构建的是物理链路,在数据链路层上构建的是逻辑链路或者数据链路。
逻辑链路则是通信双方在需要进行数据通信时,在数据链路层设备和相应的通信规程作用下建立的逻辑链路,可以是永远存在的(如局域网中的以太网链路),也可以不是永久存在的(如广域网中的链路),是否永久存在要视具体的数据链路层服务类型而定。
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据**可靠地传输到相邻节点的目标机网络层。
其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错**的数据链路,使之对网络层表现为一条无差错的链路。三个基本问题
封装成帧
- 帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止
- 透明传输
- 字节填充:7E 改 7D,5E; 7D 改 7D,5D(只要是D就全D); <20 则在字符前加入7D;
零比特填充:在发送端,只要发现5个连续的1,则立即填充一个0
- 字节填充:7E 改 7D,5E; 7D 改 7D,5D(只要是D就全D); <20 则在字符前加入7D;
-
数据链路工作过程
流量控制
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的
数据链路层流量控制手段:接收方收不下就不回复确认。
-
停止等待(单帧传输协议)
多帧传输协议
后退N帧协议GBN & 选择重发SR协议
前者是只要有一帧发送失败,则当前发送的全部帧都重新发送,这样就会导致重发很多帧,流量控制不佳。
- 后者是当前发送的帧中有差错,在下次发送的时候只是重新发送错误的帧就行了
SR 选择重发
SR接收方将确认一个正确接收的帧而不管其是否按序。
失序的帧将被缓存,并返回给发送方一个该帧的确认帧【收谁确认谁】,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
GBN 后退N帧
- 累计确认
- 只按序接收帧
- 确认序列号最大的、按序到达的帧
- 发送窗口最大2^n - 1,接收窗口大小为1
滑动窗口协议
总结一下以太网交换机和Mac地址表的初始化
- 交换机刚启动,Mac表无内容
2. 收到从PCA来的数据包之后将PCA的MAC地址和收到此帧的端口写入表中,交换机把PCA的帧从所有其他端口发送出去(除了接收到帧的端口
3. PCB、PCC、PCD发出数据帧,交换机把接收到的帧中的源地址与相应的端口关联起来
4. PCA发出目的到PCD的单播数据帧,交换机根据帧中的目的地址,从相应的端口发送出去,交换机不在其他端口上转发此单播数据帧
5. 交换机会把广播、组播和未知单播帧从所有其他端口发送出去(除了接收到帧的端口信道利用率
介质访问
CSMA/CD
载波监听多点接入/碰撞检测CSMA/CD (carrier sense multiple access with collision detection)
- CS:载波侦听/监听,每一个站在发送数据之前以及发送数据时都要检测一下总线上是否有其他计算机在发送数据
- MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上。(总线型网络)
- CD:碰撞检测(冲突检测),“边发送边监听”,适配器边发送数据边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。(半双工网络)
截断二进制指数规避算法
1.确定基本退避(推迟)时间为争用期2r。
⒉定义参数k,它等于重传次数,但k不超过10,即k=min[重传次数,10]。当重传次数不超过10时,k等于重传次数;当重传次数大于10时,k就不再增大而一直等于10。
3.从离散的整数集合[0,1,,2-1]中随机取出一个数r,重传所需要退避的时间就是r倍的基本退避时间,即2r t 。
4.当重传达*16次仍不能成功时,说明网络太拥挤,认为此帧永远无法正确发出,抛弃此帧并向高层报告出错。
链路层设备
设备 & 冲突域 & 广播域
集线器(HUB)所有端口都在同一个广播域、冲突域内,所以HUB不能分割冲突域和广播域。 交换机(Switch)所有端口都在同一个广播域内,而每一个端口就是一个冲突域,所以交换机能分割冲突域,但分割不了广播域。虚拟局域网(Vlan)技术可以隔离广播域。 路由器(Router)的每个端口属于不同的广播域、冲突域。
也可以这样理解:
- HUB属于第一层设备所以分隔不了冲突域;
- 交换机和网桥属于第二层设备所以能分割冲突域;
- 路由器属于第三层设备,所以既能分割冲突域又能分割广播域。
广播域
冲突域
在同一个冲突域中的每一个节点都能收到所有被发送的帧。
简单的说就是同一时间内只能有一台设备发送信息的范围。
帧格式
MTU 分片
MAC帧中的数据长度规定为46-1500字节,ARP(地址解析协议)数据包的长度不够46字节要在后面补填充位,如果大于1500字节,必须要求网络层进行分片
最大值1500称为以太网的最大传输单元(MTU)不同的网络类型有不同的MTU
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU,则需要对数据包进行分片。
以太网中MTU为1518字节 以太网最大数据域1500字节
将较大的IP包分成多个小包, 并给每个小包打上标签,每个小包IP协议头的 16位标识(id) 都是相同的,这样在重组的时候就知道这个小包来自于哪个报文。
标志 (Flag):占3 位,但目前只有2位有意义。
- 标志字段中的最低位记为 MF (More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为 DF(Don’t Fragment),意思是“不能分片”。只有当 DF=0时才允许分片。
MTU + UDP
只要UDP报文中携带的数据超过过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报
这些IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加。MTU + TCP
TCP在建立连接时,首先会和对方协商MSS的大小。理想的情况下,MSS的值正好是在IP不会被分片处理的大长度(这个长度仍然是受制于数据链路层的·MTU)
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。然后双方得知对方的MSS值之后选择较小的作为最终的MSS。MSS的值就是在TCP首部的40字节变长选项中(kind=2)。**MSS = MTU - TCP首部 - IP首部**
,既TCP报文的数据长度高速以太网
PPP协议
网络层
ARP协议
ARP原理
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟)如果20分钟内没有再次使用某个表项则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
格式
硬件类型指链路层网络类型,1表示以太网
- 协议类型指要转换的地址类型,0x0800为IP地址
- 硬件地址长度对于以太网地址为6字节; 协议地址长度对于IP地址为4字节
-
网络层的两种服务
数据包服务
数据报方式为网络层提供无连接服务
无连接服务:不事先为分组的传输确定传输路径,每个分组独立确定传输路径,不同分组传输路径可能不同。
- 每个分组携带源和目的地址
- 路由器根据分组的目的地址转发分组:基于路由协议/算法构建转发表;检索转发表;每个分组独立选路
虚电路服务
虚电路方式为网络层提供连接服务。
虚电路将数据报方式和电路交换方式结合,以发挥两者优点。
虚电路:一条源主机到目的主机类似于电路的路径(逻辑连接),路径上所有结点都要维持这条虚电路的建立都维持一张虚电路表,每一项记录了一个打开的虚电路的信息。
路由的选择与分组转发
● 路由选择:确定数据报走那一条路径,即路由器根据不同的算法生成动态的路由表。
● 分组转发:路由器根据转发表将用户的IP数据从合适的端口报转发出去。路由的分组转发
(1) 从收到的分组的首部提取目的 IP 地址 D。
(2) 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行 (3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
(4) 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
(6) 报告转发分组出错。三种交换
- 电路交换:整个报文的比特流连续地从源点直达终点,好像在一个管道中传送。
- 报文交换:整个报文先传送到相邻节点,全部存储下来后查找转发表,转发到下一个结点。
- 分组交换:单个分组(这只是报文的一部分)传送到相邻结点,存储下来后查找转发表,转发到下一结点。
电路交换:传送大量数据,且传送时间远远大于连接建立的时间,则电路交换传输速率快。 报文交换和电路交换不用预先分配传输带宽,在传送突发数据时可提高整个网络的信道利用率。 由于一个分组的长度往往远小于整个报文的长度,因此分组交换比报文交换的时延小,同时也具有更好的灵活性。
路由选择协议
地址分类
特殊IP
私有IP
私有IP地址范围:
A: 10.0.0.0~10.255.255.255 即10.0.0.0/8
B:172.16.0.0~172.31.255.255即172.16.0.0/12
C:192.168.0.0~192.168.255.255 即192.168.0.0/16
主机地址就是正常使用的IP地址,
网络地址是主机号全0的地址,
广播地址是主机号全1的地址。
IP地址由网络号和主机号组成,通过掩码来区分。
socket
telnet 服务器监听端口 23,ftp 服务器监听端口 21 数据端口20,Web 或 http 服务器监听端口 80,https 443
TCP和UDP程序在同一机器上可以使用相同的端口(许多协议已经这样做,例如DNS在udp / 53 和 tcp / 53上工作。)
传输层
网络层解决的是由「点-点」链路组成的传输路径的路由选择与分组交付问题
传输层在源主机的应用进程与目的主机的应用进程之间建立「端-端」连接
设计传输层的目的是弥补通信子网服务的不足,提高传输服务的可靠性和保证服务质量(QOS)
握手 挥手
如果只使用两次握手,那么服务器就没有办法知道自己的序号是否 已被确认。同时这样也是为了防止失效的请求报文段被服务器接收,而出现错误的情况。
TCP 使用四次挥手的原因是因为 TCP 的连接是全双工的,所以需要双方分别释放到对方的连接,单独一方的连接释放,只代表不能再向对方发送数据,连接处于的是半释放的状态。
最后一次挥手中,客户端会等待一段时间再关闭的原因,是为了防止发送给服务器的确认报文段丢失或者出错,从而导致服务器端不能正常关闭。
问题1:为什么最后要等待2MSL? 保证🅰️ 发送的最后一个报文能够到达🅱️,如果这个报文丢失,🅱️会在2MSL内重传释放连接的报文,🅰️ 也就能够重新发送报文, 防止已失效的连接请求报文段出现在本报文段中,当经过2MSL之后,本次连接的所有报文会从网络中消失,这样进入到下一个连接的时候就不会出现失效报文请求了
慢开始 拥塞避免 快速重传 快速恢复
应用层
HTTP/1 :
无状态、明文传输、不安全(不加密、不验证通信身份、不验证明文完整新)
请求-应答,非持久连接(短连接)
HTTP/1.1 :
新增了Cookie,管理状态,改进了HTTP/1
持久连接,默认长连接(多个 http 请求复用同一个 TCP 连接,避免使用非持久连接时每次需要建立连接的时延)
引入了range头域,允许只请求资源的某一部分(206)
引入了更多缓存控制策略( Etag、If-Unmodified-Since、If-Match、If-None-Match)
新增了host字段(就可以将请求发往到同一台服务器上的不同网站)
新增了请求方法(put、head、option)
缺陷:
队头阻塞
HTTP2:
二进制协议
多路复用,(客户端和服务器都可以同时发送多个请求或回应,而且不用按照顺序一一发送,这样就避免了”队头堵塞”)
数据流,(HTTP/2 将每个请求或回应的所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号)
头部压缩,(头信息使用 gzip 或 compress 压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号)
服务器推送,(使用服务器推送提前给客户端推送必要的资源,需要注意的是主动推送的是静态资源)
客户端还能指定数据流的优先级,优先级高的请求,服务器先响应
HTTP3
HTTP/3基于UDP协议实现了类似于TCP的多路复用数据流、传输可靠性等功能,这套功能被称为QUIC协议。
流量控制、传输可靠性功能(QUIC有一套机制可以保证传输的可靠性,当某个流发生丢包时,就阻塞这个流,其他的流不会受到影响)
集成TLS加密功能
多路复用(同一物理连接上可以有多个独立的逻辑数据流,实现了数据流的单独传输,解决了TCP的队头阻塞问题)
快速握手
HTTPS
- 使用混合加密(对称加密和非对称加密相结合)保证信息的机密性,解决了窃听的风险
- 使用摘要算法来保证信息的完整性
- 使用数字证书保证服务器的身份是可信的
HTTP的端口是80,HTTPS的端口是443
DNS
浏览器访问一个界面的过程
DNS只能做到域名到IP的映射,反之不可,因此不应该为“互相映射”
DNS大多是运行在UDP协议上
DNS缓存的默认值在windows中式一天
邮件协议
SMTP是发送邮件, POP3/IMAP是接受邮件