计算机网络体系结构
计算机网络概述
计算机网络概念
- 计算机网络:是一个分散的、并具有独立功能的 计算机系统,通过通信设备(路由器、交换机、无线网卡…)与线路(端系统与通信设备连接的介质)连接起来,由功能完善的
软件实现资源共享和信息传递的系统 - 一句话来说,计算机网络是互连的、自治的计算机集合。
- 互连:互联互通,通过通信链路(卫星,电波…)
- 自治:相互独立,端系统之间可以通信,但不能控制对方,没主从关系
计算机网络的功能
- 数据通信:文档传输
- 资源共享 :凡是入网用户均能享受网络中各个计算机系统的全部或部分软件、硬件和数据资源,为最本质的功能。
- 分布式处理:通过算法将大型的综合性问题交给不同的计算机同时进行处理。用户可以根据需要合理选择网络资源,就近快速地进行处理。
- 提高可靠性:一旦某台计算机出现故障,它的任务就可由其他的计算机代为完成,这样可以避免在单机情况下,一台计算机发生故障引起整个系统瘫痪的现象,从而提高系统的可靠性
- 负载均衡:而当网络中的某台计算机负担过重时,网络又可以将新的任务交给较空闲的计算机完成,均衡负载,从而提高了每台计算机的可用性
计算机网络的组成
组成部分
工作方式
- 工作方式
- 边缘部分:用户直接使用
- 核心部分:为边缘部分服务
- 核心部分为边缘部分服务,支撑边缘部分实现各种功能
功能组成
- 主要功能分 数据通信 和 资源共享
- 通信子网:实现数据通信
- 资源子网:实现数据处理/资源共享
- 通信子网:包含网络层,数据链路层,物理层
- 资源子网:包含应用层,表示层,会话层
计算机网络的分类
- 按分布范围分:广域网 城域网 局域网 个人区域网
- 按使用者分:公用网 专用网
- 按交换技术分:电路交换 报文交换 分组交换
- 按拓扑结构分:线型 星型 环形 网状型 混合型
-
性能指标
速率
速率:数据率 or 数据传输率 or 比特率
- 表示连接在计算机网络上的主机 在 数字信道上传送数据位数的速率
带宽
带宽是用于表示网络的通信线路栓送数据的能力,是指单位时间内能向链路发送多少数据,而不是单位时间内能实际传输多少数据,因为能传输多少数据有很多其他因素限制,带宽是理想条件下的最高速率。
吞吐量
吞吐量:表示单位时间内通过某个网络(或信道,接口)的数据量,是实际速率,其单位是 b/s,kb/s,Mb/s
- 受网络带宽或网络的额定速率的限制。
时延
- 时延:指数据从网络的一端传送导另一端所需要的时间,也叫延迟或迟延,单位是s。
- 时延包括:发送时延,传播时延,排队时延,处理时延
- 发送时延
- 是主机或路由器发送数据帧所需要的时间
- 也是指从发送分组的第一个比特算起,到该分组的最后一个比特发送完毕所需要的时间
- 发送时延(传输时延)发生在机器的内部的发送器中
- 等于数据长度/信道带宽
- 传播时延:
- 取决于电磁波传播速度和链路长度
- 传播时延则发生在机器外部的传输信道媒体上
- 等于信道长度/电磁波在信道上的传播速率(这个速率主要由介质影响)
- 排队时延:
- 是路由器或者交换机处理数据包排队所消耗的时间
- 一个特定分组的排队时延取决于先期到达的、正在排队等待向链路传输分组的数量
- 处理时延:
- 主机或路由器在收到分组时要花费一定的时间进行处理,例如分析分组的首部、从分组中提取数据部分、进行差错或查找适当的路由等等
- 发送时延
- 总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
- 《计算机网络》一书中将传输时延与传播时延的关系类比成车队经由收费站的例子;十分生动形象
时延宽带积
- 时延带宽积 = 传播时延 × 带宽bit s b/s
- 如何生动形象的描述时延带宽积呢?我们把链路的长定义为传播时延;把横截面的宽定义为带宽一个比特经过一个传播时延正好通过一个链路当第一个比特在左侧出现 然后 碰到右侧时停止,此时链路中的比特数量就是时延带宽积了
往返时延 RTT
- 从发送方发送数据完开始,到发送方收到接收方的确认,总共经历的时延
- RTT 越大,在收到确认之前,可以发送的数据越多
- RTT 包括
- 往返传播时延 = 传播时延 × 2
- 末端处理时间(指的是接收方对数据进行处理所花费的时间)
-
利用率
利用率
- 信道利用率:有数据通过时间/(有+无)数据通过时间
- 网络利用率:信道利用率的加权平均值
利用率并不是越高越好的,当利用率升高的时候,时延也会急剧增大
计算机体系结构与参考模型
计算机网络的分层结构
首先我们考虑一下为什么要分层?
我们知道,一端要发送文件到另一端前要完成的工作有:
- 发起通信的计算机必须将数据通信的通路进行激活
- 告知网络如何识别目的主机
- 发起通信的计算机要查明目的主机是否开机,并且与网络连接正常
- 发起通信的计算机要弄清楚,对方计算机中文件管理程序是否已经做好了准备工作
- 确保差错和意外可以解决
- ……….等等等等
我们这些问题都需要解决,显然不可能在一层就解决,那对于我们程序员来说,最喜欢的事情就是分层处理(大问题 → 小问题)
分层基本原则
- 各层之间相互独立,每层 只实现一种相对独立的功能
- 各层之间界面自然清晰,易于理解,相互交流尽可能少
- 结构上可分隔开,每层都采用最合适的技术来实现
- 保持下层对上层的独立性,上层单向使用下层提供的服务
- 整个分层结构应该能促进标准化工作
报文
- 在分层网络结构中,在传输系统的每一层都将建立协议数据单元(PDU)
- PDU 由两部分组成:SDU 服务数据单元 + PCI 协议控制信息
PDU 协议数据单元:对等层次之间传送的数据单位
实体
- 在第 n 层的活动元素称为 n 层实体,同一层实体叫做对等实体;
- 当研究开放系统中的信息交换时,往往使用实体(entity)这一较为抽象的名词。
- 协议
- 协议为进行网络中的对等实体数据交换而建立的规则、标准或约定称为网络协议;
- 协议的语法方面规则定义了所交换的信息的格式。
- 协议是水平的,即协议是控制对等实体之间通信的规则。
- 协议的语义方面规则定义了发送者或接收者所要完成的操作,例如,在何种条件下数据必须重传或丢弃。
- 在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。
- 协议的实现保证了能够向上一层提供服务。使用本层服务的实体只能看见服务而无法看见下面的协议。下面的协议对上面的实体是透明的。
- 协议由三部分组成:
- 语法:规定传输数据的格式
- 语义:规定所要完成的功能
- 同步:执行各种操作的条件、时序关系等等
- 接口
- 在同一系统中相邻两层的实体进行交互(即交换信息)的地方,通常称为服务访问点 SAP(Service Access Point)。
- 服务访问点 SAP 是一个抽象的概念,它实际上就是一个逻辑接口,有点像邮政信箱(可以把邮件放入信箱和从信箱中取走邮件),但这种层间接口和两个设备之间的硬件接口(并行的或串行的)并不一样。
- OSI 把层与层之间交换的数据的单位称为服务数据单元 SDU(Service Data Unit),它可以与 PDU 不一样,例如,可以是多个 SDU 合成为一个 PDU,也可以是一个 SDU 划分为几个 PDU。
- 服务
- 服务是垂直的,即服务是由下层向上层通过层间接口提供的。
- 并非在一个层内完成的全部功能都称为服务,只有那些能够被高一层实体“看得见”的功能才能称为服务。
- 上层使用下层所提供的服务必须通过与下层交换一些命令,这些命令在 OSI 中称为服务原语。
ISO/OSI 参考模型和 TCP/IP 模型
OSI 七层模型 | 功能 | 对应的网络协议 | TCP/IP 四层概念模型 |
---|---|---|---|
应用层 | 文件传输,文件管理,电子邮件的信息处理——apdu | HTTP、TFTP, FTP, NFS, WAIS、SMTP | 应用层 |
表示层 | 确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密,最小单位——ppdu | Telnet, Rlogin, SNMP, Gopher,JPEG,ASCII | 应用层 |
会话层 | 负责在网络中的两节点建立,维持和终止通信,在一层协议中,可以解决节点连接的协调和管理问题。包括通信连接的建立,保持会话过程通信连接的畅通,两节点之间的对话,决定通信是否被终端一斤通信终端是决定从何处重新发送,最小单位——spdu | SMTP, DNS,ADSP,ASP | 应用层 |
传输层 | 定义一些传输数据的协议和端口。传输协议同时进行流量控制,或是根据接收方接收数据的快慢程度,规定适当的发送速率,解决传输效率及能力的问题——tpdu | TCP, UDP | 传输层 |
网络层 | 控制子网的运行,如逻辑编址,分组传输,路由选择最小单位——分组(包)报文 | IP, IPX,ICMP,IGMP, ARP, RARP, AKP, UUCP,OSPF | 网络层 |
数据链路层 | 主要是对物理层传输的比特流包装,检测保证数据传输的可靠性,将物理层接收的数据进行 MAC(媒体访问控制)地址的封装和解封装,也可以简单的理解为物理寻址。交换机就处在这一层,最小的传输单位——帧 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP,STP。HDLC,SDLC,帧中继 | 数据链路层 |
物理层 | 定义物理设备的标准,主要对物理连接方式,电气特性,机械特性等制定统一标准,传输比特流,因此最小的传输单位——位(比特流) | IEEE 802.1A, IEEE 802.2 到 IEEE 802. | 数据链路层 |
OSI 参考模型
- 为解决计算机网络复杂大问题 → 分层结构
- 不同的公司使用不同的网络体系结构,因此异构网络是很难通信的
- 为了解决这个问题,国际标准化组织 ISO在 1984 提出开放系统互连(OSI)参考模型
- 虽然它被 TCP/IP 模型打败了,但是仍具有很高学习价值,下面就来学习下什么是 OSI 参考模型
ISO/OSI 参考模型通信过程
- 我们不难发现,上面四层:应用层 表示层 会话层 传输层是中间系统没有进行处理的,那么我们可将这部分视作是端到端的
- 而下面三层只知道应该去往下一个节点,因此是点到点的
那么每一层每一层之间其实又进行了什么处理呢?其实就是添加各种PCI,而只有每一层对等的知道怎么解那个协议;像是礼物的包装和拆包一样。
每层的功能
应用层
- 应用层是用户与网络的界面;
- 应用层定义的是应用程序用于请求网络服务的接口,而不是指应用程序本身。
- 应用层主要定义了应用程序能够从网络上请求使用哪种类型的服务,并且规定了在从应用程序接收消息或向应用程序发送消息时,数据所必须采用的格式。
典型的应用层服务以及对应的协议
用于处理在两个通信系统中交换信息的表示方式(语法和语义)
功能
向表示层实体/用户进程提供建立连接并在连接上有序的传输数据,这是会话,也是建立同步(SYN)会话之间彼此独立,不会互相影响
功能
负责主机中两个进程的通信,即端到端的通信,传输内容是报文段或是用户数据报;
- 我们这里提到 端到端 什么是端到端呢?OSI 七层模型中,上面四层是端到端通信,下面三层是点到点通信端到端通信,是一个网络连接,网络通信需要建立连接,只需要实现应用程序之间通信,而不需要知道底层是如何传输的A → B → C → D → E点到点通信,是发送端把传给他直接相连的设备,这台设备在合适的时候把数据传给与之相连的下一台设备,通过一台一台直接相连的设备,把数据传到接收端。A → B 、B → C、 C → D 、D → E
功能
- 可靠传输、不可靠传输
- 可靠传输:传输层使用 TCP 来提供通信数据的可靠传输。(确认机制)
- 不可靠传输:传输层中不可靠的传输方式使用的是 UDP 协议(不管确不确认,直接发)
- 差错控制:报文段数据丢失,需要进行纠正
- 流量控制:控制发送方的速度,不能一次传太多
- 复用分用- 复用:多个应用层进程可同时使用下面运输层的服务 - 分用:运输层把收到的信息分别交付给上面应用层中相应的进程 比如说一台手机上两个进程(应用)QQ和微信,QQ端口号是1 微信端口号是2; 这两个进程同时使用传输层传输数据 —— 复用 另一台手机接收了QQ和微信信息,并且根据其中端口号不同的不同用不同的应用程序接受信息 —— 分用 )
网络层
- 可靠传输、不可靠传输
主要任务是把分组(很小的无需分片的 ip 数据包就是分组)从源端传到目的端,为分组交换网上的不同主机提供通信服务;网络层传输单位是数据报
-
- 路由控制:左边的主机想和右边的主机通话,那么这个数据包一定会经过网络。中间灰色的圆圈是路由器,他们组成了一个网络,数据链路层只是把这个信息传递了“一跳”,也就是从介质的一端传递到另一端,在图里面比如说从路由器 1 传递到 2.但是网络层做的事情是,规划好所有跳的路线,比如说数据包要依次经过 1,2,3,6 才能从左边主机到达右边主机,这就是网络层一个非常重要的作用,也就是提供“路由 routing”。
- 流量控制:控制发送方发送数据的速度(与传输层功能好像有点重读?
- 差错控制:通信的节点之间约定一些规则,接收方根据规则校验分组有没有错,然后纠错,纠不了错就丢弃分组;保证传输层的数据是正确的
- 拥塞控制:就像城市里面哪里堵车了,其他人就知道不要再去了,网络层也一样。比如上图中 2,3 路由器出现了严重的拥塞,那么左边主机往右边发送包就会从 1236 变成 1456。拥塞控制对于网络的效率以及降低丢包率有着无可替代的作用。
数据链路层
主要任务是把网络层传下来的数据报组装成帧数据链路层/链路层的传输单位是帧
功能
主要任务是在物理媒体上实现比特流的透明传输(指不管所传数据是什么样的比特组合,都应当能够在链路上进行传输)物理层传输单位是比特
- 功能
- 定义接口特性
- 机械特性:说明接口所用的接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。
- 电气特性:指明在接口电缆的各条线上出现的电压的范围。
- 功能特性:指明某条线上出现的某一电平的电压表示何意。
- 规程特性:说明对于不同功能的各种可能事件的出现顺序。
- 定义传输模式:
- 单工:只能一个发一个收
- 半双工:两者都可以当发的,可以同时发
- 双工:两者都可以当发的,但同一时间只能一个人发
- 定义传输速率:十兆、百兆 这些传输速率由物理层进行定义
- 比特同步:发送方发一个 1 ,接收方接收一个 1
- 比特编码:什么电压 0 ,什么电压表示 1
TCP/IP 模型
既然 OSI 七层协议体系结构概念清楚,理论也完整,那我们为什么不用他呢?因为它太复杂且不适用,而 TCP/IP 体系结构不然,TCP/IP 其实是一个四层体系结构,它包含:应用层、传输层、网际层和网络接口层
从实质来说,TCP/IP 只包含上面三层,下面的网络接口层没什么协议啊之类的,没什么内容。因此我们往往结合两种模型优点,形成了一种五层协议的体系结构。
在网上看到一段话 用于解释 TCP/IP 模型,我觉得说的非常好:
来源:https://www.jianshu.com/p/90fa75863fce
JAVA
- 定义接口特性
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 要理解TCP/IP,我们依旧要先搞清楚它想干嘛?
一句话概括,就是用最少的资源,准确快速的把信息传送到对端去。
那么这里面就有很多问题要解决了:怎样充分利用资源?用资源怎么发信息?怎样找到对端?怎样做到准确?怎样快速?怎样保证对端完整收到信息?………
对于学计算机的我们,这个时候应该就能想到,这么多问题,不可能一次性解决,需要分解,分模块来解决,TCP/IP分层模型也是这么想的。
首先是怎样充分利用资源,用什么物质传又省钱又好用?这就是物理层要解决的问题了,这里展开来就是无线铜线光纤损耗等等的问题。很好理解。
然后知道介质了,怎样把信息传给设备?这就是数据链路层要解决的问题了。这里需要解决信息的封装问题,信息传送机制问题。所以这一层的所有协议设计都是围绕着怎么传信息展开。
理论上到这里就结束了,但随着入网设备越来越多,就需要被管理了,所以网络层就来解决网络管理的问题。IP层是整个网络分层里承上启下的核心,他主要解决两个问题,一个是编号,一个是找人。网络太大,人太多,认识不过来,所以要用ip地址给人编号。编完号找人,几十亿人一个个问也不可行,也是要讲方法的,所以这里就有了路由技术。网络层的关键是路由技术,路由技术解决怎样快速准确找到对端的问题。
找到对端后,怎样保证对端完整收到信息?这就是传输层要解决的问题了,这里就有传送速度的调节,传送信息的验证,传完信息的确认等等问题,对应的TCP和UDP也是两种不同的实现思路。
来到这里,关于网络的问题基本上就结束了,因为终端已经拿到了别人发过来的信息了,至于怎么处理信息,就是会话层,表示层,应用层的问题了。不同的应用程序有着不同的通信协议(Email——SMTP,Web——Http,文件传输——Ftp等),这些通信协议都工作在应用层。
可见,分层之间相互独立,却又是紧密合作,他们的出现不是无中生有,而是在问题的解决中,不断成熟并定形的。
| | —- | —- |
面向连接、无连接
下面我们介绍两种连接方式:面向连接 和 无连接
- 面向连接分为三个阶段
- 建立连接,在此阶段,发出一个建立连接的请求
- 只有建立成功之后,才能开始数据传输
- 当数据传输完毕之后,释放连接
- 无连接:没有上述阶段,直接进行数据传输
五层参考模型
应用层
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。我们把应用层交互的数据单元称为报文。
运输层
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。
运输层主要使用一下两种协议
- 传输控制协议-TCP:提供面向连接的,可靠的数据传输服务。
- 用户数据协议-UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。 | UDP | TCP | | | —- | —- | —- | | 是否连接 | 无连接 | 面向连接 | | 是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 | | 连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 | | 传输方式 | 面向报文 | 面向字节流 | | 首部开销 | 首部开销小,仅 8 字节 | 首部最小 20 字节,最大 60 字节 | | 场景 | 适用于实时应用(IP 电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
运行在TCP协议上的协议:
- HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
- HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
- FTP(File Transfer Protocol,文件传输协议),用于文件传输。
- POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
- SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
- TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
- SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
运行在UDP协议上的协议:
- BOOTP(Boot Protocol,启动协议),应用于无盘设备。
- NTP(Network Time Protocol,网络时间协议),用于网络同步。
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置 IP 地址。
运行在TCP和UDP协议上:
DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作。
网络层
网络层(network layer)负责为分组交换网上的不同主机提供通信服务。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。这里要注意:不要把运输层的“用户数据报 UDP ”和网络层的“ IP 数据报”弄混。另外,无论是哪一层的数据单元,都可笼统地用“分组”来表示。网络层的另一个任务就是选择合适的路由,使源主机运输层所传下来的分株,能通过网络层中的路由器找到目的主机。这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称.互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层或 IP 层。
数据链路层
数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。
物理层
在物理层上所传送的数据单位是比特。物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
物理层
物理层基本概念
物理层主要关注的点是在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体
- 物理层的主要任务:确定与传输媒体接口有关的一些特性 也就是 ==定义标准==
- 机械特性:定义物理连接的特性,规定物理连接时所采用的规格,接口形状,引线数目,引脚数量和排列情况
- 电气特性:规定传输二进制位时,线路上信号的电压范围、阻抗匹配、传输速率和距离限制等
- 功能特性:指明某条线上出现的某一电平表示何种意义,接口部件的信号线的用途==电平==:是指两功率或电压之 bai 比的对数,du 有时也可用来表示 zhi 两电流之比的对数。
- 规程特性/过程特性:定义各条物理线路的工作规程和时序关系
数据通信基础知识
典型数据通信模型
如上图所示,我们的 电脑称为信源,用于信号转换的”猫”(路由猫)称为调职解调器,信号传入的公用电话网称为广域网;
其中 信源 + 发送器 称为 ==源系统==;中间传输系统依旧是==传输系统==;接收器 + 信宿 称为==目的系统==
数据通信相关术语
我们知道,数据的目的是为了传送消息,那么为了传送消息 需要什么呢?
- 数据:传送信息的实体,通常是有意义的符号序列(汉字 转成的计算机可以理解的语言 010101….)
- 信号:数据的电气/电磁的表现,是数据在传输过程中的存在形式;
- 数字信号:代表消息的参数取值是离散的)
- 模拟信号:代表消息的参数取值的连续的)
- 信源:产生和发送数据的==源头==
- 信宿:接收数据的==终点==
- 信道:信号的传输媒介,一般用来表示向某个方向传送信息的介质,因此一条通信线路往往包含一条发送信道和一条接收信道
- ==单工通信==:只有一个方向的通信而没有反方向的交互,仅需要一条信道
- ==半双工通信==:通信的双方都可以发送或接收信息,但任何一方都不能同时发送和接收,需要两条信道
- ==全双工通信==:通信双方可以同时发送和接收信息,需要两条信道
两种数据传输方式
如果说通信方式是决定谁来做发送方,谁来做接收方的话,那么数据传输方式就是研究数据在信道上的传输方式
传输方式主要分两种:串行传输 和 并行传输
- 串行传输:使用 bai 一条数据线,将 du 数据一位一位地依次传输,每 zhi 一位数据占据一个固定的时间长度 dao。只需要少数几条线就可以在系统间交换信息;特点:速度慢,费用低,适合远距离传输
并行传输:并行传输指的是数据以成组的方式,在多条并行信道上同时进行传输,是在传输中有多个数据位同时在设备之间进行的传输。特点:速度快,费用高,适合近距离传输
码元、波特、速率、带宽
码元
码元:是指用一个固定时长的信号波形(数字脉冲),代表不同离散数值的基本波形,是数字通信中数字信号的计量单位,这个时长内的信号称为k 进制码元,而该时长称为码元宽度。码元的离散状态(就是可以有几种形态)有 M 个的时候,此时码元就成为M 进制码元
- 一个码元可以携带多个比特的信息量。譬如在二进制编码中,只有 2 种不同码元,0 状态和 1 状态
是不是感觉很抽象,我们结合图示来理解
下面是一个 4 进制码元,代表着有四种离散状态,以为着有四种高低不同的波形
四种高低不同波形可以用比特组合:00,01,10,11 来表示
下图中,一个波形 代表着的是 1 个码元,携带着 2 个比特的信息量
要注意:四进制码元 代表着 可以由 0、1 组成 4 种组合,每个组合是由 01 组成的;
因此 n 进制码元 携带着 log2n 个比特的信息量
速率
速率,也称为数据率,代表着数据的传输速率(不是传播速率,不是一个概念),代表着单位时间内传输的数据量。可以用==码元传输速率==和==信息传输速率==来表示
- ==码元传输速率==:别名码元速率、波形速率、调制速率、符号速率等- 表示单位时间内数字通信系统所传输的码元个数(也可以称为是脉冲个数或信号变化的次数) - 单位是波特(Baud) - 1波特表示数字通信系统每秒传输一个码元;此处的码元可以是多进制的; - 码元速率与进制数无关 - ==言简意赅:1s传输了多少个码元== 下图的码元传输速率就是5波特,表示1秒传送了5个码元 )
- ==信息传输速率==:别名信息速率、比特率
- 表示单位时间内数字通信系统传输的二进制码元个数(即比特数)
- 单位是比特/秒(b/s)
- ==言简意赅:1s 传输了多少个比特==
- 若一个码元携带n 比特的信息量,则M 波特的码元传输速率所对应的信息传输速率为==_M×n _bit/s==
带宽
表示在单位时间内从网络的某一点到另一点所能通过的最高数据率,常用来表示网络的通信线路能传输数据的能力;
-
编码&调制
基带信号与宽带信号
信道:信号的传输媒介,一般用来表示向某一个方向传送信息的介质;因此一条通信线路往往包含一条发送信道和一条接受信道
- 基带信号:将数字信号 1、0 直接用不同的电压表示,再送到数字信道上传输(==基带传输==);最大的特点就是:基带信号是来自信源的信号基带信号就是发出了直接表达了的要传输的信息的信号(无须二次加工)
- 宽带信号:将基带信号进行调制后行程的频分复用模拟信号,再传送到模拟信道上去传输(==宽带传输==);基带信号经过载波调制后,把信号的频率范围搬移到较高的频段上以便在信道种传输(二次加工)
- 传输距离近 → 基带传输
- 传输距离远 → 宽带传输
编码与调制
先置概念
- 数据:即要传送的信息。分 数字数据(离散的)和模拟数据(连续的)两种。
- 信号:数据的电气或电磁表现。亦分 数字信号(离散的)和模拟信号(连续的)两种。
我们要传输数据,但数据是不能直接传输的,必须转换成信号,即我们用信号来表示数据。
而当我们要使用数据,是不能直接使用信号的,需把信号转换成数据。
因此,我们有了数据和信号互相转换的需求。
数据有两种,信号有两种,自然就有四种转换
模拟信号和数字信号
模拟信号:简单来说就是,用电信号去模拟其他信号。电话、传真、电视信号都是模拟信号。如上图第一行。
模拟信号具有连续的特点,可以表达丰富的数值信息,但在传播的过程中容易受到干扰,出现失真的情况。
而数字信号是离散的。因为数字信号只用两种物理状态来表示 0 和 1 的(如上图的第二行),故其抗干扰能力比模拟信号强很多。
当传输距离较远时,波形失真度一般较大,这时候我们可以通过中继器(即休息站)来保持波形。
在现代技术的信号处理中,数字信号发挥的作用越来越大,几乎复杂的信号处理都离不开数字信号;或者说,只要能把解决问题的方法用数学公式表示,就能用计算机来处理代表物理量的数字信号。
模拟数据 → 数字信号
由于计算机内部处理的是二进制数据,处理的都是数字音频,因此需要将模拟音频通过采样、量化转换成有限个数字表示的离散序列(即实现音频数字化)
模拟信号的数字化一般需要三个步骤:抽样、量化和编码。
- ==抽样==:对模拟信号周期性的扫描,把时间上连续的信号变成时间上离散的信号。如上图,每 1s 进行一次采样(采样的频率被称为采样率)。当然 采样也不是随便采的,需要遵循采样定理进行采样f采样频率 ≥ 2f信号最高频率
- ==量化==:因为模拟信号本质上是一连串连续的值,我们可以对这些值进行等级划分(量化的等级),这样步骤一的采集到的样品就可以被划分到不同的等级。具体方法:把抽样取得的电平幅值按照一定的分级标度转换为对应的数字值,并取整数,这就把连续的电平幅值转换为离散的数字量
- ==编码==:步骤二中的不同等级可以表示不同的编码。则连续的模拟信号最终可以转化 0101 的数字信号。也就是把量化的结果转换为与之对应的二进制编码
综上,不难得出,随着采样率和量化等级的增加,转换后的数字信号的曲线也就越能贴近模拟信号的曲线(对比上图的原曲线和黄色曲线)。
数字数据 → 数字信号
比如我们在键盘上输入A,实际上就是把A对应的 ASCII 二进制编码0100 0001转换成了对应的脉冲信号(脉冲信号是数字信号的一种,即离散的),传给了电脑的 CPU。
- ==非归零编码【NRZ】(高 1 低 0)==:编码容易实现,但是没有检错功能,且无法判断一个码元的开始和结束,以至于收发双方难以保持同步,比如说发了一长串的 1,接收方读不出来到底有几个 1,需要发送方告知;
- ==归零编码【RZ】==:信号电平在一个码元之内都要恢复到 0 这种编码成编码方式
- ==反向不归零编码【NRZI】==信号电平翻转表示 0,信号电平不变表示 1 (下图例子为 1 0 0 1 1 0 1 0)
- ==曼彻斯特编码==:将一个码元分成两个相等的间隔:【前一个间隔为低电平+后一个间隔为高电平 = 码元 1】【前一个间隔为高电平 + 后一个间隔为低电平 = 码元 0】当然也可以采取相反的规定了。该编码的特点是在每一个码元的中间出现电平跳变,位中间的跳变既作时钟信号(可用于同步),又可以作数据信号,但他的频带宽度是原始的基带宽度的两倍由于每一个码元都被调成了 2 个电平,因此栓据传输速率只有调制速率的 1/2
- ==差分曼彻斯特编码==: 如果前半个码元电平与上一个码元的后半个码元电平相同,则为 1;反之则为 0;编码的特点是:在每个码元的中间,都有一次电平跳转,可以实现自同步,且抗干扰性强于曼彻斯特编码
- ==4B/5B 编码==:比特流插入额外的比特以打破一连串的 0 或 1,就是用 5 个比特来编码 4 个比特的数据,之后再传给接收方,因此称为 4B/5B;编码效率为 80%;我们知道 2^4^ = 16,2^5^ = 32;因此这种编码只会采用 16 种去对应 16 种不同的四位码,而另外的 16 位作为控制码(帧的开始和结束,线路的状态信息等)或保留
我们刚才说到,敲击键盘后,键盘会向 CPU 发出一串脉冲信号。
事实上,我们把这种,在数字信号频谱中,把直流(零频)开始到能量集中的一段频率范围称为基本频带,简称为基带。因此,数字信号被称为数字基带信号,在信道中直接传输这种基带信号就称为基带传输。
这种传输方式的缺点是,在基带传输中,整个信道只传输一种信号,通信信道利用率低。
由于在近距离范围内,基带信号的功率衰减不大,从而信道容量不会发生变化,因此,在局域网中通常使用基带传输技术。
数字数据 → 模拟信号
如果要将数据进行远距离传输,只能将数字信号转换为模拟信号,再进行传输。
为什么呢?因为上面有提到数字信号,又叫数字基带信号。频率低,在传输的过程中容易失真。因此需要调制为高频信号(频带信号)。
将基带信号(数字信号)转换为模拟信号的过程,称为调制。对应的转换器称为==调制器==。
反过来将模拟信号转换为数据(数字信号)的转换器称为==解调器==。
模拟信号只在模拟信道上传输。如绞线、光纤,模拟信号以无线电波的形式在上面传递。这种传输叫频带传输。
4 种数字调制形式:ASK,PSK,FSK,QAM
- ASK(调幅):按波的幅度受到数字数据的调制而取不同的值,如对应二进制 0 → 振幅位 0,二进制 1 → 振幅为 1
- FSK(调频):即按数字数据的值(0 或 1)调制载波的频率。例如对应二进制 0 的载波频率为 F1,而对应二进制 1 的载波频率为 F2。
- PSK(调相):即按数字数据的值调制载波相位。
思考一下 某通信链路的波特率是 1200Baud,采用了 4 个相位,每个相位有四种振幅的 QAM(调幅+调相)技术,则该链路的信息传输速率是多少?
分析:我们需要算 信息传输速率 需要知道 波特率(码元传输速率)以及一个码元携带了多少个比特
我们现在知道其中一个条件了,则需要知道另一个条件即可求解
4 个相位,每个相位有 4 种振幅,那么就有 16 种不同波形的码元 → 16 进制的码元;
而 16 进制码元可以由 log2 16 求解=4,也就是一个码元携带 4 个比特
那么信息传输速率 = 1200 × 4 = 4800(b/s)
模拟数据 → 模拟信号
为了实现传输的有效性,可能需要较高的频率。这种调制方式还可以使用频分复用技术,充分利用贷款资源;
在电话机和本地交换机所传输的信号是采用模拟信号传模拟数据的方式
比如下图:
有一个广播电台发射塔,然后我对着麦克风说话,我对着话筒说话,传出来声波,但这个声波是频率很低的,在信道上会衰减,导致传不出去;因此,需要把这个声波调制成高频的信号。通过解调器再把信号转成声波,通过收音机播放。
奈氏准则、香农定理
失真
影响失真程度的因素
码间串扰:接收端收到的信号波形失去了码元之间清晰界限的现象为什么会有码间串扰呢?是由于信道带宽远大于脉冲带宽时,脉冲的拓展很小,当信道带宽接近于信号的带宽的时候,拓展会超过一个码元周期,造成信号脉冲的重叠,这就形成码间串扰了其实简单来说就是频率过快了,分辨不出来码元了
奈氏准则
奈氏准则是为了解决码间串扰这一问题的
==奈氏准则==:在理想低通(无噪声,带宽受限)条件下,为了避免码间串扰,极限码元传输速率为 2 W Baud,w 是信道带宽,单位是 hz只有在奈氏准则,香农定理中带宽单位采用 hz,其他时候都是 bit/s
同时,我们也得到了以下几点结论:
- 任何信道中,码元传输速率有上限,超过上限,就产生码间干扰。
- 信道的频带越宽,即通过的信号高频分量越多,可以用更高的速率就行码元的有效传输
- 奈氏准则只是限制码元传输速率,香农定理才真的限制信息传输速率
- 由于码元的传输速率受奈氏准则制约,所以要提高数据的传输速率,就必须设法使每个码元携带更多的信息量,这就需要采用多元制的调制方法。
- 理想低通信道下的极限数据传输率=2Wlog2V (b/s) w是带宽,v是几种码元,即码元的离散电平数目、
香农定理
奈氏准则只规定了极限码元传输速率,但没有规定极限比特传输速率是多少
而我们的香农定理就是来解决这个问题的,同时它还考虑了噪声的干扰
噪声是随机产生的,他的瞬时值很大,影响接收端的判决
但噪声的影响是相对的,若信号较强,那么噪声影响相对较小,因此,信噪比就很重要。
信噪比=信号的平均功率/噪声的平均功率,常记作 S/N,并用分贝(db)作为度量单位
即:信噪比(db)= 10log10(S/N)数值等价
- ==香农定理==:在带宽受限且有噪声的情况下,为了不产生误差,信息的数据传输速率有上限值
- 信道的极限数据传输速率=Wlog2(1+S/N) b/s
同样,我们可以得出以下结论:
- 带宽或者信噪比越大,信息的传输速率就越高
- 对一定的 chuanshu 带宽和一定信噪比,信息传输速率的上限就确定了
- 只要信息的传输速率低于信息的极限传输速率,就一定有方法来实现无差错传输
- 香农定理得到的为极限信息传输速率,实际信道能达到的传输速率比他低不少
- 若信道带宽 W 或者信噪比 S/N 没上限,那信道的极限信息传输速率也没有上限
关系
传输介质及分类
传输介质也称传输媒体/传输媒介,是数据传输系统中,在发送设备和接收设备之间的物理通路
传输媒体 ≠ 物理层,传输媒体在物理层下面,因为物理层是体系结构第一层,因此有时候称传输媒体为第 0 层。
在传输媒体中传输的是信号,传输媒体并不能解析这个信号
而物理层规定电气特性,因此可以识别传送的比特流
导向性传输介质
导向性传输介质 - 1.双绞线
导向性传输介质 - 2.同轴电缆
导向性传输介质 - 3.光纤
光纤特点
==诞生原因==:由于信号传输存在损耗,在线路上传输的信号功率会逐渐衰减,衰减到一定的程度就会造成信号的失真,因此会导致接受错误
- ==中继器的功能==:对信号进行再生和还原,对衰减的信号进行放大,保持与原数据相同,以增加信号传输的距离,延长网络的长度
- ==中继器的两端==:两端的的网络部分是网段,而不是子网,适用于完全相同的两类网络的互连,且两个网段速率要相同中继器只负责发送电缆端的数据,但读不懂里面的数据,因此里面就算有错误数据也照样会被传输中继器两端可以连相同媒体也可以连不同媒体中继器两端的网段必须要是同一个协议
==5-4-3 规则==:网络标准中对信号的延迟范围作了具体的规定,因而中继器只能在规定的范围内进行,否则会造成网络的故障所谓“5-4-3 规则”,是指在 10M以太网中,网络总长度不得超过5 个区段,4 台网络延长设备,且5 个区段中只有 3 个区段可接网络设备。
集线器(多口中继器)
集线器功能:对信号进行再生放大转发,对衰减的信号进行放大, 接着转发到其他所有处于工作状态的端口上,以增加信号传输的距离,延长网络的长度。
- 集线器不具备信号的定向传送能力,是一个共享式设备
- 集线器工作过程:节点发送信号到信道,集线器接收该信号,该信号在电缆传输中有衰减,集线器接收信号后将衰减的信号整形放大,最后集线器把放大的信号广播转发给其他所有端口
- 由于集线器不能够分割冲突域,因此连在集线器上的工作主机需要平分带宽
数据链路层
数据链路层功能概述
- 结点:主机、路由器
- 链路(物理链路):网络中两个结点之间的物理线路(有线或者无线),中间没有任其他的交换节点,链路的传输介质主要有双绞线、光纤和微波;进行数据通信的时候,两台计算机之间的通信路径往往要经过许多段这样的链路。链路只是一条路径的组成部分
- 数据链路(逻辑链路):数据链路 ≠ 链路,在一条线路上传送数据的时候,除了需要一条物理线路(链路),还需要一些必要的通信协议去控制数据的传输。把实现这些协议的硬件和软件加到链路上,就构成 数据链路现在常用网络适配器去实现这些协议;
- 帧:点对点信道的数据链路层的协议数据单元
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报(数据报是网络层协议数据单元,又称为 IP 数据报,分组或是包)
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层的数据可靠的传输到相邻节点的目标机网络层,其主要作用是加强物理层传输原始比特流的功能:什么意思呢?原本不是说 物理层不管数据是否正确都会传输吗?那么数据链路层就会把物理层中可能出错的物理连接改成逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路了。
数据链路层功能:
- 为网络层提供服务:无确认无连接服务、有确认无连接服务、有确认面向连接服务
- 无确认无连接服务:发送数据的时候不需要建立连接,收到数据也不需要返回确认。通常用于实时通信、码率比较低的信道;
- 有确认无连接服务:发送数据事先不需要建立连接,但目的主机收到数据需要返回确认。通常用于码率比较高的通信,比如无线通信
- 有确认面向连接服务:最安全最可靠的服务,事先需要建立连接,收到数据也需要返回确认。通常用于通信质量差的无线传输链路
- 链路管理:即连接的建立、维持和释放
- 组帧
- 流量控制
- 差错控制(帧错/位错)
封装成帧
首先我们需要明白一个概念:所有在互联网上传送的数据都是以分组(IP 数据报)为传送单位
因此对于这分组进行加工处理就非常有必要了
如下图所示,IP 数据报传送到数据链路层就成为了帧的数据部分
- 为网络层提供服务:无确认无连接服务、有确认无连接服务、有确认面向连接服务
就是在帧的数据部分前后部分分别添加上首部和尾部,构成一个完整的帧。这样的帧 → 数据链路层的数据传送单元接收端在收到物理层上交的比特流后,根据首部和尾部表寄,从收到的比特流中识别帧的开始和结束——这就是帧定界此外,首部尾部还包含许多控制信息。一个帧的帧长 = 帧的数据部分长度 + 帧首部长度 + 帧尾部长度为了提高帧的传输效率,应尽可能使帧的数据部分长度尽可能大于首部和尾部长度,但不能无限大:每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元 MTU
组装成帧
组帧的四种方式:字符计数法、字符填充法、零比特填充法、违规编码法字符计数法
这种方法就是用每一个帧的第一个计数字段表命该帧包含了几个字符数
但是这种方法风险也很大,一旦某一帧开始出错了,后面的基本都会出错字符填充法
零比特填充法
这个方法确定了发送端与接收端都是包含了 6 个 1,这样的话我们只要保证数据部分不存在连续六个 1 即可
那么零比特填充法就是扫描信息字段,只要出现连续 5 个 1,就填充个 0 来保证不出现连续的六个 1
而接受的时候也非常方便,只需要扫描,发现连续 5 个 1 就删除掉后面的 0,就可以保证数据的正确性啦
违规编码法
曼彻斯特编码中,不存在连续的高或者连续的低;
因此用连续高或者连续低表示首尾标志,这就是违规编码的思想
主要应用在物理层进行编码,只适用于采用冗余编码的特殊编码环境
由于字节计数法 count 字段脆弱性(如果一个错了后面跟着全错)
字符填充实现上的复杂和不兼容性
一般来说采用比特填充和违规编码法透明传输
在数据链路层透明传送数据:表示无论什么样的比特组合的数据都能按照原样无差错的通过数据链路层,因此链路层是看不到有什么妨碍数据传输的东西,换句话说就是,数据链路层对这些数据来说是透明的
- 如下图所示:数据的某个二进制代码正好与 EOT 的控制字符相同,那接收端误以为是传输结束的控制符,其后面的数据因为找不到 SOH 就被接收端当作无效帧丢弃了。
差错控制
要进行控制,首先要明白差错是从何而来。
通常来说,传输中的差错都是由于噪声所引起的
噪声分两种:全局性噪声和局部性噪声
- 无确认无连接服务(通信质量好,通常用于有线传输链路)
- 有确认无连接服务(通信质量差的无线传输链路)
-
检错编码与纠错编码
检错编码 - 奇偶校验码
奇偶校验码 就是用 n - 1 位信息元表示信息,1 位校验元用于校验的校验方式
注意 这里的奇偶校验码指的是 加上了校验元后 1 的个数是奇数还是偶数 而不是加之前 奇偶校验码特点:只能检查出奇数个比特错误,检错能力为 50%:什么意思呢?假如有一串编码为 111001 的编码采用奇校验 → 1110011此时传过来的假如是 1110010 那我可以发现是错的,但假如传过来是 1110110 还是奇数个 1,虽然是错误的,但我无法检验出来
检错编码 - CRC 循环冗余码
冗余码的计算方式:题目给定生成多项式,求它的阶(最高次)r,在所传的数据后 + r 个 0然后用这个新数据去 % 生成的多样式 所得到的余数就是 FCS(冗余码)
得到了冗余码之后,把该冗余码 添加在索要发送的数据后 这就是我们最重要发送的数据了
而接收端把传过来的数据 % 所生成的多项式
若没有余数,代表该帧在传输过程中无差错,否则认为出了差错。
纠错编码 - 海明码
海明码:发现双比特错,纠正单比特错
基本工作原理:动一发而牵全身
- 确定校验码位数 r
- 确认校验码和数据的位置将校验码放在 2 的几次方的位置 (2 的几次方从 0 开始 ) 之后按照顺序把数据填下来,并写出实际值
- 求出校验码的值这一步应该是最难懂的了:其求值方法是令所有要检验的位异或=0(异或,2 个值相同为 0,不相同为 1)什么意思呢?以 P1 为例子:它的数据位是 1,二进制表示成 0001(因为有 4 位校验码 所以说是 xxxx)它的 1 在第一位,因此要找还有哪个代码的 1 在第四位:有 D1,D2,D4,D5那么就令 P1⊕D1⊕D2⊕D4⊕D5 = 0其中 D1 D2 D4 D5 的取值是用下面的实际值来代表P1⊕1⊕0⊕1⊕0=P1⊕(1⊕0)⊕(1⊕0) = P1⊕(1⊕1)=P1⊕0=0则 P1 = 0 同理可求得 其他得校验码 P2,P3,P4
检错并纠错纠错的方法与上面其实很相似。首先用四个校验码分别异或运算 得出新的 P1,P2,P3,P4 实际值然后反着从 P4 写到 P1 形成新的二进制数,这个二进制数所表示的十进制数 就是出错的位置
流量控制
数据链路层的流量控制是点 → 点的,其流量控制手段是:接收方收不下就不回复确认
传输层的流量控制是端 → 端的,其流量控制手段是:接收端给发送端一个窗口公式(一个回复?)
流量控制方法
停止-等待协议就是 发送完一个帧就等待一下确认,收到确认后再发下一个帧
- 滑动窗口协议就是 发送端和接收端各有一个窗口,发送端一股脑将窗口里的所有帧全部发送出去,当接收端收到帧后 接收窗口往后移一个单位,并返回确认,发送端接收到了接收端的确认后,发送窗口也往后移一个单位。
可靠传输,滑动窗口,流量控制
- 可靠传输:发送端发的数据,接收端都能接受
- 流量控制:控制发送速率,让接收端有足够的缓冲空间来接受每一个帧
- 解决方案:滑动窗口(包含了可靠传输和流量控制两个特性)
- 为什么要有停止 - 等待协议?
- 因为除了比特出差错意外,底层的信道也会出现丢包的问题。(丢包 是指物理线路故障、设备故障、病毒攻击、路由信息错误等原因,导致数据包的丢失
- 为了实现流量控制
- 研究停止等待协议的前提?虽然现在经常使用全双工通信方式,但为了讨论问题的方便,仅仅考虑一方发送数据(发送方),一方接受数据(接收方)停止 - 等待协议就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下个分组。
停止- 等待协议有几种应用情况?主要有两种:有差错情况 和 无差错
停 - 等协议 之 无差错情况
其实就是发送方发一个帧,接收方对于发送的帧进行确认 (通过返回 ACK 0 / 1)
指的注意的是 第一次发送的 0 帧与第二次发送的 0 帧并不是一回事,这只是一个编号而已
如果可以的话 其实可以理解成发送 A 确认 A,发送 B 确认 B….发送 N 确认 N
停 - 等协议 有差错情况
-
- 类似于 OS 中进程饥饿现象,假如接收端迟迟收不到发送端发来的数据帧,就会导致无法发送确认帧,下一个帧就无法发送过去,形成了饥饿现象;为了解决这个问题,引入了超时重传方法
- 超时计时器 —— 每次发送一个帧就启动一个计时器 ;
- 回忆一下什么是RTT:数据从网络一端传送到另一端所需时间(包的往返时间,也就是单纯发出去还不够,还得包含回来的时间)
- 超时重传时间(RTO):计时器记录的时间超过 RTO 就重新传输数据,RTO 的设置应该是比 RTT 值略大一点点
- ACK 丢失由于确认帧(ACK)的丢失,发送方会误认为没发过去数据,于是又发一次帧;但这个帧是重复的,我们怎么办呢?对于这种情况,确认方会丢弃重复的发送过来的帧,并进行重传确认;
ACK 迟到ACK 的发送有可能会有延迟,此时发送方会把一开始来晚的确认帧收下并且丢弃掉
性能分析
这个方法虽然简单,但是信道的利用率非常低
什么是信道利用率呢?
是发送方在一个发送周期内,有效地发送数据所需要的的时间占整个发送周期的比率
有效发送数据时间:发送时延 因为在这个时间段内有在一直发送数据
整个发送周期:发送时延 + RTT + 接受时延
GBN 与 SR
GBN(后退重传协议) SR(选择重传协议)
有新协议肯定是为了解决之前协议所带来的不足问题的,回想一下之前的 停止-等待协议:
它每次只发一个帧,需要等到收到确认了才发下一个,这种方式信道利用率太低了。
有人说 可以在发送的时候不单单发一个帧,而是发很多个帧,这种方式叫流水线技术
而这种技术需要:增加序号的范围
- 发送方需要缓存多个分组
针对这两种解决方案 我们有两种协议:后退 N 帧协议 和 选择重传协议
后退 N 帧协议(GBN)
滑动窗口
- 发送窗口:发送方维持一组连续的允许发送的帧的序号意思是格子中的数字并不代表数据,而是序号(1 号帧,2 号帧这样)
- 接收窗口:接收方维持一组连续的允许接收的帧的序号
- 停止 - 等待协议其实可以理解成 接收窗口 和 发送窗口 都是 1的后退 N 帧协议
发送过程:
发送窗口一般可分为四部分:
- 发完被确认的
- 已经发送但等待接收端确认的
- 在窗口内 还能继续发送的
- 不在窗口内 暂时不能发的
ps:橙色部分是 发送端发送的帧的拷贝副本(保证帧不丢失嘛)
GBN 发送方必须响应的三件事
这三件事分别为:
- 上层的调用
- 上层要发送数据的时候,发送方要先检查发送窗口是否已满,如果未满,就产生一个帧并且将其发送;
- 如果窗口已满,发送方就只需要将数据返回给上层,按时上层窗口已满,等一会再发
- 对于 2 这种情况,发送方可以缓存这些数据,等到窗口不满的时候再发帧
- 收到了一个 ACKGBN 协议中,对 n 号帧的确认采用了累计确认的方式,标明接收方已经收到 n 号帧以及它之前的全部帧
- 超时事件协议的名字叫后退 N 帧,来源于出现丢失和时延过长帧时发送方的行为。类似于停-等协议,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方将会重传所有已发送但没有被确认的帧
GBN 接收方需要做的事
可以简单记忆为:接受正确帧回复 ACK、其余情况都丢弃帧
运行中的 GBN
滑动窗口的长度
如果是采用 n 个比特对帧的编号,那么发送窗口的尺寸 W 应该满足:
1 <= W < 2^n - 1
因为如果发送窗口太小,那就没什么意义,而如果过大,会导致接收方无法区别新帧和旧帧
比如发送方为:12341234,窗口尺寸为 4;然后我发第一个 1 丢失了,过了一会发送方又会发一次 1234,那么究竟是前半段的还是后半段的呢?总结
性能分析
上一节我们学习了 GBN,虽然方便,但有一个问题,它会批量重传,那么有没有一个办法可以只重传出错的帧呢?
有一个解决办法:设置单个确认,同时加大接受窗口,设置接受缓存,缓存乱序到达的帧
SR 中的滑动窗口
SR 发送方必须响应的三件事
- 上层的调用
- 上层要发送数据的时候,发送方要先检查下一个可用于该帧的序号;
- 如果序号在发送窗口内,就发送数据帧
- 如果不在,就要么先将数据缓存没要么返回给上层之后在传输
- 收到了一个 ACK如果收到 ACK,加入该帧序号在窗口内,则 SR 发送方将那个被确认的帧标记为已接收;如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处如果窗口移动了,并且有序号在窗口内的未发送帧,就发送这些帧
- 超时事件每个帧都有自己的定时器,一个超时事件发生后只重传一个帧
SR 接收方要做的事
运行中的 SR
滑动窗口长度
总结
信道划分介质访问控制
数据传输使用的两种链路
- 点对点链路
- 两个相邻的节点通过一个链路进行连接,其间没有第三者
- 应用:PPP 协议,常应用于广域网
广播式链路
这种控制方式的本质:将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备,是基于多路复用技术去划分资源的
- 网络负载重的时候:共享信道效率高(处于忙碌状态的主机很多,都在工作中),公平(分配资源平均分配的)
- 网络负载轻的时候:共享信道效率低(处于忙碌状态的主机很少)
假设现在有三组主机间需要进行信号传输:
明明三组主机都需要经过同一个信道,那么有没有一种办法能只用一条信道去传输信息呢?
答案是:多路复用技术
频分多路复用 FDM
时分多路复用 TDM
改进的时分复用 - 统计时分复用 STDM
上面的这种方式,有一个问题,假如我只有 D 用户需要发数据,但由于我排在了 ABC 后面,我得等他们的时隙转完了,才能轮到我
因此就有了改进措施了:用一个集中器,把所有要发的数据收集起来,只要收到的数据达到了一定帧长,就发送;
这样就不用管我排在第几位了;
波分多路复用 WDM
码分多路复用 CDM
分享两个解释码分多路复用的博客:
https://blog.csdn.net/tianlongtc/article/details/80152442
https://bingw.blog.csdn.net/article/details/52705205
网上的博客喜欢把 CDM 与坐标系联系在一起,就是给定一个向量空间内的向量,然后就能解出各轴上的向量表达式;
(学过线代的同学应该对这个非常熟悉了)
码分多址(CDMA)是码分复用的一种方式:
其实可以理解成 把多个坐标轴上的数据统一了规格,然后用一个信道去传送符合某种算法的数据,接收方只需要根据算法反向破译,就能够得到原来不同坐标轴上的数据;
因此,我们只需要考虑三个问题:
- 如何做到各坐标轴独立,数据能不弄混
- CDMA 规定了,多个站点同时发送数据的时候,各站点芯片(码片)序列是相互正交的什么意思呢?正交:向量 S 和 T规格化内积是 0即:两个向量相乘的点积再除以向量分量的个数 = 0(向量能点积就意味着向量长度相同)。
- 如何做到合并,把各坐标轴上的数据放到一个信道上进行传输
- 让各路数据在信道中被线性的相加(各比特对应的序列线性相加)
如何分离,知道哪些数据是 A 站点发的,哪些是 B 站点发的
网络负载重的时候:产生冲突开销(产生冲突,发送的数据就会失效,因此产生开销)
网络负载轻的时候:共享信道效率高,单个结点就可以利用信道全部带宽
ALOHA 协议
ALOHA 协议分为两种:纯 ALOHA 协议和时隙 ALOHA 协议
纯 ALOHA
- 协议思想:不监听信道,不按时间槽发送,随机重发,想发就发;
- 冲突检测方法:如果发生了冲突,接收方能够检测出差错,并且不予以确认,发送方在一定时间内收不到(确认帧)就判断出发生了冲突
- 冲突解决办法:超时后,等待一个随机时间再重传
- 时隙 ALOHA
- 协议思想:把时间分成了若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道,如果发生了冲突(发生冲突,就是一个完整的时间片内并不是只有我一个用户在发数据)就必须等下一个时间片开始的时候再发送 —— 控制了 ALOHA 协议想发就发的随意性
- 冲突检测方法:只能在整时整分的时候发送数据,如果有两个用户同时发送了,接收方就会检测到出错,也就无法返回确认帧;
- 冲突解决办法:发送方超时没接收到确认帧就等到下一个整时整分的时候重发
细枝末节
CS:载波监听,每个站发送数据之前检测一下总线上是否有其他的计算机在发送数据
- MA:多点接入,表示有许多计算机以多点接入的方式连接在一根总线上
协议的核心思想是:发送帧之前,监听信道
根据信道空闲与否,选择发送完整帧还是推迟发送
1-坚持 CSMA
这里的坚持指的是对于监听到了信道忙后的坚持 (也就是发现忙了还继续听,直到空闲就抓住机会立刻传输)
非坚持 CSMA
非坚持指的是对于监听信道忙后就不继续监听了,也就是不坚持了(也就是发现忙了后,等一个随机时间后再监听,不会傻傻继续等)
p - 坚持 CSMA
三种 CSMA 对比总结
CSMA-CD 协议
学习该协议,需要明白 CS MA CD三个分别代表着什么
- CS:载波监听,指的是每个站在发送数据之前以及发送数据的时候,都需要检测一下总线上是否有其他计算机在发送数据
- MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上说明 CSMA/CD 协议用于总线型网络
CD:碰撞检测(冲突检测),边发送边监听,适配器边发送数据边检测信道上信号电压变化情况,以便判断自己在发送数据的时候,别的站是不是也在发送数据侧面说明了 CSMA/CD 协议应用于半双工网络(不允许双方同时发送信息的网络)
传播时延对于载波监听影响
想一想,既然是监听后确定信道没人了再发送数据,那么为什么还会有冲突呢?是因为有着传播时延,也就是信号的传输是需要时间的,你正在征用信道的时候,你这个信号没传过去,别人还就误以为现在信道是空的了,也就是所谓的监听失误
但我们需要明白,对于链路层这里来说,我发生了碰撞并不会影响发送数据,而是在发送到对方那端的时候进行差错检测,才能发现,哦原来发生了碰撞,这时候才能停发。
设总线上单程端到端的传播时延为 τ(tao)
那么 A 发送数据后,最迟需要经过多久才能知道自己发送的数据与其他站发送的数据有么有发送碰撞?
答案是:2τ,也就是两倍的总线端到端的传播时延/总线的端到端往返传播时延
也就是说只要经过 2τ 的时间还没有检测到碰撞,那么就肯定这次发送不会发送碰撞如何确定碰撞后的重传时机
采用截断二进制指数规避算法
主要分成以下几步:
- 首先确定基本推迟的时间为 2τ
- 第二步,定义参数 k (重传次数),k = min{重传次数,10}
- 第三步,在离散的整数集合[0,1,…..,2^k - 1]中选一个数作为r,此时重传的所需要推迟的时间就是r 倍的基本退避时间
- 第四步,判断重传次数,假如为 16 次,就说明网络太拥挤了,判断这个帧是永远无法正确发出去的,就抛弃掉,并向上层报告出错
- 最小帧长问题
考虑下,假如一个帧,非常小,我发送方发出去了,在途中发生碰撞,由于有碰撞,接收方理所应当的会丢弃掉这个帧对吧?但我发送方以及发送完了,并不知道出了错啊,因此并不会再发一次,这个帧就白白丢失掉了。因此为了避免这种情况,以太网规定了最小帧长
以太网规定了最小帧长为 64 字节 = 512bit,如果发送数据很小,没达到这个最小长度,就假如一些填充字节
CSMA-CA 协议
载波监听多点接入/碰撞避免 CSMA/CA (carrier sense multiple access with collision avoidance)
为什么要有 CSMA-CA 协议呢?是因为 之前的 CSMA -CD (冲突检测) 这种方式在无线局域网中有两个问题:
- 无法做到 360° 全面检测冲突
- 当 A 和 C 都检测不到信号,认为信道是空闲的时候,就会向终端 B 发送数据帧,导致了冲突
工作原理:
RTS/CTS 机制的工作原理是,发送站点在向接收站点发送数据包之前,即在 DIFS 之后不是立即发送数据,而是代之以发送一个请求发送RTS(Ready To Send)帧,以申请对介质的占用
当接收站点收到RTS 信号后,立即在一个短帧隙 SIFS之后回应一个准许发 CTS(Clear To send)帧,告知对方已准备好接收数据。
双方在成功交换 RTS/CTS 信号对(即完成握手)后才开始真正的数据传递,保证了多个互不可见的发送站点同时向同一接收站点发送信号时,实际只能是收到接收站点回应 CTS 帧的那个站点能够进行发送,避免了冲突发生。
即使有冲突发生,也只是在发送 RTS 帧时,这种情况下,由于收不到接收站点的 CTS 消息,大家再回头用 DCF 提供的竞争机制,分配一个随机退守定时值,等待下一次介质空闲 DIFS 后竞争发送 RTS 帧,直到成功为止。
CSMA/CA 与 CSMA/CD
- 相同点:这两种机制都属于 CSMA 的思路 —— 先听再说(也就是这两种方式在接入信道之前都需要“敲敲门”,进行监听,发现了信道是空闲的,才能进行接入)
- 不同点:
- 传输介质不同:CA 方式用于无线局域网(无线),CD 方式用于总线式以太网(有线)
- 载波检测方式不同:由于传输介质的不同,这两种方式的载波检测方式也是不同的CD 通过电缆中电压变化进行检测,数据发生碰撞的时候,电缆中电压会随之而变化;CA 采用能量检测(ED),载波检测(CS)和能量载波检测混合检测三种检测信道空闲的方式
- CSMA/CD 是 检测冲突,CSMA/CA 是 避免冲突,两者发生冲突后都会进行有上限的重传
轮询访问介质控制
结合了信道划分介质访问控制和随机访问介质控制的两个优点,做到:
既不产生冲突,又可以发送的时候占全部带宽
主要包括:轮询协议和令牌传递协议
轮询协议
令牌传递协议
首先要明白什么是令牌:
“令牌”是一个特殊格式的 MAC 控制帧,不含任何信息。它是用于控制信道的使用,确保了同一时刻只有一个结点独占信道
虽然说它不含任何信息,但不代表不能携带信息,假如一个主机想要用令牌传递数据,会修改令牌上的标记位,并说明要发给哪个主机
然后传递令牌,接受主机发现令牌上有自己的数据,就接受,最后令牌回到发送的主机上,清空标记位,进行令牌下一轮传递。
局域网基本概念 & 体系结构
局域网
- 局域网(Local Area Network, LAN)是指在一个较小的地理范围(如一所学校) 内,将各种计算机、外部设备和数据库系统等通过双绞线、同轴电缆等连接介质互相连接起来,组成资源和信息共享的计算机互联网络也就是 某一区域内由多台计算机互联组成的计算机组,使用的是广播信道(与点对点传输相对)
- 特点 2 中提到的是有线介质,其实局域网中包含无线局域网,就不用有线介质了;
- 决定局域网的因素为:网络拓扑、传输介质和介质访问控制办法
局域网拓扑结构
主要有四种拓扑结构:
- 星型拓扑定义:网络中各节点都连接到一个中心设备上,由该中心节点向目标节点传送信息。
优点:网络的维护和调试方便。 - 总线型拓扑各个节点都连接到单一连续的物理线路上
常见的总线结构局域网
Ethernet 、ARCnet 、Token Bus 。
特征:信息广播式传播
特点:价格低廉,用户接入灵活,是一种小型、成熟、经济的解决方案。 - 环形拓扑定义:连续网络中各节点的电缆构成一个封闭的环。
信息传递方式:沿节点单向传输。
应用范围:
一是工厂环境中,环网抗干扰能力强;
二是有许多大型机场合。 - 树形拓扑易于拓展和隔离故障,但容易有单点故障
传输介质
局域网细分为有线局域网和无线局域网
- 以太网:这个是目前应用最广泛的的局域网,包括了标准以太网、快速以太网、千兆以太网和10G 以太网,他们都是符合IEE802.3 系列标准规范。采用的逻辑拓扑结构是:逻辑总线型物理拓扑结构是:星型 or 拓展星型。介质访问控制办法采用:CSMA/CD
- 令牌环网(有点被淘汰了已经)逻辑拓扑结构:环形拓扑结构物理拓扑结构:星型拓扑结构
- FDDI 网(Fiber Distributed Data Interface)逻辑拓扑结构:环形拓扑结构物理拓扑结构:双环拓扑结构
- ATM 网(Asynchronous Transfer Mode):这是较为新型的单元交换技术,采用了 53 字节固定长度的单元进行交换(为什么要强调是 固定的呢?因为 1 - 3 局域网等的数据交换单元是可变的,非固定的)
- 无线局域网(Wireless Local Area NetWord;也就是我们常常说的 WLAN):采用的是 IEEE 802.11 标准;不要把这个和 WiFi 搞混了,无线局域网覆盖的范围要比 WiFi 广很多
IEEE 802 标准
- IEEE 802 标准描述的局域网参考模型仅仅只对应OSI 参考模型中的数据链路层和物理层
MAC 子层和 LLC 子层
- 上面说到 IEEE 802 标准只对应 OSI 参考模型中的数据链路层以及物理层,而他将数据链路层划分为了:
- 逻辑链路层 LLC 子层
- 介质访问控制 MAC 子层
以太网
以太网概述
以太网
- 以太网提供的是无连接且不可靠的服务
- 无连接:指的是发送方和接受方之间是没有握手过程的
- 不可靠:指的是 不对发送方的数据帧进行编号,接收方也不向发送方进行确认,差错的帧就会直接丢弃掉,差错的纠正由高层负责
以太传输介质与拓扑结构发展
10BASE - T 以太网
如何理解这个以太网呢?我们拆开来看:
- 10 :指的是传输速率是 10Mb/s
- BASE : 指的是传送基带信号
- T :指的是采用双绞线(如今采用的是无屏蔽双绞线 UTP)
which means:10BASE - T 以太网是 传送基带信号的双绞线以太网
物理上采取:星型拓扑
逻辑上采取:总线型拓扑
每段双绞线的最长为 100m,采用曼彻斯特编码,采用 CSMA/CD 介质访问控制
适配器与 MAC 地址
计算机 与 外界局域网是怎么连接的呢?是通过通信适配器
这个名字我们也许并不是那么熟悉,他还有另外的名字叫:网络接口板 or 网络接口卡 (AKA 网卡
它上面装有处理器和存储器
而存储器上就有着一个非常重要的东西:计算机硬件地址 MAC 地址
硬件地址又称为物理地址/MAC 地址 —— 相当于身份证?标识符的作用吧
以太网 MAC 帧
从图中我们可以发现:以太网 MAC 帧由这么几部分组成
- 目的地址:标记接收方的地址,地址有三种情况:
- 单播地址:专有的 MAC 地址
- 广播地址:全 1 或者是全 F,发送给全部主机
- 多播地址
- 源地址:标记发送方的地址
- 类型:用于标记上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。理解起来很抽象的话举个例子:如果值是0x0800 代表上一层用的是IP 数据报如果值是0x8137,表示帧是由NovellIPX发过来的
- 数据(IP 数据报):长度在46 到 1500字节之间为什么是 46 呢?46 是这么来的:最小长度 64 减去了(目的地址 + 源地址 + 类型 + FCS = 18) = 46
- FCS(帧检验序列 FCS):使用前面所学习的 CRC 冗余码进行校验
高速以太网
- 速率 >= 100Mb/s 的以太网称之为高速以太网
无线局域网
IEEE 802.11
802.11 的 MAC 帧头格式
- 帧控制(2bytes 大小):用于指示数据帧的类型,是否分片等等信息,也就是记录了 MAC 802.11 的属性
- Protocol version:表明版本类型,现在所有帧里面这个字段都是 0x00
- Type:指明数据帧类型,是管理帧,数据帧还是控制帧
- Subtype:指明数据帧的子类型,因为就算是控制帧,控制帧还分 RTS 帧,CTS 帧,ACK 帧等等,通过这个域判断出该数据帧的具体类型
- To DS/From DS:这两个数据帧表明数据包的发送方向,分四种可能情况讨论
- 若数据包 To DS 为 0,From DS 为 0,表明该数据包在网络主机间传输**
- 若数据包 To DS 为 0,From DS 为 1,表明该数据帧来自 AP
- 若数据包 To DS 为 1,From DS 为 0,表明该数据帧发送往 AP
- 若数据包 To DS 为 1,From DS 为 1,表明该数据帧是从 AP 发送自 AP 的,也就是说这个是个 WDS(Wireless Distribution System)数据帧,
- *Moreflag:分片标志,若数据帧被分片了,那么这个标志为 1,否则为 0*
- Retry:表明是否是重发的帧,若是为 1,不是为 0
- *PowerManage:当网络主机处于省电模式时,该标志为 1,否则为 0.*
- Moredata:当 AP 缓存了处于省电模式下的网络主机的数据包时,AP 给该省电模式下的网络主机的数据帧中该位为 1,否则为 0
- *Wep:加密标志,若为 1 表示数据内容加密,否则为 0*
- Order 这个表示用于 PCF 模式下,这里不予讨论
- 生存周期/Associate ID (2 bytes):Duration/ID 在 frame control 后面,占 2byte
- 当设置为 NAV 网络分配矢量情况 (network allowcation Vector )
第 15bit 设置为 0,0~14 用来设置 NAV,单位微秒 - 免竞争期间(CFP contention free period)传送的帧
第 14bit 设置 0 和 15bit 设置 1 其他 bit 为 0 所以 duration/ID 为 32768 设置为 NAV,告诉收到 beacon 帧的 sta,免竞争期间,所以其他 sta 会更新 NAV 值,不干扰竞争传输 - PS-Poll 帧(省电模式-轮询)的 duration/ID 的用法
处于省电模式的 sta 会定期醒来,送出一个 PS-Poll 帧,从基站取出暂存的帧,会在 Duration/ID 中设置连接识别码 AID(association ID),显示加入的 BSS,1-2007 范围
- 当设置为 NAV 网络分配矢量情况 (network allowcation Vector )
- 序列控制(2 bytes:4 bits/12 bits):这个域分 2 部分,一个是分片序列号和标识帧列号。分片序列号就是记录分片序号的。比如一个帧 A 被分片成 a1,a2,a3,那么 a1,a2,a3 这三个分片帧的分片序列分别是 0,1,2。这个和 IP 分段原理一样的,该域占 4 个比特位。剩下的 12 个比特位就用于标识帧的序号,这个跟 IP 头里面的序列号一样。
- MAC 地址 1-4
RA TA BSSID DA SA
- BSSID(Basic Service Set ID):在 infrastructure BBS 中,BSSID 就是 AP 的 mac 地址。但是在 IBBS 中,它是一个随机即生成的 46 位二进制序列,还有最高两位分别是 Universal/Local 标志位和 Individual/Group 标志位。IBBS 的 BSSID 中,Universal/Local 标志位为 1,表示本地 MAC,Individual/Group 标志位为 0,表示是个人 MAC。也就是说在 IBBS 中,BSSID 地址应该类如 10xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx(x 表示随机数要么 0 要么 1, 2 进制表示)
- DA(destine address):该帧的目的mac地址
- SA(source address):该帧的源mac地址
- RA(receiver address):无线网络中,该数据帧的接收者
- TA(transmitter address):无线网络中,该数据帧的发送者
注意 这上面两个定义中说的是无线网络 而不是 网络
有的人会觉得奇怪 有什么区别吗?
意思是说 RA TA 仅仅只在相应的无线网络中有作用
假如我现在有一台主机 需要向目的主机发送数据,而目的主机并不在我的无线网络中,我就没法发了。
在这种情况中此时,RA作为的是一个中转站的身份,并不能一次性的完成数据传输的作用。
最典型的一个例子就是在 WDS 模式下,数据帧会有 4 个地址,RA,TA 表示接收端和发送端,这两个地址用于无线传输的时候。还有 2 个地址是 DA 和 SA,分别跟以太网中一样表示源地址和目的地址。WDS 帧的格式如下图:
打个比方说,AP1 有主机 A,AP2 有主机 B。如果 A 要和 B 同学,那么 A 会首先发送数据帧给 AP1,然后 AP1 发送帧给 AP2 。这个时候帧里面会有 4 个地址,分别是 RA=mac(AP2),TA=mac(AP1),DA=mac(B),SA=mac(A)。
无线局域网的分类
主要分成两类:
- 有固定基础设施无线局域网
- 无固定基础设施无线局域网的自组织网络
有固定基础设施无线局域网
一个基本服务集 BSS 包括一个基站和若干个移动站,
所有的站在本 BSS 以内都可以直接通信,
但在和本 BSS 以外的站通信时都要通过本 BSS 的基站。
基本服务集中的基站叫做接入点 AP (Access Point),其作用和网桥相似。
一个基本服务集可以是孤立的,也可通过接入点 AP 连接到一个主干分配系统 DS (Distribution System),然后再接入到另一个基本服务集,构成扩展的服务集 ESS (Extended Service Set)。
ESS 还可通过叫做门桥(portal)为无线用户提供到非 802.11 无线局域网(例如,到有线连接的因特网)的接入。门桥的作用就相当于一个网桥。
移动站 A 从某一个基本服务集漫游到另一个基本服务集,而仍然可保持与另一个移动站 B 进行通信。无固定基础设施无线局域网的自组织网络
在这个网络之中的各节点地位平等,每个主机既可以充当主机也可以当路由器的作用
也就是既可以发送数据,也可以接收数据
把主机都安排在一个网段就可以形成自组织网络
广域网
局域网只覆盖物理层和数据链路层,而广域网不仅仅如此,还覆盖了网络层;
广域网中强调的是:资源共享 while 局域网强调数据传输
广域网中的通信子网采用:分组交换技术(在网络层会细讲);
广域网能够将局域网或计算机系统连接起来,达到了资源共享的目的
PPP 协议
- 点对点协议 PPP(Point-to-Point Protocol)是目前使用最广泛的数据链路层协议,用户使用拨号电话接入因特网的时候一般使用该协议
-
PPP 协议需要满足的要求
简单:由于最复杂的部分在 TCP 协议中,而网络协议 IP 相对来说比较简单,它提供的是不可靠的数据报服务;在这种情况下,数据链路层没必要提供比 IP 协议还多的功能;因此对数据链路层的帧,不需要进行:纠错、序号、流量控制总的来说,这种数据链路层的协议(PPP 协议)非常简单:接收方每收到了一个帧,进行CRC 检验如果正确,就收下;反之则丢弃;
- 封装成帧:PPP 协议必须规定特殊的字符作为帧定界符(标志一个帧的开始和结束的字符)以便:接收端从收到的的比特流中能准确的找出帧的开始和结束的位置
- 透明性:PPP 协议必须保证数据传输的透明性,什么叫透明性呢?意思是,如果数据中碰巧出现了和帧定界符一样的比特组合的时候,就必须要采取有效的措施去解决这个问题
- 多种网络层协议:PPP 协议必须能够在同一条物理链路上同时支持多种网络层协议(IP、IPX)的运行要注意:当点对点链路连接的是局域网 or 路由器的时候,PPP 协议必须同时支持在链路所连接的局域网 or 路由器上所运行的各种网络层协议
- 多种类型链路:除了要支持多种网络层的协议以外,PPP 还必须能够在多种类型的链路上运行;比如:串行(一次只发一个比特)、并行(一次并行地发送多个比特);同步、异步;低速、高速;电的、光的;交换的、非交换的;
- 差错检测:PPP 协议必须能够对接收端收到的帧进行检测,并且对有差错的帧立即丢弃;如果在数据链路层不进行差错检测,那么出现差错的无用帧就会在网络中继续向前转发,浪费很多网络资源
- 检测连接状态:PPP 协议必须具有一种机制能够及时自动检测出来链路有没有在正常工作;
- 最大传送单元:PPP 协议必须对每一种类型的点对点链路设置MTU(最大传送单元)的标准默认值;这样做的目的是什么呢?是为了促进各种实现的互操作性;如果高层协议发送的分组过长,超过了 MTU 数值,PPP 就需要丢弃,并且返回差错;ps:MTU 是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度
- 网络层地址协商:PPP 协议必须提供一种机制,去让通信的两个网络层的实体能够通过协商去 →知道或者说是能够配置彼此的网络层地址;对于拨号连接的链路十分重要,若是只在链路层建立了连接 但不知道对方的网络层地址,就不能够保证网络层可以传送分组
- 数据压缩协商:PPP 协议需要提供一种方法去协商使用数据压缩算法;但 PPP 协议并不要求将这个算法进行标准化;
PPP 协议三个组成部分
- 将 IP 数据报封装到串行链路的方法
- 用来建立、配置和册数数据链路连接的链路控制协议 LCP
- 一套网络控制协议 NCP
PPP 协议的状态图
可以这么理解:
用户拨号接入了 ISP(互联网服务提供商),等于建立了一条用户个人电脑到 ISP的物理连接
用户个人电脑向 ISP 发送一系列的链路控制协议 LCP 小组(封装成多个 PPP 帧),以便建立 LCP 连接;
接着 NCP 介入了,给新接入的用户个人电脑分配一个临时的 IP 地址;
结果就是:用户个人电脑成为互联网上一个有IP 地址的主机了;
PPP 协议的帧格式
HDLC 协议
- HDLC 协议 - 高级数据链路控制,是一种在同步网上传输数据、面向比特的数据链路层协议
这种协议的特点是:
- 数据报文 可以透明传输,用于实现透明传输的0 比特插入法易于硬件实现
- 采用全双工通信
所用的帧都采用CRC 检验,对信息帧进行编号,可以防止漏收或重份,传输可靠性高
HDLC 的站
HDLC 的站主要有三个:主站、从站、复合站
其中:主站
- 发送命令(包括数据信息)帧
- 接受响应帧
- 负责对整个链路的控制系统的初启
- 负责流程的控制
- 负责差错检测或恢复
- 从站
- 接受由主站发来的命令帧
- 向主站发送响应帧
- 配合主站参与差错恢复等链路控制
- 复合站
- 既能发送、又能接受命令帧和响应帧
- 负责整个链路的控制
下面提及三种数据的操作方式:
- 正常响应方式
- 异步平衡方式
- 异步响应方式
HDLC 的帧格式
主要由这几部分组成:
标志 F(首尾各一个) 地址 A 控制 C 信息 Info 帧检验序列 FCS
HDLC 与 PPP
链路层设备
物理层扩展以太网
由于在物理层中,主机与集线器之间距离不能太远,不然会失真,信号怎么恢复都恢复不成原来的了;
而为了使远距离主机之间进行通信,就需要扩展
- 方法 1:使用光线解调器
主机到光线调制器:电信号 → 光信号
光线解调器到集线器:光信号 → 集线器
- 方法 2:集线器连接集线器
首先普及一个概念:冲突域
如果一个集线器附近如果有多台主机同时发送消息,就会发生碰撞/冲突,构成的区域就叫冲突域
没用集线器连接起来前:
添加了主干集线器后:
链路层扩展以太网
由于上面的方法有个缺点:
冲突域增大了,发生冲突的概率会更高,那么除了物理层去扩展以太网以外,有没有办法从链路层去扩展呢?
主要是通过网桥和交换机去实现,顺便引入一个网段的概念
- 网桥:是根据MAC 帧的目的地址对帧进行转发和过滤,也就是说:当网桥收到了一个帧之后,并不向所有接口转发这个帧,而是先去检查这个帧的目的 MAC 地址,然后再确定该帧转发到哪个接口或是把它丢弃掉(过滤掉)
- 网段:一般是指一个计算机网络中使用同一 物理层设备(传输介质、中继器、集线器等)能够直接通讯的那一部分
网桥分类
透明网桥
- 透明网桥指的是以太网上的站点是并不知道所发送的帧会经过哪几个网桥,是一种即插即用的设备——自学习
什么叫自学习?就是在传输过程中逐渐完善转发表(包含了地址和接口等信息),这样子在下一次发送帧的时候,如果转发表中有对应的目的地址的信息,网桥就不用再转发帧了,就可以直接丢弃这个帧了。
源路由网桥
多接口网桥
多接口网桥 又名 以太网交换机(我觉得这个更广为人知一点)
这种方式的好处就是 连接了以太网交换机的设备可以做到独占传输媒体带宽
以太网交换机的两种交换方式
- 直通式交换机:查完目的地址就立刻转发,延迟小,可靠性低无法支持具有不同速率的端口的交换
存储转发式交换机:将帧放入高速缓存,并检查是否正确,正确则转发,错误则丢弃;延迟大,可靠性高,可以支持具有不同速率的端口的交换
冲突域与广播域
网络层
网络层的主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务;
-
网络层功能概述
路由选择与分组转发
- 异构网络互联
- 拥塞控制什么叫拥塞呢?假如所有结点来不及接受分组,而要丢弃大量的分组的话呢,网络就会处于拥塞的状态;因此,需要采取一些措施去缓解这种拥塞
数据交换方式
思考一下,我们知道数据想要从一个源主机传送到一个目的主机,需要经由路由器进行转发
那么究竟是如何进行的呢?就是通过数据交换这个技术了;
下图有三种数据传输方式,P1 没有引入交换设备,那么 N 个设备就需要 CN2 条链路
P2 引入了一个交换设备,那么 N 设备各自只需要连接一条链路到交换设备即可,需要 N 条链路
P3 将多个交换设备连接在一起,形成了一个交换网络,这样解决了远距离传输;
那么数据交换方式主要有三种:
这种方式的优点为:
- 通信时延小(这是一种数据直达的过程,建立连接后,有数据就能通过交换设备发出去)
- 有序传输(发送数据按照顺序发送,按照顺序接受)
- 没有冲突(因为是独占资源的)
- 实时性强(建立连接后,随时可以进行通信)
缺点为:
- 建立连接时间长(需要建立连接,比如拨号)
- 线路独占,使用效率低(假如 AB 建立连接,但不传输数据,就白白浪费了了一个信道嘛)
- 灵活性差(假如其间一个交换设备宕机了,那么 AB 之间就完全无法进行通信了)
- 没有差错控制的能力(只转发,不检错)
报文交换
首先需要明白什么是报文
- 报文:是源应用发送的信息整体
这种方式的优点:
- 无需建立连接
- 存储转发,动态的分配线路(存储转发就是,不同于电路交换,拿到数据就转发,而是先存储,伺机转发,这样就可以做到动态的分配线路)
- 线路可靠性比较高(不用担心其间一个设备宕机了,就不能进行信息传输了,而是条条大路通罗马)
- 线路利用率比较高(在通信过程中,一段一段占用通信线路,而非占用一整条通信线路)
- 多目标服务(一个报文可以同时发往多个目的地址)
缺点:
- 有存储转发时延(因为需要存储嘛,肯定需要花额外一点时间的)
-
分组交换
思想上与报文交换差不多,都是使用存储转发,而分组转发就是将转发的数据块切分为了小的数据块——分组
在分组交换中,只有最后一组(分组)的数据到达目的主机才算接受成功
优点: 无需建立连接
- 存储转发,动态分配线路(类比于报文交换,其实就是把转发的单位变了下,主要原理差不多)
- 线路可靠性比较高(分组短,出错几率小)
- 线路利用率较高(不同时间,只占用一段段路径)
- 相对于报文交换来说,存储管理更容易(对于缓存的要求没那么高了,因为不需要够大的缓存空间容纳大报文,而是可容纳小分组即可)
缺点:
- 有存储转发时延
- 需要传输额外的信息量(因为报文进行分片后,需要给各报文添加额外信息:源地址、目的地址、编号等)
- 乱序到目的主机的时候,需要对分组排序重组
数据报方式&虚电报方式
分组交换方式分为两种:数据报方式&虚电报方式
其中,
数据报方式为网络层提供无连接服务
- 无连接服务:不会事先为分组的传输确定传输路径,每个分组独立确定传输路径,因此不同分组的传输路径是可能不同的
虚电路方式为网络层提供连接服务
连接服务:首先为分组的传输确定传输路径(建立连接),然后沿该路径(连接)传输系列分组,系列分组传输路径相同,传输结束后拆除连接
数据报方式
主要特点是:
每个分组携带源地址和目的地址
路由器根据分组的目的地址转发分组:
基于路由协议/算法去构建转发表
而后检索转发表,每个分组独立选路
虚电路方式
虚电路方式结合了数据报方式和电路交换方式
虚电路:一条源主机到目的主机;类似于电路的路径,路径上所有的结点维持这条虚电路的建立,维持一张虚电路表
这张表的每一项记录了一个打开的虚电路的信息
因此,属于同一条虚电路(路径)的分组会按照同一路由转发
你看 这样就有有问题了,假如一个虚电路上有一个结点出问题了,那么经由该结点的虚电路就都不能工作了
总结
传输单元名词辨析
分组、包,packet,信息在互联网当中传输的单元,网络层实现分组交付。用抓包工具抓到的一条条记录就是包。
帧,frame,数据链路层的协议数据单元。我们将链路层分组称为帧。
应用层——消息(报文)
传输层——数据段(segment),报文段
网络层——分组、数据包(packet),IP 数据报
链路层——帧(frame)
物理层——P-PDU(bit),比特流
数据报,Datagram,通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系。可以理解为传输数据的分组。我们将通过网络传输的数据的基本单元称为数据报。
报文段,segment,组成报文的每个分组。我们将运输层分组称为报文段。
报文,message,一般指完整的信息,传输层实现报文交付。我们将位于应用层的信息分组称为报文。
由此可见,抓包抓到的是传输层的包,所以 packet,frame,Datagram,segment 是存在于同条记录中的,而 frame,Datagram,segment 是基于所在协议层不同而取了不同的名字。
1.报文(message)
报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。
2.分组(packet)
分组是在网络中传输的二进制格式的单元,为了提供通信性能和可靠性,每个用户发送的数据会被分成多个更小的部分。在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。
3.数据包(data packet)
数据包是 TCP/IP 协议通信传输中的数据单元,也称为“包”。是指自包含的,带有足够寻址信息,可独立地从源主机传输到目的主机,而不需要依赖早期的源主机和目的主机之间交换信息以及传输网络的数据包。
4.数据报(datagram)
面向无连接的数据传输,其工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。
5.帧(frame)
帧是数据链路层的传输单元。它将上层传入的数据添加一个头部和尾部,组成了帧。报文交换 & 分组交换对比
对于下面这道题来说,将10000bit的报文分成了1000组每个大小为10bit的分组
其实可以这么想区别:类似于火车进隧道吧。报文交换需要将整个对于报文交换来说:需要考虑将整个报文传到第二个设备所需要的的时间,也就是用报文长度/链路传输速率,再考虑传了几次
- 对于分组交换来说:先考虑单个分组的发送时延,也就是单个比特大小/传输速率;而分组交换的总时延由 2 部分组成,一个是第一个分组开始发送直至最后一个分组发送到链路上所需要时间另一个是由交换设备到交换设备,以及交换设备到目的主机的时间(由于分组交换各个交换设备之间传输数据是重叠的,因此省时间)
三种数据交换方式比较
IP 数据报
IP 数据报格式
IP 数据报粗糙来说有 2 部分组成:首部 + 数据部分
其中首部包含了固定部分和可变部分
数据部分包含了 TCP 段 和 UDP 段
名称 | 注释 | 大小 |
---|---|---|
版本 Version | ipv4 或者 ipv6 | 4 位 |
首部长度 IHL | 此处数值再乘以 4 才是真正大小,同时因为 IP 数据报固定长度为 20 字节,所以此处最小值为 5,即二进制的 0101 | 4 位 |
区分服务 DSCP + ECN | 希望获得哪种服务,用的比较少 | 8 位 |
总长度 Total Length | 首部+数据的长度,最大为 2^16-1=65535 | 16 位 |
标识 Identification | 用来表示是哪一个数据报的分片,不同的分片标识各不相同 | 8 位 |
标志 Flags | 用来表示是否分片和分片是否结束 | 3 位,但实际有用的只有后两位 |
片偏移 Fragment Offset | 用来标记分片之后,该分片在原来的数据报的位置,以 8 字节为单位 | 13 位 |
生存时间 Time To Live | 即 TTL,没经过一个路由器 TTL-1,0 时自动放弃,根据系统不同默认的 TTL 不同 | 8 位 |
协议 Protocol | 用来标记协议名的字段值,如 TCP,UDP,ICMP 等等 | 8 位 |
首部检验和 Header Checksum | 检验首部的字段是否出错,出错就丢弃此数据报 | |
源地址 Source IP Address | 发送方 ip 地址 | 32 位 |
目的地址 Destination IP Address | 接收方 ip 地址 | 32 位 |
可选字段 Options | 用来排错等安全检测 | 未知,可在 0-40 位之间 |
填充 | 将数据报对齐成 4 字节的整数倍,数值全部为 0 | 未知,根据可选字段来定 |
IP 数据报分片
首先需要了解为什么要分片
我们知道最大链路层中有一个概念叫最大传送单元 MTU
代表着数据链路层数据帧可以封装数据的上限,以太网的 MTU 是 1500 字节
那么,如果所传送的数据报长度超过了某个链路的 MTU 值,那么应该怎么办呢?分片
首先把上面没讲完的 标识、标志、片偏移的概念理一下
- 例题
要根据题目的所给的 MTU 将数据部分分片
其中片偏移 = 各分片在原来数据部分的位置 / 8b
要注意的是:
总长度的单位是1B
片偏移的单位是8B
首部长度的单位是4B
IP 数据报的传输方式
参考博客 1:https://www.cnblogs.com/CNHK1949/p/10680651.html
参考博客 2:https://blog.csdn.net/weixin_45755666/article/details/109552216
有三种:单播、广播、组播
单播
网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行;用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播 IP 地址作为目的地址。
- 是一种点对点传输方式。
在发送者和每一接收者之间需要单独的数据信道。
单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web 服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。
广播
广播”可以理解为一个人通过广播喇叭对在场的全体说话,这样做的好处是通话效率高,信息一下子就可以传递到全体。
是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式
- 是一种点对多点传输方式。
- 目的 IP 地址全 1,目的 MAC 地址全 F
“广播”在网络中的应用较多,如客户机通过 DHCP 自动获得 IP 地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。
在网络中不能长时间出现大量的广播包,否则就会出现所谓的“广播风暴”。广播风暴就是网络长时间被大量的广播数据包所占用,正常的点对点通信无法正常进行,外在表现为网络速度奇慢无比。出现广播风暴的原因有很多,一块有故障的网卡,就可能长时间向网络上发送广播包而导致广播风暴。
集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的 QS 系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。
广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。
在 IP 网络中,广播地址用 IP 地址“255.255.255.255”来表示,这个 IP 地址代表同一子网内所有的 IP 地址。
组播(多播)
“多播”可以理解为一个人向多个人(但不是在场的所有人)说话,这样能够提高通话的效率。
如果你要通知特定的某些人同一件事情,但是又不想让其他人知道,使用电话一个一个地通知就非常麻烦,而使用日常生活的大喇叭进行广播通知,就达不到只通知个别人的目的了,此时使用“多播”来实现就会非常方便快捷,但是现实生活中多播设备非常少。
当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发。
- 是一种点对多点传输方式。
组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持)
组播路由器:运行组播协议的路由器
“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。
因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;
如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。
采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。
IP 网络的多播一般通过多播 IP 地址来实现。多播 IP 地址就是 D 类 IP 地址,即 224.0.0.0 至 239.255.255.255 之间的 IP 地址。Windows 2000 中的 DHCP 管理器支持多播 IP 地址的自动分配。
IP 组播地址
我们知道,IP 地址是用于接收别人传送信息的,那么对于组播来说,如果还是以原来的 IP 地址作为接受信息的目的 IP,那岂不是达不到组播的效果了?因此必须要有一个IP 组播地址
硬件组播
同单播地址一样,组播 IP 地址也需要相应的组播 MAC 地址在本地网络中实际传送帧。
组播 MAC 地址以十六进制值 01-00-5E 打头,余下的 6 个十六进制位是根据 IP 组播组地址的最后 23 位转换得到的。
- TCP/IP 协议使用的以太网多播 MAC 地址的范围:
01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF。
有可能不使用的 5 位不一样,但后 23 位一样,导致两个组播组的接收端成为了一个组播组:
收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
IGMP 协议与组播路由选择协议
IGMP 协议
- IGMP 协议,网际组管理协议
- 作用:让路由器知道本局域网上是否有主机(的进程)参加或者退出了某个组播组
如下图所示,四个主机参加了同一个组播组,每个路由器根据IGMP 协议就可以判断,每接受一个组播组,要不要给局域网中的主机们呢?下图中,发送数据报的话就只会给 R1 R2 R3 而不会给 R4,这就是根据 IGMP 协议来的
但这个 IGMP 协议也有不完备性,只能让路由器知道进程参加或者退出了这个组播组,而不能知道参加了组播组的成员在什么网络上
在协议中的位置:
- 工作的两个阶段
- 阶段 1:某主机要加入组播组时,该主机向组播维的组播地址发送一个 IGMP 报文,声明自己要称为该组的成员。本地组播路由器收到 IGMP 报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器。
- 阶段 2:本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的;如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这组的成员关系发给其他的组播路由器。
成员关系:组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。
组播路由选择协议
一个组播组中的成员是可以动态变化的。
组播路由选择协议目的是找出以源主机为根节点的组播转发树。
构造树可以避免在路由器之间兜圈子。
对不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树
组播路由选择协议常使用的三种算法
- 基于链路状态的路由选择
- 基于距离-向量的路由选择
- 协议无关的组播(稀疏/密集)
路由算法 & 路由协议
路由算法
路由器中有两个表:路由表/转发表
路由算法的意义就在于:每次选择转发的路由都选择最佳的路由
ps:最佳路由中的最佳是相对于某一种特定要求下得出的较为合理地选择
路由算法有两种:
- 静态路由算法(非自适应路由算法)
- 动态路由算法(自适应路由算法)
关于动态路由算法,有两个性质:全局性和分散性
- 全局性:体现出全局性的算法叫链路状态路由算法 OSPF所有路由器掌握完整的网络拓扑和链路费用信息
- 分散性:体现出分散性的算法叫距离向量路由算法 RIP路由器只掌握物理相连的邻居及链路费用
分层次的路由选择协议
为什么要分层次呢?
因为因特网的规模很大,而且单位不想让外界知道自己的路由选择协议,但仍想要连入因特网
因此就衍生了自制系统 AS的概念:
在单一技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由
同时使用一种 AS 之间的额路由协议以确定在 AS 之间的路由属于一个行政单位进行管辖,一个自治系统的所有路由器在本自治系统内都必须要联通
路由选择协议因此也分为两种:
- 这是一种分布式的基于距离向量的路由选择协议
- 他要求网络中每个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(一组距离)
- 距离:通常表示为跳数,即从源端口到目的端口所经过的路由器个数。经过一个路由器,跳数就+1取值为 1 ~ 15,16 表示无穷大
- 与相邻的路由器交换信息
- 所交换的信息是自己的路由表
- 每 30 秒交换一次路由信息,而后路由表根据新信息来更新自己的路由表,若 180s 没接收到邻居路由器的通告,就认定邻居路由器消失
一开始路由器只知道数目有限的相邻路由器信息,后来更新次数多了,所有路由器最终都会知道到达AS任何一个网络的最短距离和下一跳路由器的地址,就收敛了
RIP 协议的报文格式
距离向量算法
如果有学过数据结构的图的内容的话,其实对于这个距离向量算法还是比较熟悉的
主要分为三步:
- 初始化表项,修改相邻路由器发来的 RIP 报文中的所有表项
- 对于 1 中修改后的 RIP 报文中的每个项目,进行判断并做相应操作
- 如果 180s 未收到相邻路由器 X 的更新路由表,将 X 标记成不可达的路由器(距离=16)
- 返回 循环
- 为什么改地址?因为图中是从 x 得到的信息
- 为什么距离固定+1?因为路由器只从相邻路由器之间获取 RIP 报文,举例只会是 1
- 为什么下一跳是 x 就要替换?因为网络环境不断变化,可能这次某个节点挂掉,所以保持最新的
- 为什么下一跳不是 x 时有更新和不处理两种手段?因为这样可以提高效率,比原来快就换,比原来慢就保留原来的,也可以理解
例题 1 分析:
首先把 R4 发来的路由信息(左下),进行更新,把距离+1,然后更改下一跳路由器为 R4
第二步,根据发来的路由信息修改 R6 的路由表
发现:R6 的路由表中没 Net1 的目标网络,因此填进去
对于目的网络 Net2,R6 表中有,且下一跳的路由器相同,因此进行替换
对于目的网络 Net3,R6 表中有,且下一跳的路由器不同,因此选择距离短的那个
(这里选择 R4 的那个是因为,新的含义为:如果我下一跳走 R4,那么到达 Net3 只需要 2 跳)
例题 2 分析:
来自 B 的向量为(5,0,8,12,6,2)是什么意思呢?意思是 B 到达 A、B、C、D、E、F 的距离为这几个数字
后面几个向量同理
现在给定了 C 到 B、D、E 的延迟了,只需要把这几个延迟分别加到原来的向量里
然后在这几个新的向量组里,每一步选择距离最短的,最后即可得到 C 到达所有结点的最短路径了。
ps:0 的意思是到自己的距离
RIP 协议特点
来回更新路由表,错误信息被覆盖,导致直至达到距离上限强制错误时才可以得知出错
OSPF 协议与链路状态算法
参考博客:https://www.jianshu.com/p/8ace17859bd1
OSPF 协议
- Open Shortest Path First, 开放最短路径优先协议,是一种开源的使用最短路径优先(SPF)算法的内部网关协议(IGP)。
- 常用于路由器的动态选路。
OSPF 常见的几个概念
- 邻居(Neighbor):宣告 OSPF 的路由器(也可能是通过 quagga 软件配置的普通服务器)从所有启动 OSPF 协议的接口上发出 Hello 数据包。如果两台路由器位于同一条数据链路上,并且它们根据互相的 hello 消息中指定的某些信息(比如 id 等)协商成功,那么它们就成为了邻居(Neighbor)。
- 邻接关系(Adjacency):两台邻居路由器之间构成的一条点到点的虚链路,邻接关系的建立是由交换 hello 信息的路由器类型和网络类型决定的。
- 链路状态通告(Link State Advertisement,LSA):每一台路由器都会在所有形成邻接关系的邻居之间发送链路状态通告 LSA。LSA 描述了路由器所有的链路、接口、邻居等信息。ospf 定义了许多不同的 LSA 类型。
- 链路状态数据库(LSDB):每一台收到来自邻居路由器发出的 LSA 的路由器都会把这些 LSA 信息记录在它的 LSDB 中,并且发送一份 LSA 的拷贝给该路由器的其他所有邻居。这样当 LSA 传播到整个区域后,区域内所有的路由器都会形成同样的 LSDB。
OSPF 的基本原理
OSPF 算法是让每个路由器中的数据库储存整个网络的拓扑图,即每个路由器掌握了全局的信息,此时这个网络趋于稳定,便可以使用单源最短路径(Dijkstra)来选择路由。
每个路由器与其邻居的通信行为有以下几种: 1.保持联系
整个自治系统中,每个路由器都有唯一标识 RouterID(32-bit). 与其每个邻居间隔 30s,发送一次 Hello 报文,意思就是你还活着吗?
二者相互通信发送 Hello,并收到对方回应 Hello。双方会周期性将自己的路由数据摘要发送给对方,一般 30min,平时,
双方只是联系感情,直到对方没有挂。 2.告知现今情况
如图,R1 会周期性地将自己的路由摘要发送给所有邻居。比如对 R6 路由器,R1 会发送称为 DD 报文的包,里面会说自己认识 R6,R2,R4,R5,R6 对比自己的信息库发现 除了自己 R1 的朋友它一个都不认识,于是就发送请求报文,请求告知这些不认识的路由详情。
这个请求报文称为 LSR(链路状态请求报文)报文。
R1 收到之后,直到 R6 还不认识自己另外三个朋友,于是发送 LSU 报文(链路状态更新)告知 R6 详情
R6 收到之后,给 R1 个确认-LSAck 报文。两个人现在认识的路由器一样多了,此时两个人是好基友了-全毗邻关系。链路状态路由算法
其实就是Dijkstra 算法的实例运用吧 我感觉
OSPF 的区域
关于区域:https://blog.51cto.com/14157628/2392133
为什么要分区域呢?
在大型网络中,使用 OSPF 路由协议经常遇到以下问题: 1.在大型网络中,网络结构的变化是时常发生的,因此 OSPF 路由器就会经常运行 SPF 算法来重新计算路由信息,大量消耗路由器的 CPU 和内存资源; 2.在 OSPF 网络中,随着多条路径的增加,路由表会变得越来越庞大,每一次路径的改变都使路由器不得不花大量的时间和资源去重新计算路由表,路由器会变得越来越低效; 3.包含完整网络结构信息的链路状态数据库也会变得越来越大,这将有可能使路由器的 CPU 和内存资源彻底耗尽,从而导致路由器的崩溃。
为了解决这个问题,OSPF 允许把大型区域划分成多个小区域,这些小区域可以交换路由汇总信息,而不是每个路由器的详细信息;也更容易管理;OSPF 的工作也会更加流畅。
生成 OSPF 多区域的原因
改善网络的可扩展性;
快速收敛。
想要达到上面两个要求的关键就是把网络分成更小的区域。比如
划分区域之后,每个 OSPF 区域中支持的最多路由器的个数 30——200。
但是一个区域中实际加入的路由器的数量要小于单个区域所能容纳路由器的最大数量。因为有很多原因影响,比如:一个区域内链路的数量、网络拓补稳定性、路由器的内存和 CPU 等等。
对于和区域相关的通信量定义了三种类型,如:
- 域内通信量:指由单个区域内的路由器之间交换的数据包构成的通信量;
- 域间通信量:指由不同区域的路由器之间交换的数据包构成的通信量;
- 外部通信量:指由 OSPF 区域内的路由器与 OSPF 区域外或两一个 AS(自治系统)内的路由器之间交换的数据包构成的通信量。
OSPF 被分为多区域的能力是依照分层路由实现的。当划分成小区域以后,像重新计算拓补数据库这样的操作就被限定在该小区域内,区域间则只需通告一些汇总信息。
分层路由的优势:
- 降低了 SPF 运算的频率;
- 减小了路由表;
- 减小了链路状态更新报文(LSU)的流量。
什么是区域呢?
- 为了使 OSFP 能够用于大规模的网络,OSPF 将一个自治系统再划分成了若干个更小的范围:区域
在区域内有着不同种类的路由器
内部路由器:指所有接口都属于同一个区域的路由器;
区域边界路由器(ABR):指连接一个或多个区域到骨干区域的路由器并且这些路由器会作为域间通信量的网关。物理上至少连接两个区域。
自治系统边界路由器(ASBR):ASBR 路由器是用来把其他路由选择协议学习到的路由通过路由选择重分配的方式注入 OSPF 域的路由器。至少配置两种路由协议。
OSPF 根据能够学习到的路由种类将区域分为不同的类型,包括骨干区域、标准区域、末梢区域、完全末梢区域、非纯末梢区域等。
运行 OSPF 的整个区域属于一个 AS,AS 范围外的路由都属于外部路由。
骨干区域用于连接其他区域,骨干区域中的路由器大都是 ABR。
骨干区域 Area 0该区域的 ID 一定是 0,它是连接所有其他区域的核心,在不同的区域间传递路由信息,其他区域必须跟骨干区域直连。
标准区域能够学习到其他区域的路由;也能学习到外部路由就称为标准区域。
每个路由器都创建了由每个接口、对应的相邻节点和接口速度组成的数据库,称为链路状态数据库。
链路状态数据库中每个条目称为LSA(链路状态通告),常见的有六种 LSA 类型;
OSPF 分组
OSPF 特点
- 每隔三十分钟,要刷新一次数据库中的链路状态
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系;因此当互联网规模很大的时候,OSPF 协议要比距离向量协议 RIP好很多
- OSPF 不存在坏消息传的慢的问题,收敛速度很快
BGP 协议
- BGP 协议是外部网关协议
关于 BGP 协议:
- 和谁交换信息?与其他的 AS 的临站 BGP 发言人交换信息
- 交换内容是什么?交换的是网络可达性的信息,即:要到达某个网络所要经过的一系列 AS,也就是一个完整的路径
- 多久交换一次呢?不同于 RIP 协议,30s 更新一次,发生变化时就更新有变化的部分
BGP 协议交换信息的过程
上面我们提到过:BGP 协议交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。当发言人互相交换了网络可达性的信息之后,各BGP 发言人根据所采用的策略,从收到的路由信息中找到到达各 AS 的较好路由
BGP 协议报文格式
BGP 协议特点
- BGP 协议支持CIDR,which meas,BGP 的路由表也就应当包括:目的网络前缀、下一跳路由器、以及到达目的网络索要经过的各个自治系统序列
- 在 BGP 刚运行的时候,BGP 的邻站是交换整个的BGP 路由表。但在之后只需要发生变化的时候,更新有变化的部分这样做的好处:对节省网络带宽和减少路由器的处理开销都有好处
BGP-4 的四种报文
三种报文的比较
- RIP是一种分布式的基于距离向量的内部网关路由选择协议,通过广播UDP报文来交换路由信息
- OSPF是一个内部网关协议,要交换的信息量比较大,应该使得交换的报文尽可能的短,所以不使用传输层协议(比如 UDP/TCP),而是直接采取IP
- IP是一种外部网关协议,在不同的自治系统 AS 之间交换路由信息,由于网络的环境很复杂,需要保证可靠传输,所以采用TCP
IP
IPv4 地址
首先明白什么是 IP 地址
其实就是给网络中的主机或是主机的接口、路由器的接口赋予标识符,能够做到全球唯一化,方便互联网中寻址通信
由两部分组成:网络号 + 主机号
顾名思义,网络号呢 就是用于确认在哪个区域网络,主机号用于确定该区域内哪个主机
通常采用点分十进制
ip 地址的四段数字分别代表了:网络类型、网络范围、网络位和主机位
在下图中,我们不难发现,红色区域和绿色区域内的网络位相同,总共有 6 个实际上的网络,只是绿色部分不是由主机,是由线路形成的
也不难发现,一个路由器,它的主机位是一样的,但是可以连接多个网络位
分类的 IP 地址
A 类中为什么是 2^7 - 2 呢?因为第一位固定 0,因此可用的是 7 位,而减 2 是刨除了全 0 以及网络号为 127 这种情况
主机数为什么也要减 2 呢,一个是主机号为全 0 情况,一个是主机号为全 1 情况
同理也可以推出下面-1,-2 的意思
特殊的 IP 地址
特殊主要是体现在,网络号和主机号上,如果其全为 0 或是全为 1,那么代表着什么呢?
(前三位是网络号,第四位是主机号)
私有 IP 地址
前面我们学习了 IP 地址分类,有 A、B、C…类等等
根据类别不同就有了私有 IP 地址了,因为根据地址的类别,可以划分地址范围因而可以设定网段的个数
为什么 A 类最大是 126.xxx.xxx.xxx?
因为网络号最开始第一位是 0,一共八位,所以二进制表示位 0xxxxxxx,最大就是 2^7-1=127,但是因为 127.xxx.xxx.xxx 是特殊 ip 地址,所以将其去掉
为什么 B 类最大是 191.255.xxx.xxx?
因为网络号最开始第一位是 10,一共八位,所以二进制表示位 10xxxxxx,最大就是 10111111=191,最小就是 10000000=128,无特殊 ip 地址
为什么 C 类最大是 223.255.xxx.xxx?
因为网络号最开始第一位是 110,一共八位,所以二进制表示位 110xxxxx,最大就是 11011111=223,最小就是 10000000=192,无特殊 ip
IPv4 数据报格式
网络层的分组为数据报,数据报为首部和数据两部分组成,如下图所示。
首部的长度是以4 个字节为单位,长度可以是20-60字节,这跟首部的 HLEN 字段有关。
版本:
这个 4 位字段定义了 IP 协议的版本,目前主流的版本是 4。
首部长度:
这个 4 位字段定义了数据报首部的长度,以4 字节的字为单位。
当首部没有选项时,首部长度位20 字节;当这个字段值位最大值 F 时,首部长度最大为 60 字节。
服务类型:
总长度:
这个 16 位字段定义了数据报总长度,其以字节为单位。故 IPv4 数据报总长度上限值位65536 字节。
注:为什么需要这个字段?在许多情况下,我们确实不需要这个字段值。但是有些情况下,封装在一个帧里的并不仅仅是数据报,还可能附加了一些填充。比如,以太网协议对帧的数据有最大值(1500 字节)和最小值(46 字节)的限制,当数据小于 46 字节时,数据将含有填充数据。
标识(identification):
这个 16 位字段标志了从源主机发出的一个数据报,这样就确定了数据报的唯一性。这样使得数据报被分片后,在到达终点时终点能根据标识号将同一个数据报的分片重新组装成一个数据报。
标志(flag):
D | M | |
---|---|---|
第一位保留(未用),第二位为“不分片(do not fragment)”,第三位位“还有分片(more fragment)”。
D 为 1 时,不能对数据进行分片;为 0 可以进行分片。
M 为 1 时,标识还有分片;为 0 表示最后一个分片。
片偏移:
这个 13 位字段表示的是分片在整个数据报中的相对位置。这是数据在原始数据报中的偏移量,以8 字节位单位。
注:分片本身还可能进行分片,这种情况下,分片偏移值永远是相对于原始数据报的。
生存时间:
这个 8 位字段用来控制数据报所经过的最大跳数(路由器),每经过一个路由器,这个字段数值都减 1,减 1 后变位 0 时,路由器就丢弃这个数据报。
协议:
这个 8 位字段定义了使用 IPv4 服务的高层协议,如 TCP,UDP,ICMP,IGMP,OSPF 等的数据都将被封装到 IP 数据报中。这个字段指明数据报必须交付给哪个最终目的协议。
注:1 表示 ICMP,2 表示 IGMP,6 表示 TCP,17 表示 UDP,89 表示 OSPF
检验和:
检验 IP 数据报首部。
源地址:
定义了源点的 IP 地址,这个字段始终保持不变。
目的地址:
定义了终点的 IP 地址,这个字段始终保持不变。
网络地址转换 NAT
网络地址转换 NAT 有什么用呢?之前我们学习到私有 IP 地址这个概念
我们知道:路由器对于目的地址是私有 IP 地址的数据报一律不进行转发,那假如我处于私有 IP 地址,我怎么与外界进行通信呢?
就要通过网络地址转换 NAT这个技术了
在 NAT 技术中,通过 NAT 转换表,把源 IP 地址转换成NAT 路由器的 IP 地址,原来的端口号替换成NAT 路由器的端口号,就能够在因特网中进行转发了
而外部因特网想与专用网通信也是同样道理,数据报填上:源 IP 地址,目的地址(这个时候目的地址就得填 NAT 路由器的 IP 地址了),端口号;
经由 NAT 路由器查找对应的 WAN 端找到 LAN 端的端口号,进而找到对应主机
子网划分和子网掩码
为什么要有子网划分呢?肯定是因为之前的分类的 IP 地址不够好
主要有以下两点缺点:
- IP 地址空间的利用率有时候会很低
- 两级 IP 地址不够灵活(网络号+主机号)
子网划分
子网划分主要就是把:主机号中高位数换成了子网号,剩下依旧表示主机号
子网划分的意义是什么呢?是为了增加子网的数量,而子网之间数据传输又需要经由路由器,因此最终目的是减少了广播域的大小
同时,划分子网由于子网号占用主机号位,因此会减少主机的数量;
划分子网仅仅只提高了 IP 地址的利用率,并不会增加网络的数量
下面是一个子网划分的例子:
子网掩码
子网掩码有什么用呢?是用于和 IP 地址一起计算子网的地址的
方法:子网掩码由 1 组成,与原来的 ip 地址进行与运算,即可得到子网的 IP 地址
我感觉子网掩码部分需要记住的知识点就是十进制转二进制,然后找一下对应的属于哪一类网,然后看看对应网有什么性质,做题这样。
然后根据子网掩码和 ip 地址算子网地址,一个是通过与运算算出来子网地址之后,又要求广播地址
那么这个时候广播地址是基于子网地址的嘛,就在子网地址的基础上,分清楚主机号网络号,把主机号置为 1 就是广播地址
主机地址范围就是在子网地址的基础上:
最小值是主机号全为 0 的二进制数+1,最大值是主机号全为 1 的二进制数 - 1
用 IP 的术语来说,互联这三个主机接口与一个路由器接口的网络形成一个子网。
(在因特网文献中,子网也称为 IP 网络或直接成为网络)Ip 编址为这个子网分配一个地址:233.1.1.0/24,其中的/24 记法,有时称为子网掩码(networkmask),指示了 32 比特中的最左侧 24 比特定义了子网地址。
通俗来讲,子网掩码用来指明一个 IP 地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
子网掩码不能单独存在,它必须结合 IP 地址一起使用。子网掩码只有一个作用,就是将某个 IP 地址划分成网络地址和主机地址两部分。
子网掩码是一个 32 位地址,用于屏蔽 IP 地址的一部分以区别网络标识和主机标识,并说明该 IP 地址是在局域网上,还是在远程网上。
子网掩码——屏蔽一个 IP 地址的网络部分的“全 1”比特模式。
- 对于A类地址来说,默认的子网掩码是255.0.0.0;
- 对于B类地址来说默认的子网掩码是255.255.0.0;
- 对于C类地址来说默认的子网掩码是255.255.255.0;
那么通过子网掩码我们可以知道什么信息呢?
PLAINTEXT
| 1
2
| 通过子网掩码,就可以判断两个IP在不在一个局域网内部。
子网掩码可以看出有多少位是网络号,有多少位是主机号
| | —- | —- |
子网掩码习题
通过用 IP 地址 与 子网掩码进行与运算(相同为 1,不同为 0)得到网络地址
对于此类题,首先要判断出网络号有多少位:255.255.252.0 有 8 + 8 + 6 = 22 位的网络号 则后面的 32 - 22 = 10 位是主机号
180.80.77.55 解析 —— 可以知道在 77 部分某部分开始会用来表示主机号位
子网掩码前面是 255.255 则 180.80 能保留下来 也就是占有 8 + 8 = 16 位,我们已知有 22 位的网络号,则留给 IP 地址 180.80.77.55 第三位77来构成网络号的就有 6 位,77 二进制:010011 01,则前 6 位是归于网络号,后面 01 开始为主机号
则用于表示子网 ip 地址的就是180.80.76(010011 00).xxx
本体要求是发布广播地址 —— 主机号全为 1
则目的地址应该是180.80.79(010011 11).255(11111111) 选 D
使用子网的时候分组的转发
当使用子网的时候分组转发分以下几步:
- 从收到的分组首部提取目的 IP 地址 D
- 首先用各相邻网络的子网掩码和目的 IP 地址 D逐位相与,看是否和相应的网络地址匹配。如果匹配了,就把分组直接交付了。否则进行间接交付,也就是执行 3
- 若路由表中有目的地址为 D 的特定主机路由,就把分组传送给指明的下一跳路由器;如果没有,则执行 4
- 在这一步,对路由表中的每一行,将子网掩码和 D 逐位相与。如果结果和该行的目的地址匹配,就把分组传送给该行指明的下一跳路由器否则,执行 5
- 如果路由表中有一个默认路由。就把分组传送给路由表中指明的默认路由器否则,执行 6
- 报告转发分组出错
无分类编制 CIDR
有个博客讲的真的不错:https://blog.csdn.net/dan15188387481/article/details/49873923
- CIDR 中文全称是无分类域间路由选择,英文全称是 Classless Inter-Domain Routing
- CIDR 这种方法比较灵活,消除了传统 A B C 类以及划分子网的概念
使用下面的 IP 地址表示法:
IP地址 ::= {<网络前缀>, <主机号>} / 网络前缀所占位数
- 融合了子网地址和子网掩码,方便子网划分
CIDR 表示法给出任何一个 IP 地址,就相当于给出了一个 CIDR 地址块,这是由连续的 IP 地址组成的,所以 CIDR 表示法构成了超网,实现了路由聚合,即从一个 IP 地址就可以得知一个 CIDR 地址块。
例如:已知一个 IP 地址是:128.14.35.7/20,那么这个已知条件告诉大家的并不仅仅是一个 IP 地址这么简单,我们来分析一下。
128.14.35.7/20 = 10000000 00001110 00100011 00000111
即前 20 位是网络前缀,后 12 位是主机号,那么我们通过令主机号分别为全 0 和全 1 就可以得到一个 CIDR 地址块的最小地址和最大地址,即
最小地址是:128.14.32.0 = 10000000 00001110 00100000 00000000
最大地址是:128.14.47.255 = 10000000 00001110 00101111 11111111
子网掩码是:255.255.240.0 = 11111111 11111111 11110000 00000000
因此就可以看出来,这个 CIDR 地址块可以指派(47-32+1)*256=4096 个地址,这里没有把全 0 和全 1 除外。
构成超网/路由聚合
- 基本概念:将多个子网聚合成一个较大的子网,就叫做构成超网或是路由聚合
如下图中网络 1 和网络 2 的前 16 位都是一样的,因此可以聚合成一个网络
方法就是:网络前缀缩短
最长前缀匹配
使用缩短前缀这种方法,转发表会有多个匹配结果,因此使用最长前缀匹配
前缀越长,地址块越小,那么所留下的范围就很小,路由就非常具体了
取/n 的意思:就是目的网络中 n 位表示网络号,被截取的那部分剩下用 0 补充的意思
例题:
这道题可以理解成前 24 为为一个网络号,后面 8 为取出一部分作为子网号,其他作为主机号
那么就看子网掩码号的248,二进制是 11111 000,则前 5 位可作为子网号,后 3 位作为主机号;
那么最大子网个数就是前五位都充分利用起来:2^5 = 32
而每个子网内最大可分配地址个数就是根据主机号来的:2^3 - 2 = 6
为什么要减去 2 呢,因为不能用全 0 全 1 两种情况
ARP 协议
发送数据的过程
应用层传一个文件 → 传输层拆分成报文段(传输单元)→ 网络层将传输层的报文段加源主机和目的主机 IP 地址还有一些其他信息 → 数据链路层封装 加上 MAC 地址(源和目的 MAC 地址)→ 物理层
在上述过程中有个问题,我怎么知道目的 MAC 地址呢?就是根据 ARP 高速缓冲得到的,它其中有 IP 地址与 MAC 地址的映射
下图中 1 → 3 主机 (在一个网段内的请求)
假如没有映射呢 那就得根据ARP 协议:首先广播一个ARP 请求分组(包含源和目的 IP 地址以及源 MAC 地址以及全 1 的目的 MAC 地址 来达到广播的作用)
而后目标主机收到了请求,回应一个单播 ARP 响应分组(包括目的主机的 IP 地址和 MAC 地址)给源主机,这样数据链路层就有了目的主机的 MAC 地址了;
假设 1 → 5 (不在一个网段内请求)
此时大体流程相似,但是广播 ARP 请求分组要的是 IP6,也就是默认网关 IP6 的 MAC 地址
后续的路由器也是这样操作,源 MAC 和目的 MAC 地址一直在变换,直到要到了 5 号主机的 MAC 地址为止
ARP 协议
- ARP 协议:完成了主机或路由器 IP 地址到MAC 地址的映射解决了下一跳走哪的问题
DHCP 协议
- 主机是如何获取 IP 地址的呢?
通常有两种方式:静态配置 和 动态配置
而动态配置中就需要用到 动态主机配置协议 DHCP
这是一种应用层协议,使用客户/服务器方式,客户端和服务端通过广播方式进行交互,是基于UDP的
它提供了一种即插即用联网的机制,主机可以从服务器动态获取IP 地址、子网掩码、默认网关、DNS 服务器名称以及 IP 地址,
- 它允许地址重用(什么意思呢?DHCP 服务器有一个 IP 地址池,有很多 IP 地址,主机进来后,HDCP 分配一个地址给它用,主机走后就回收,达到一个地址重用的效果)
- 支持移动用户加入网络
- 支持在用地址续租(有时间性的分配一个地址,这段时间内叫租用期,时间过了后也可以续租继续用 IP 地址)
ICMP 协议
ICMP 与 IGMP 是 IP 层协议 位于网络层与传输层之间,起桥梁作用,能够有效转发 IP 数据报和提高交互成功机会
- ICMP(Internet Control Message Protocol)Internet 控制报文协议
ICMP 差错报文
ICMP 差错报告报文数据字段
5 种 ICMP 差错报告报文
主要分成五种:
- 终点不可达
- 源点抑制(已经废除了)
- 时间超过
- 参数问题
- 改变路由(重定向)
不应该发送 ICMP 差错报文情况
- 对ICMP 差错报告报文不再发送 ICMP 差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送 IMCP 差错报告报文
- 对具有组播地址的数据报都不发送 ICMP 差错报告报文
对具有特殊地址(比如 127.0.0.0 or 0.0.0.0)的数据报不发送 ICMP 差错报告报文
ICMP 询问报文
4 种 ICMP 询问报文
主要分为:
回送请求和回答报文
- 时间戳请求和回答报文
- 掩码地址请求和回答报文(已废除)
- 路由器询问和通告报文(已废除)
ICMP 应用
IPv6
为什么要有 IPv6 呢?因为我们的 IPv4 快用完了,虽然说有 CIDR 和 NAT 两门技术延缓了地址资源的不足,但是是治标不治本的,因此有了 IPv6
同时还能趁机改进首部格式,让路由器能够快速处理/转发数据报
IPv6 数据报格式
- 版本:指明了版本协议,总是为 6
- 优先级:区分数据报的类别的优先级
- 流标签:有点类似与 IPv4 中的标识位的意思。首先需要明白流是什么,流是互联网络上从特定源点到特定终点的一一系列数据报。所有属于同一个流的数据报都具有相同的流标签
- 有效载荷长度:有效载荷长度的大小,也就是扩展首部+数据的大小
- 下一个首部:标识下一个扩展首部或是上层协议首部
- 跳数限制:IPv4 的 TTL,也就是生存时间,到 0 就会被丢弃
- 源地址:不同于 IPv4 的源地址(32 位),这里足足有 128 位,表示发送端的 IP 地址。
- 目的地址:不同于 IPv4 的目的地址(32 位),这里有 128 位,表示接收端 IP 地址。
- 标识符、标志和比特偏移:IPv6 不允许在中间路由器上进行分片和重新组装。这种操作只能在端系统上进行,IPv6 将这个功能放在端系统中,加快了网络中的转发速度。
- 首部校验和:因为在运输层和数据链路执行了报文段完整性校验工作,IP 设计者大概觉得在网络层中有首部校验和比较多余,所以去掉了。IP 更多专注的是快速处理分组数据。
- 选项字段:选项字段不再是标准 IP 首部的一部分了,但是它并没有消失,而是可能出现在 IPv6 的扩展首部,也就是下一个首部中。
IPv6 与 IPv4
IPv6 地址表示形式
一般使用冒泡十六进制记法:4 个为一组,一共有 8 组,每组之间用冒号隔开
还能用压缩形式,将 0000 的压缩成 0,00xx 压缩成 xx,000x 压缩成 x
还有零压缩形式:将一连串连续的 0 用一堆冒号取代
IPv6 基本地址类型
| 名称 | 作用 | 要求 | | —- | —- | —- | | 单播 | 一对一通信 | 可做源地址,目的地址 | | 多播 | 一对多通信,以前的广播地址当做覆盖所有主机的多播 | 可做目的地址 | | 任播 | 一对多当中的一个通信,看似一对多,实则一对一 | 可做目的地址 |
IPv6 向 IPv4 过渡的策略
现在大部分还在使用 IPv4,但我一个应用 IPv6 的协议的数据报怎么向只采取了 IPv4 协议的设备交流呢?
使用:双栈协议、隧道技术
隧道技术
现在已经在实践中使用的从 IPv4 迁移到 IPv6 的方法是 隧道技术(tunneling)。
什么是隧道技术呢?
隧道技术是一种使用互联网络的基础设施在网络之间的传输数据的方式,使用隧道传递的数据可以是不同协议的数据帧或包。使用隧道技术所遵从的协议叫做隧道协议(tunneling protocol)。隧道协议会将这些协议的数据帧或包封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络进行传递。
使用隧道技术一般都会建一个隧道,建隧道的依据如下:
比如两个 IPv6 节点(下方 B、E)要使用 IPv6 数据报进行交互,但是它们是经由两个 IPv4 的路由器进行互联的。那么我们就需要将 IPv6 节点和 IPv4 路由器组成一个隧道,如下图所示
借助于隧道,在隧道发送端的 IPv6 节点可将整个 IPv6 数据报放到一个 IPv4 数据报的数据(有效载荷) 字段中,于是,IPv4 数据报的地址被设置为指向隧道接收端的 IPv6 的节点,比如上面的 E 节点。然后再发送给隧道中的第一个节点 C,如下所示
隧道中间的 IPv4 提供路由,路由器不知道这个 IPv4 内部包含一个指向 IPv6 的地址。隧道接收端的 IPv6 节点收到 IPv4 数据报,会确定这个 IPv4 数据报含有一个 IPv6 数据报,通过观察数据报长度和数据得知。然后取出 IPv6 数据报,再为 IPv6 提供路由,就好像两个节点直接相连传输数据报一样。
移动 IP
相关术语
- 移动 IP 技术是移动结点(计算机\服务器等)以固定的网络 IP 地址,实现跨越不同网段的漫游功能,并保证了基于网络 IP的网络权限在漫游过程中不发生任何改变which means:当你的手机在漫游时,虽然人在 B 地,IP 却是 A 地购买手机卡的运营商提供的 IP。于是当你在 B 地手机(用蜂窝网)、电脑同时登陆 QQ 时经常会提示异地登陆
- 移动结点:具有永久 IP 地址的移动设备
- 归属代理(本地代理):一个移动结点拥有的就居所称为归属网络,在归属网络中代表移动节点执行移动管理功能的实体叫做g 归属代理
- 外部代理(外地代理):在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理
- 永久地址(归属地址/主地址):移动结点在归属网络中的原始地址
- 转交地址(辅地址):移动结点在外部网络使用的临时地址
通信过程
相关博客:https://blog.csdn.net/gzxultra/article/details/45649083
其实可以理解成 A 有事出去了,但碰巧 B 找 A,这个时候由于本地代理知道 A 在哪,就能把消息转交给他
过程:
- 移动节点在本地时,按传统的 TCP/IP 方式进行通信(在本地网固有地址)
- 移动节点漫游到一个外地网络时,仍然使用固定的 IP 地址进行通信。为了能收到通信对端发给他的 IP 分组,移动节点需要向本地代理注册当前的位置地址,这个未知地址就是转交地址(它可以是外部代理地址或动态分配的地址)ps:可以理解成儿子要出远门了,告诉妈妈,有人找我就联系 xxx 这个地方就好,至于到底 xxx 是什么,我到了那个地方再告诉你。
- 本地代理接收到来自转交地址的注册后,会构建一条通往转交地址的隧道,将截获的发给移动节点的 IP 分组送到转交地址处。
- 在转交地址处解除隧道封装,恢复原始的 IP 分组,最后送到移动节点处,这样移动节点在外网就能收到这些发送给他的 IP 分组了。
- 移动节点在外网通过外网的路由器或者外代理向本地发送 IP 数据包。
- 当移动节点来自一个外网时,只需要向本地代理更新注册的转交地址,就可以继续通信。这里就是第二步的,告知妈妈:哦,我这边的地址是 xxx
- 当移动节点回到本地网络,移动节点向本地代理注销转交地址,这时移动节点又将使用传统的 TCP/IP 方式进行通信
为什么漫游收费贵呢?因为移动 IP 需要给你的设备分配两个 IP 地址(主地址和辅地址(转交地址)),并且需要完成这个转交工作。而各地区的运营商是独立运营的。
网络层设备
路由器
技术参考:https://mp.weixin.qq.com/s/HpxpLgpltOzNrtnFBaP8SA
- 路由器是一种具有多个输入端口和多个输出端口的专用计算机,任务是:转发分组
- 每个路由器维护一个路由表,来决定分组的转发,为了提高路由表的查询效率并且减少路由表维护的内容,路由表只保留到达目的地址的下一个路由器的 IP 地址,而不保留整个传输路径的信息
- 转发与路由选择的区别
- 转发是在路由器内部,把一个分组由一个输入端口转发到另一个输出端口
- 路由选择是比较宏观的了,是在路由器组之间,选择一个合适的路径,把一个信息从源主机发送到目的主机
- 输入端口:输入端口(input port)有很多功能。线路终端功能和数据链路处理功能,这两个功能实现了路由器的单个输入链路相关联的物理层和数据链路层。输入端口查找/转发功能对路由器的交换功能来说至关重要,由路由器的交换结构来决定输出端口,具体来讲应该是查询转发表来确定的。
- 交换结构:交换结构(Switching fabric)就是将路由器的输入端口连接到它的输出端口。这种交换结构相当于是路由器内部的网络。
- 输出端口:输出端口(Output ports) 通过交换结构转发分组,并通过物理层和数据链路层的功能传输分组,因此,输出端口作为输入端口执行反向数据链接和物理层功能。
- 路由选择处理器:路由选择处理器(Routing processor) 在路由器内执行路由协议,维护路由表并执行网络管理功能。
输入端口对线路上收到的分组的处理
从线路那接收到了分组,分别交由物理层、数据链路层和网络层进行处理
其中网络层这块进行分组排队,并进行查表和转发,最后发送至交换结构
每个输入端口中都有一个路由处理器维护的路由表的副本,根据路由处理器进行更新。这个路由表的副本能 够使每个输入端口进行切换,而无需经过路由处理器统一处理。这是一种分散式的切换,这种方式避免了路 由选择器统一处理造成转发瓶颈。
在输入端口处理能力有限的路由器中,输入端口不会进行交换功能,而是由路由处理器统一处理,然后根据 路由表查找并将数据包转发到相应的输出端口。
交换结构
交换结构是路由器的核心功能,通过交换功能把分组从输入端口转发至输出端口,这就是交换结构的主要功能。交换结构有多种形式,主要分为 通过内存交换、通过总线交换、通过互联网络进行交换,下面我们分开来探讨一下。
- 经过内存交换:最开始的传统计算机就是使用内存交换的,在输入端口和输出端口之间是通过 CPU 进行的。输入端口和输出端口的功能就好像传统操作系统中的 I/O 设备一样。当一个分组到达输入端口时,这个端口会首先以中断 的方式向路由选择器发出信号,将分组从输入端口拷贝到内存中。然后,路由选择处理器从分组首部中提取目标地址,在转发表中找出适当的输出端口进行转发,同时将分组复制到输出端口的缓存中。
这里需要注意一点,如果内存带宽以每秒读取或者写入 B 个数据包,那么总的交换机吞吐量(数据包从输入端口到输出端口的总速率) 必须小于 B/2。
经过总线交换:在这种处理方式中,总线经由输入端口直接将分组传送到输出端口,中间不需要路由选择器的干预。总线的工作流程如下:输入端口给分组分配一个标签,然后分组经由总线发送给所有的输出端口,每个输出端口都会判断标签中的端口和自己的是否匹配,如果匹配的话,那么这个输出端口就会把标签拆掉,这个标签只用于交换机内部跨越总线。如果同时有 多个 分组到达路由器的话,那么只有一个分组能够被处理,其他分组需要再进入交换结构前等待。
经过互联网络交换:克服单一、共享式总线带宽限制的一种方法是使用一个更复杂的互联网络。如下图所示
每条垂直的的总线在交叉点与每条水平的总线交叉,交叉点通过交换结构控制器能够在任何时候开启和闭合。当分组到达输入端口 A 时,如果需要转发到端口 X,交换机控制器会闭合 A 到 X 交叉部分的交叉点,然后端口 A 在总线上进行分组转发。这种网络互联式的交换结构是 非阻塞的(non-blocking)的,也就是说 A -> X 的交叉点闭合不会影响 B -> Y 的链路。如果来自两个不同输入端口的两个分组其目的地为相同的输出端口的话,这种情况下只能有一个分组被交换,另外一个分组必须进行等待。
输出端口将交换结构传送来的分组发送到线路
输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上。包括选择和去除排队的分组进行传输,执行所需的链路层和物理层的功能。
缓存管理其实就是维护一个队列
在输入端口中有等待进入交换的排队队列,而在输出端口中有等待转发的排队队列,排队的位置和程度取决于流量负载、交换结构的相对频率和线路速率。
随着队列的不断增加,会导致路由器的缓存空间被耗尽,进而使没有内存可以存储溢出的队列,致使分组出现丢包(packet loss),这就是我们说的在网络中丢包或者被路由器丢弃。
路由表和路由转发
路由表是根据路由选择算法得出的,主要用途是路由选择,总用软件进行实现
- 路由表总会和转发表弄混
转发表是由路由表得来的,可用软件实现,也可以用特殊的硬件来实现。转发表必须包含完成转发功能所必须的信息,在转发表的每一行都必须包含:从要到达的目的网络到输出端口和某些 MAC 地址信息的映射
路由表主要是选择我下一跳要走哪个路由器,或是下一个 IP 地址应该走什么
路由器 网桥 集线器
传输层
传输层概述
功能概述
网络层是把数据从一个主机传送到另一个主机,但是并没有与进程建立联系
而传输层就是将进程与所收到的数据联系到一起,让数据能够用到应用上
- 因此说 网络层提供:主机之间的逻辑通信,while 传输层提供:进程和进程之间的逻辑通信
- 传输层还能够进行:复用和分用
- 复用:应用层所有的的应用进程都可以通过传输层再传输到网络层就是把多个进程的数据使用同一个传输层协议进行传输
- 分用:传输层从网络层收到数据后交付给指明的应用进程就是把接收过来的报文传送给对应的进程
- 传输层对收到的报文进行差错检测
-
寻址与端口
之前说到了复用分用,那么这两个与进程是有着一定关系的,说到进程,就要想到主机中应用进程肯定有标识符
这就是端口,用于标识主机中的应用进程
端口号按照范围分有两种:一种是服务端使用的端口号,另一种是客户端使用的端口号 服务端使用的端口号
- 熟知端口号:给 TCP/IP 最重要的一些应用程序,让所有用户都知道(0~1023)
- 登记端口号:为没有熟知端口号的应用程序使用(1024~49151)
一些重要的熟知端口号:
应用进程 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
---|---|---|---|---|---|---|---|
熟知端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 |
- 客户端使用的端口号:仅仅在客户进程运行才动态选择的端口号,客户进程结束后就收回(49152~65535)
同时我们还需要知道:在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中一个主机和它上面的一个进程
套接字Socket = (主机IP地址, 端口号)
传输层协议
UDP
- UDP 是无连接的
- UDP 使用尽最大努力交付,就是不保证可靠交付,因此主机是不需要维持复杂的连接状态表的
- UDP 是面向报文的,什么意思呢?因此,应用程序必须选择合适的报文:如果太长了,UDP 发送给 IP 层后,IP 层还得进行分片,影响效率;如果太短了,UDP 发送给 IP 层后,IP 数据报的首部相对长度也会太长,也降低了 IP 层效率
- 发送方UDP 对于应用程序发下来的报文,仅添加首部后就向下交付给了IP 层
- UDP 对于应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界which means,应用层交给 UDP 多长报文,UDP 就照样发送,也就是一次发一个完整报文
- UDP 没有拥塞控制,网络出现的拥塞并不会使得源主机的发送速率降低(适用于实时应用:视频会议、IP 电话)
- UDP 支持一对一、一对多、多对一和多对多的交互通信
- UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短
UDP 首部格式
用户 UDP 有 2 个字段:数据字段和首部字段
首部字段由 8 个字节,4 个字段组成(每个字段长度为 2 字节)
- 源端口:源端口号,在需要对方回信的时候选用,不需要的时候可设置成全 0
- 目的端口:目的端口号,在终点交付报文时使用
- 长度:UDP 用户数据报的长度,最小值为 8
- 检验和:检验 UDP 和用户数据报在传输的时候是否有错,有错就丢弃
运输层从 IP 层收到 UDP 数据报,根据首部中目的端口,把 UDP 数据报通过相应端口,上交到最后终点:应用进程
如果接收方 UDP 发现收到的报文中的目的端口号错的(没有这个端口号对应着的应用程序),就丢弃,并有 ICMP 发送端口不可达差错报文给发送方
ps:UDP 通信为无连接通信,不需要使用套接字(while TCP 通信就必须在两个套接字间建立连接)
UDP 校验
UDP 校验需要用到伪首部
叫做伪首部,就证明并不是 UDP 用户数据报的真正首部了,伪首部既不向下传送也不向上递交,仅仅为了计算检验和
计算方法:
TCP
- TCP 是面向连接的传输层协议:应用程序在使用 TCP 协议前,必须先建立 TCP 连接;传送数据完毕后,必须释放已经建立的 TCP 连接像是在打电话:通话前拨号建立连接,通话结束后挂机释放连接
- 每一条 TCP 连接只能有两个端点:每一条 TCP 连接只能是点对点的
- TCP 提供可靠交付的服务:通过 TCP 连接传送的数据 —— 无差错,不丢失,不重复且按序到达
- TCP 提供全双工通信:TCP 允许通信双方的应用程序在任何时候都能发送数据,因此 TCP 连接的两端设立了发送缓存和接受缓存。
- 发送缓存:存储准备发送的数据和已经发送但尚未收到确认的数据
- 接收缓存:存储按序到达但尚未被接受应用程序读取的数据和不按序到达的数据
- TCP 面向字节流:首先要明白流是什么:是指流入到进程或从进程流出的字节序列。面向字节流的意思是:TCP 把应用程序交下来的数据仅看成是一连串的无结构的字节流
TCP 报文段首部格式
技术参考:https://blog.csdn.net/qq_32998153/article/details/79680704
- TCP 报文段分别两部分:首部 + 数据
首部固定部分各字段意义如下:
1) 源端口和目的端口 各占 2 个字节,分别写入源端口和目的端口。
2) 序号 seq 占 4 字节。序号范围是【0,2^32 - 1】,共 2^32(即 4294967296)个序号。 序号增加到 2^32-1 后,下一个序号就又回到 0。也就是说,序号使用 mod 2^32 运算。TCP 是面向字节流的。在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则是指的是本报文段所发送的数据的第一个字节的序号。
例如,一报文段的序号是 301,而接待的数据共有100 字节。这就表明:本报文段的数据的第一个字节的序号是 301,最后一个字节的序号是400。显然,下一个报文段(如果还有的话)的数据序号应当从 401开始,即下一个报文段的序号字段值应为 401。这个字段的序号也叫“报文段序号”。
3) 确认号 占 4 字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B 正确收到了 A 发送过来的一个报文段,其序号字段值是 501,而数据长度是 200 字节(序号 501~700),这表明 B 正确收到了 A 发送的到序号 700 为止的数据。因此,B 期望收到 A 的下一个数据序号是 701,于是 B 在发送给 A 的确认报文段中把确认号置为 701。注意,现在确认号不是 501,也不是 700,而是 701。
总之:若确认号为= N,则表明:到序号 N-1 为止的所有数据都已正确收到。
4) 数据偏移 占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。这个字段实际上是指出 TCP 报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的,但应注意,“数据偏移”的单位是 32 位字(即以 4 字节的字为计算单位)。由于 4 位二进制数能表示的最大十进制数字是 15,因此数据偏移的最大值是 60 字节,这也是 TCP 首部的最大字节(即选项长度不能超过 40 字节)。
5) 保留 占 6 位,保留为今后使用,但目前应置为 0 。
下面有 6 个控制位,用来说明本报文段的性质。
6) 紧急 URG(URGent) 当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快发送(相当于高优先级的数据),而不要按原来的排队顺序来传送(就可以插队了)。例如,已经发送了很长的一个程序要在远地的主机上运行。但后来发现了一些问题,需要取消该程序的运行,因此用户从键盘发出中断命令。如果不使用紧急数据,那么这两个字符将存储在接收 TCP 的缓存末尾。只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程。这样做就浪费了很多时间。
当 URG 置为 1 时,发送应用进程就告诉发送方的 TCP 有紧急数据要传送。于是发送方 TCP 就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍然是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。
7) 确认值 ACK(ACKnowledgment) 仅当ACK = 1 时确认号字段才有效,当 ACK = 0 时确认号无效。TCP 规定,在连接建立后所有的传送的报文段都必须把 ACK 置为 1。
ps:大写 ACK 是确认值,确认位的意思;小写 ack 是确认编号,即接收到的上一次远端主机传来的 seq 然后+1,再发送给远端主机。提示远端主机已经成功接收上一次所有数据。
8) 推送 PSH(PuSH) 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP 就可以使用推送(push)操作。这时,发送方 TCP 把 PSH 置为 1,并立即创建一个报文段发送出去。接收方 TCP 收到PSH=1的报文段,就尽快地(即“推送”向前)交付接收应用进程。而不用再等到整个缓存都填满了后再向上交付。
9) 复位 RST(ReSeT) 当RST=1时,表名 TCP 连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。RST 置为 1 还用来拒绝一个非法的报文段或拒绝打开一个连接。
10) 同步 SYN(SYNchronization) 在连接建立时用来同步序号。当SYN=1 而 ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1 和 ACK=1,因此 SYN 置为 1 就表示这是一个连接请求或连接接受报文。
11) 终止 FIN(FINis,意思是“完”“终”) 用来释放一个连接。当 FIN=1 时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。
12) 窗口 占 2 字节。窗口值是【0,2^16-1】之间的整数。窗口指的是发送本报文段的一方的接受窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。
例如,发送了一个报文段,其确认号是 701,窗口字段是 1000.这就是告诉对方:“从 701 算起,我(即发送方报文段的一方)的接收缓存空间还可接受 1000 个字节数据(字节序号是 701~1700),你在给我发数据时,必须考虑到这一点。”
总之:窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化。
13) 检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。和 UDP 用户数据报一样,在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。伪首部的格式和 UDP 用户数据报的伪首部一样。但应把伪首部第 4 个字段中的 17 改为 6(TCP 的协议号是 6);把第 5 字段中的 UDP 中的长度改为 TCP 长度。接收方收到此报文段后,仍要加上这个伪首部来计算检验和。若使用 TPv6,则相应的伪首部也要改变。
14) 紧急指针 占 2 字节。紧急指针仅在 URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据) 。因此,在紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP 就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为 0 时也可以发送紧急数据。
15) 选项 长度可变,最长可达 4 字节。当没有使用“选项”时,TCP 的首部长度是 20 字节。
TCP 最初只规定了一种选项,即最大报文段长度 MSS(Maximum Segment Szie)。注意 MSS 这个名词含义。MSS 是每一个 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。所以 MSS 并不是整个 TCP 报文段的最大长度,而是“TCP 报文段长度减去 TCP 首部长度”。
TCP 连接管理
TCP 连接传输分为三个阶段:
- 连接建立
- 数据传送
- 连接释放
TCP 连接的建立采用客户服务器方式。
客户:主动发起连接建立的应用进程
服务器:被动等待连接建立的应用程序
TCP 连接过程 三次握手
假设主机 A 运行 TCP 客户程序,B 运行 TCP 服务器程序,连接过程是这样的:
- A 的 TCP 客户进程首先创建传输控制模块 TCB,此时,打算建立 TCP 连接的时候,向 B 发出连接请求报文段这个时候首部的同步位 SYN = 1,同时选择一个初始序号 seq = x。SYN 报文段(即 SYN = 1 的报文段)不能携带数据,但会消耗一个序号。这个时候,TCP 客户进程进入了SYN-SENT(同步已发送)状态
- B 收到连接请求报文段后,如果同意建立连接,就向 A 发送确认。在确认报文段中同步位 SYN 和确认值 ACK = 1,然后确认编号 ack = x +1,同时选择一个初始序号 seq = y。此报文段也不能携带数据,但需要消耗一个序号。TCP 服务器进程进入SYN-RCYD(同步收到)状态
- TCP 客户进程收到 B 的确认之后,需要向 B 给出确认。确认报文段的 ACK = 1,确认编号 ack = y + 1,自己的序号 seq = x + 1这个时候,TCP 连接已经建立了,A 进入了ESTABLISHED(已建立连接)状态
SYN 洪泛攻击
TCP 连接释放 四次挥手
第一段的意思是
FIN=1:(A)要释放连接了!
seq=u:发了好多数据,这里只是用 u 指代一下,这里 u 是有确定值的
第二段的意思是
ACK=1:连接建立了,之后的 ACK 必须都置为 1
seq=v:发了好多数据,这里只是用 v 指代一下,这里 v 是有确定值的
ack=u+1:之前发送方(A)说发送的是第 u 位数据,所以我(B)要的是 u+1 位数据(尽管此时 A 已经决定释放连接了)
第三段的意思是
FIN=1:(B)要释放连接了!
ACK=1:连接建立了,之后的 ACK 必须都置为 1
seq=w:发了好多数据,这里只是用 w 指代一下,这里 w 是有确定值的
ack=u+1:之前发送方(A)说发送的是第 u 位数据,所以我(B)要的是 u+1 位数据(因为 A 直接不发数据了,所以第二段第三段的 ack 都是 u+1)
第四段的意思是
ACK=1:连接建立了,之后的 ACK 必须都置为 1
seq=u+1:之前发的数据时第 u 位数据,B 也要第 u+1 位数据,所以我发第 u+1 位数据
ack=w+1:之前发送方(B)说发送的是第 w 位数据,所以我(A)要的是 w+1 位数据
为什么需要等待计时 2MSL?
因为这样可以保证 B 可以收到 A 的终止报文段进而进入关闭状态
比如说如果 A 的第四段报文丢失,那么等待一个 MSL 之后 B 就会重传第三段报文,花费小于 1MSL 之后 A 就会再收到第三段报文,之后就可以再次向 B 发送第四段报文提示 B 关闭连接TCP 可靠传输
- 关于 TCP 可靠传输的很多协议放在了数据链路层的流量控制章节了
- 可靠:保证接收方进程从缓存区读出来的字节流与发送方发出来的字节流是完全一样的
校验机制
与 UDP 校验一样,增加一个伪首部,通过使用二进制反码计算方法判断有没有出错
序号机制
上面说了,传输层面向字节流的,因此会把文件分成字节用一个个序号标起来
但发出去的时候,肯定不是一个个字节发,是把多个字节放在一个形成一个报文段,再发出去
报文段的大小划分取决于 MTU
其中,一个字节占一个序号。序号字段指的是一个报文段的第一个字节的序号
有了序号就能保证数据有序提交给应用层
确认机制
发送方每一次发送数据之后都需要接收方进行确认。
TCP 使用的是累计确认机制,就是从第一个丢失的字节开始请求丢失的报文段。如图中 456 丢失,78 到达,但仍然请求发送的数据序号是 4
重传机制
重传机制是基于确认机制的,TCP 的发送方在规定的时间内没有收到确认就要重传已经发送的报文段,也就是我们常说的:超时重传
那么对于这个重传机制来说,确定那个规定的时间就显得尤为重要了,不能太短也不能过长;
TCP 采用自适应算法,动态改变重传时间 RTTs(加权平均往返时间)
一般来说还有冗余 ACK 方法
TCP 流量控制
TCP 流量控制的根本目的:是控制发送方的发送速率
实现方法:使用基于滑动窗口协议的流量控制机制
与数据链路层流量控制区别:
- 传输层定义端到端用户之间流量控制,窗口大小不可动态变化
- 数据链路层定义两个中间的相邻结点的流量控制,窗口大小可动态变化
TCP 拥塞控制
要控制拥塞,首先要明白为什么会有拥塞:
- 出现拥塞的条件是:对资源需求的总和>可用的资源
具体来说就是:网络中有许多的资源同时供应不足 → 网络性能变坏 → 网络吞吐量随着输入负荷增大而下降
流量控制与拥塞控制
慢开始指的是一开始的窗口很小,然后逐步在每轮传输轮次后以指数形式增大,直至达到了慢开始门限 ssthresh(阈值),然后改用拥塞避免算法
- 拥塞避免算法,达到阈值之后,不再用指数增加形式了,改为线性增加,然后出现一次超时(网络拥塞),就令慢开始门限等于此时的拥塞窗口的一半(乘法减小)
快重传和快恢复
- 快重传使用了冗余 ACK来检测丢包的发生当发送方连续收到三个重复的 ACK 报文的时候,直接重传对方尚未收到的报文段,就不去等待报文段设置的重传计时器超时了
- 快恢复:当发送端收到三个冗余 ACK(重复确认)的时候,执行乘法减小算法,慢开始门限设置为 cwnd(拥塞窗口)的一半,(不同于慢开始算法的将 cwnd 设置为 1),此时的 cwnd 值为慢开始门限改变后的值,后执行加法增大,使得 cwnd 线性增大
应用层
应用层概述
- 应用层是对应用程序的通信提供服务
在这一层的协议中应该定义以下几点:
- 应用进程交换的报文类型,是请求还是响应?
- 各种报文类型的语法,如报文中的各个字段及其详细描述
- 字段的语义,即 包含在字段中的信息的含义
- 进程何时、如何发送报文,以及对报文进行响应的规则
应用层的功能有以下几点:
- 文件传输、访问和管理
- 电子邮件
- 虚拟终端
- 查询服务和远程作业登录
在这一层中重要的几个协议:
- 服务器处于接受请求的状态
- 客户机发出服务请求,并且等待接受结果
- 服务器收到请求后,分析请求,进行必要处理,得到结果后发送给客户机
客户程序必须知道服务器程序的地址,然而 服务器程序并不需要知道客户程序的地址
P2P 模型
- P2P 模型中,各计算机没有固定的客户和服务器划分。任意一对计算机我们称为对等方 Peer
- 每个节点既能作为客户又能作为服务器
DNS(域名系统)
- DNS 系统就是用来把特定含义的主机名(www.xxx.com)转成IP地址的一个系统
- DNS 可分为 3 部分:层次域名空间、域名服务器和解析器
域名
顶级域名分三大类:
- 国家顶级域名
- 通用顶级域名
- 基础结构域名