计算机网络
计算机网络
记录学习计算机网络的知识点,参考书和参考课程来自于慕课
协议教程: https://getiot.tech/zh/protocol/
Cloudflare: https://www.cloudflare.com/zh-cn/learning/
第一章 概述
互联网是20世纪末期形成的一个全球性计算机网络系统,连接了成千上万的私人、学术、企业和政府网络。这些网络通过一系列标准的网络协议相互连接,使用电子、无线和光纤技术等多种手段实现数据传输。
在计算机网络中,internet
和 Internet
有不同的含义。internet
指的是一般的计算机网络,而 Internet
特指按照 TCP/IP
协议连接的全球最大网络系统。
在大多数情况下,我们讨论的就是 Internet
,它也可以视为一个虚拟的“云”网络,用于理解和学习计算机网络的基本概念。
ISP
:的全称是Internet Service Provider
,因特网服务提供者。国内主要由三个通讯公司提供
从第一层提供给大公司的情况像是阿里云,公司贩卖域名和ip给与用户,但是它不是ISP。
组成部分:由网络和网络接入设备构成。网络可以抽象为云来了解。
信息交换分类
电路交换
电路交换是与报文交换(或称分组交换)相对的概念。在电路交换中,通信双方必须首先建立一个专用的连接通道。只有在连接成功建立后,双方才能开始通信。在整个通信过程中,这个连接将始终保持开放,且占用分配的资源(如通道、带宽、时隙等),直到通信结束。电路交换的本质特征在于,它在整个通信活动中独占了资源,这与报文交换中按需分配资源的方式明显不同。
电路交换中最重要的是电话交换机,电话交换机起到联通不同电话交换机的作用,最终链接到指定的电话机中。
具体操作简化:用户线发送信息 - 交换机接受信息通过中继线链接另一个交换机直到最后一个交换机-链接指定用户中
电路交换中的通讯路线仅仅只有一条,结束通话也就意味着这条通讯需要被拆除。电路通讯需要费有限的通讯资源。
电路交换的步骤是:
建立链接 -> 通话-> 释放链接
。
建立电路:A和B要进行通信,首先A先发出呼叫请求信号,然后经由上述一系列的交换机,接通这条物理链路,再由B发出应答信号给A,这样,通信线路就接通了。从这开始,才允许进行数据传输
数据传输:建立电路阶段完成后,便进入了数据传输阶段。这时候
- A可以向B发送数据,B也可以向A发送数据,实现双工通信
- 在AB通信期间,该条链路被AB所占有,任意部分的链路资源不能被其他终端所使用
拆除电路:数据传输结束后,拆除电路。这时候,AB之间的链路资源被重新分配了,不再被AB独占,可以被其他的终端建立的链路所使用
总结:电路交换就是拉了一根线,双方用户通过这个线来实现通讯。
可以把电路交换,理解为打电话,是实时传输的一个典型。其性质是传输数据稳定。
报文交换
报文交换,又称存储转发交换,是数据交换的三种方式之一,报文整个地发送,一次一跳。报文交换是分组交换的前身,是由莱昂纳多·克莱洛克于1961年提出的。报文交换的主要特点是:
- 存储接受到的报文,判断其目标地址以选择路由,最后,在下一跳路由空闲时,将数据转发给下一跳路由。报文交换系统现今都由分组交换或电路交换网络所承载。
- 每一条报文都作为互不相干的实体进行处理。每一条报文都包含地址信息,一次交换后,报文中的信息会被读取并且下一次交换的传输路径将被确定。
- 根据网络状况,通信选择的传输路径也会不同。每一条报文都会在下一次交换前被存储(在硬盘上存储时,会受到RAM的限制)。
这样做的坏处是增加了资源损耗,耗费较大的存储资源。一旦转发的报文出现错误就需要重新上传一整份大的文件。
报文的传送过程依赖于存储转发机制, 从发送端开始,每经过一个交换机,该交换机的任务是:
接收完整的报文,然后对报文进行缓存,此即为“存储”
等到下一个交换机节点空闲的时候,再将该报文发送给下一个交换机,此即为“转发”
接收端会将各份报文按照原来的顺序组合,从而得到完整的数据
可以把报文传输理解为发邮件,这个并不是实时传输
分组交换
在计算机网络和通信中,分组交换是一种相对于电路交换的通信范例,分组(又称消息、或消息碎片)在节点间单独路由,不需要在传输前先建立通信路径。(有别于电路交换)
分组交换技术是在1960年代末出现的,当时美国高级研究计划局(简称ARPA)为实现远程计算机之间的信息交换,资助建设一个试验性的网络,该网络被称为ARPANET(阿帕网)。阿帕网的主要研究成果之一就是开发一种新的网络协议,在阿帕网上对话必须使用这种网络协议。该协议采用一种新的网络信息传输技术,这就是分组交换技术。
阿帕网上运行的是NCP协议,之后会被TCP/IP协议给替代
分组交换是在报文交换的基础上实现的。分组交换其实就是把报文(Message)划分成更小的传输单元——分组(Packet)。除此之外,并无太大差异。或者可以说:报文交换和分组交换的差异就仅仅是数据单元的大小不同罢了
相比于普通的报文交换,分组交换的优势是
- 基于存储转发机制,报文交换对交换机的存储容量的要求是很高的,而分组交换所要求的存储容量很小(因为单个分组比单个报文小很多)
- 包含较短信息的分组在节点间传输速率高
- 分组小,在传输的时候出错的概率小,出现差错时,只需重发一个分组,而无需重发整个报文,所以能够提高传输效率
缺点是:
分组首部带来了额外的传输开销。交换节点存储转发分组会造成一定的时延。
无法确保通信时端到端通信资源全部可用,在通信量较大时可能造成网络拥塞。
通信资源:带宽、低延迟和无中断
分组可能会出现失序和丢失等问题,这些其实是由通信资源导致的原因。
总结:
- 传输大量数据使用电路交换,例如语言和视频通话
- 不要求实时文件传输使用报文交换,例如邮件
- 需要动态生成的数据时使用分组交换,例如网页,在线游戏。常常说的丢包就是分组交换中失去了一部分分组。
发展时间:电路交换 - > 报文交换 -> 分组交换
计算机网络的分类
计算机网络的定义:计算机网络是由一些通用的、可编程的硬件互联而成的。计算机网路的基本构成是由通信子网和资源子网构成的。
网络的分类分为五类:交换方式,使用者,传输介质,覆盖范围,拓扑结构
由不同的工作方式,分割成公用网和专用网络。
传输介质
按照传播方式的不同,可以把传播介质分为两种
导向性传输媒体
双绞线
优缺点:成本低;密度高、节省空间;安装容易;高速率;抗干扰性一般;连接距离较短。
同轴电缆
优缺点:抗干扰性好;接入复杂。以前的电视就是用这种传输媒体。
光缆
优缺点:通信容量大;传输损耗小;抗干扰性好;保密性好;体积小重量轻;需要专用设备连接。但是容易损坏。
非导向性传输媒体
- 短波通信(短波波段的电磁波除了能够利用地波传播外,还可通过电离层的反射进行远距离传输)。
- 优缺点:通信质量较差;速率低;
- 微波通信:又分地面微波接力通信和卫星通信
将信号以频率在0.3 GHz 至300GHz的微波作为载体传输。部分被称作毫米波的微波辐射非常容易被大气层(特别是潮湿的天气)衰减。
小时候用的卫星电视就是这种通讯方式(●’◡’●)
A.地面微波接力通信
优缺点:信道容量大;传输质量高;投资少;相邻站点间直视;易受天气影响;保密性差。
保密性差,例如卫星电视可以收到国外的电视节目
B.卫星通信
优缺点:通信距离远;通信容量大;传播时延大270ms
。
网络分类
- PNA(个域网)
个人区域网(PAN)用于连接用户直接区域内的电子设备,其覆盖范围从几厘米到几米不等。常见的 PAN 示例包括蓝牙耳机与智能手机之间的连接。此外,PAN 还可以连接笔记本电脑、平板电脑、打印机、键盘等设备。
PAN 连接可以通过有线或无线方式实现。有线连接方式包括 USB 和 FireWire;无线连接方式包括蓝牙(最常见)、Wi-Fi、IrDA 和 Zigbee。
通常,个人区域网不会直接连接到互联网,也就是说,它们通常不通过路由器进行连接。
- LAN(局域网)
局域网(LAN)是指在小范围内,如同一建筑物内,连接多个设备的网络。家庭 Wi-Fi 网络和小型商业网络是局域网的常见例子。尽管局域网的规模可以很大,但如果覆盖多个建筑物,它们通常被归类为广域网(WAN)或城域网(MAN)。
大多数局域网通过一个中心设备(如路由器)连接到互联网。家庭 LAN 通常使用单个路由器,而较大的局域网可能还会使用网络交换机,以提高数据传输效率。
局域网通常使用以太网、Wi-Fi 或两者结合的方式来连接设备。以太网通过电缆实现物理连接,而 Wi-Fi 通过无线电波进行连接。各种设备,如服务器、台式计算机、笔记本电脑、打印机、物联网设备以及游戏机,都可以连接到局域网。在办公室环境中,局域网常用于内部共享打印机和服务器资源。
- MAN(城域网)
城域网(MAN)是用于连接一个城市、大型城镇或包含多个建筑物的大区域内的计算机网络。它的规模介于局域网(LAN)和广域网(WAN)之间。城域网的“都市”指的是网络的规模,而不是服务区域的人口。
城域网由多个局域网通过高速连接组成,与广域网类似。然而,由于城域网的覆盖范围较小,它们通常比广域网更高效,因为数据传输距离较短。城域网通常由多个组织共同使用,而不是由单一组织管理。
大多数城域网通过光缆连接局域网,通常使用“暗光纤”,即之前未使用的光纤电缆,这些光纤可以通过私营互联网服务提供商(ISP)租用。在某些情况下,市政府可能建立和维护城市光纤网络,并将这些光纤出租给私营公司。
校园网 (CAN) 是连接学校或企业园区内多个建筑物的大型网络。校园网也可以被视为城域网,因为它们连接多个局域网,但不够大,不能被视为广域网。
- WAN(广域网)
广域网(WAN)是一种大型计算机网络,用于远距离连接不同的计算机组。大型企业通常使用 WAN 连接其各个办公网络,每个办事处通常拥有自己的局域网(LAN),这些 LAN 通过 WAN 相互连接。WAN 连接可以通过专线、虚拟私人网络(VPN)或 IP 隧道等方式实现。
广域网的定义较为宽泛,从技术上讲,任何覆盖广阔地理区域的大型网络都可以被称为 WAN。互联网本身也是一个典型的广域网(WAN)。
拓扑结构
总线型拓扑结构是一种早期的网络拓扑结构,已经被淘汰。如今用的是通过以太网交换机互联。
星型拓扑是一种网络拓扑结构,其中所有网络设备都通过独立的连接线直接连接到一个中心节点或集线器(Hub)上。这个中心节点在网络中起到一个集中的通信和管理角色。
网状型拓扑(Mesh Topology)是一种网络拓扑结构,其中每个网络设备都直接连接到网络中的其他设备。网状型拓扑有完全网状(Full Mesh)和部分网状(Partial Mesh)两种类型。
计算机网络性能指标
- 带宽是可以传输信息的最大速率,通常以比特/秒为单位
- 吞吐量是信息传输的实际速率
- 延迟是发送外和接收处之间的延迟,这主要是信号传播时间,以及信息经过所有节点需要的外理时间
- 抖动是接收处延迟的变化
- 误码率是将发送位总数除以损坏位数得到的百分比
数据传输速率*
速率指的是数据传送的速率,也称之为比特率(bit rate)。比特(bit)是计算机中数据量的基本单位,一个比特就是二进制数字中的一个 1 或 0。速率的单位是 bit/s
。
此外还有一些单位可以有下面的关系式表达与
bit/s
的转化kbit/s,Mbit/s,Gbit/s,Tbit/s
以此类推计算机网络中速率是以10的倍数为转换单位,速率往往是指额定速率或标称速率。
下述计算一个单位是兆字节,一个单位是兆比特。所以说要通过转换单位来计算
带宽
带宽,指的是在固定时间内可以传输的数据量,即传输管道的数据传输能力。在数字设备中,带宽通常以比特每秒(bps)表示,即每秒钟可以传输多少比特。对于模拟设备,带宽则以赫兹(Hz)或每秒传送周期来表示。
赫兹(Hz)在物理上表示振动频率,即每秒内发生的周期性振动或波动的次数。在电信号中,频率同样表示信号每秒变化的次数。带宽在这里可以理解为频率变化范围,反映了信道每秒能传输的数据量。频率越高,信号变化越快,带宽越大,单位时间内能传输的数据量也就越多
简单来说,可以将带宽比作水管,数据传输速度比作水流。水管越粗,能够承载的水流量越大,传输速度也越快。同样地,带宽越大,单位时间内可以传输的数据量也越多,从而支持更多的用户同时访问。相反,带宽较小时,数据传输速度较慢,支持的用户访问量也会减少
日常生活中的百兆宽带的意思是:每秒传输 100Mbps
的速率。百兆宽带的实际速度为 100Mbps÷8=12.5MB/s
吞吐量
在如以太网及数据包无线电之类的电信网络之中,吞吐量或网络吞吐量是指于一通信通道上单位时间能成功传递的平均资料量,资料可以于实体或逻辑链接上传递,或通过某个网络节点。吞吐量的单位通常表示为比特每秒(bit/s或bps)。
系统吞吐量或汇集吞吐量是指于一网络内单位时间所有终端传递的资料量的总和。吞吐量可以用等候理论作数学上的分析。其中,单位时间的数据包负戴标示为到达率入,而单位时间的数据包吞吐量则标示为离开率u。吞吐量实质上同义于带宽。
时间延迟
在计算机网络的分组交换中,数据分组从源主机经过一系列路由器传输,最终到达目的地主机。在这个过程中,分组在每个经过的节点(主机或路由器)上会遭遇多种时延类型。每种时延都对数据传输的总时延产生影响
发送时延:主机或路由器发送数据帧所需的时间。从数据帧的第一个比特开始,到最后一个比特发送完毕为止的时间。
传播时延:电磁波在信道中传播一定的距离而需要花费的时间。
电磁波在信道中传播一定距离所需的时间。传播时延与通信介质有关,不同介质对电磁波的传播速率不同。常见的传播速率如下:
- 自由空间:
3.0×10^5 km/s (光速)
- 铜线:
2.3×10^5 km/s
- 光纤:
2.0×10^5 km/s
- 处理时延:交换结点为存储转发而进行一些必要的处理所花费的时间。
- 排队时延:结点缓存队列中分组排队所经历的时延。排队时延的长短往往取决于网络中当时的通信量。
- 总时延 = 发送时延+传播时延+处理时延+排队时延。
宽带时延乘积
BDP
是网络的带宽(bit/s
)与端到端延迟(s
)的乘积,结果以比特或字节表示。用于衡量在理想状态下,整条链路上能容纳的最大数据量(比特或字节)。
时延带宽积:表示链路可以容纳多少个比特。又称为以比特为单位的链路长度。
网络往返时间
往返时间 (RTT
) 是网络请求从起点到目的地然后再回到起点所花费的时长(以毫秒为单位)。RTT
是确定本地网络或较大Internet
上连接的运行状况的重要指标,并且网络管理员通常使用 RTT
来诊断网络连接的速度和可靠性。
RTT的计算涉及网络层和传输层的功能。如果使用的是ICMP
协议:
- 网络层:
ICMP
协议在网络层工作。ping
命令使用ICMP协议向目标地址发送ICMP Echo
请求数据包,然后等待目标地址返回ICMP Echo
应答数据包。 - RTT计算:当发送和接收数据包时,记录下发送时间和接收时间。通过计算这两个时间的差值,得到
RTT
。
Ping
实用程序几乎在所有计算机上可用,这是一种估计往返时间的方法。下面是几个 Ping BLBL
的示例,底部都计算了往返时间。
在题目中,计算传播延迟是用传播的距离/传播载体的传输速率
的传输速率
链路利用率
链路利用率是指网络链路在一定时间内被利用的程度。它通常用百分比表示,计算公式如下:
其中,链路被利用的时间是指链路在某个时间段内进行数据传输的时间,总时间是指这个时间段的总时长。
网络利用率
指网络有百分之几的时间被利用(有数据通过)。
网络丢包率
丢失分组的情况:
计算机网络体系结构
计算机网络体系结构分为3种:OSI
体系结构(七层),TCP/IP
体系结构(四层)或者五层体系结构。
OSI体系结构
: 概念清楚,理论也比较完整,但是它既复杂又不实用。TCP/IP体系结构
:TCP/IP
是一个四层体系结构,得到了广泛的运用。五层体系结构
:为了方便学习,折中OSI体系结构
和TCP/IP体系结构
,综合二者的优点,这样既简洁,又能将概念讲清楚。
OSI
是一个理论上的网络通信模型,而TCP/IP
则是实际运行的网络协议。为了适用于教学,将网络接口层中划分出两个区域,也就是数据链路层和物理层。
应用层
:应用层是网络协议的最高层,主要任务通过进程间的交互完成特定网络应用。应用层协议定义的是应用程序(进程)间通信和交互的规则
。对于不同的网络应用需要有不同的应用层协议,在互联网中的应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,等等。应用层交互的数据单元称为报文。运输层
:有时也译为传输层,它负责为两台主机中的进程提供通信服务。该层主要有以下两种协议:- 传输控制协议 (Transmission Control Protocol,TCP):提供面向连接的、可靠的数据传输服务,数据传输的基本单位是报文段(segment)
- 用户数据报协议 (User Datagram Protocol,UDP):提供无连接的、尽最大努力的数据传输服务,但不保证数据传输的可靠性,数据传输的基本单位是用户数据报。
网络层
:网络层负责为分组网络中的不同主机提供通信服务,并通过选择合适的路由将数据传递到目标主机。在发送数据时,网络层把运输层产生的报文段或用户数据封装成分组
或包
进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫IP数据报。数据链路层
:数据链路层通常简称为链路层
。数据链路层在两个相邻节点传输数据时,将网络层交下来的IP数据报组装成帧
,在两个相邻节点之间的链路上传送帧
。物理层
:保数据可以在各种物理媒介上进行传输,为数据的传输提供可靠的环境。同时将数据转化为电信号或者光信号进行传输,物理层不封装特征,只负责传输数据。
这个图说明了每一个层级发挥的作用:
协议特点表格
传输信息流程如下
第二章 物理层
现有计算机中的硬件设备和传输媒体的种类非常多,通信手段也有许多不同的方式。物理层的作用就是要尽可能的屏蔽掉这些传输媒体和通信手段的差异,使得物理层之上的数据链路层感觉不到这些差异。数据链路层只需考虑如何完成本层的协议和服务,而不必考虑网络具体情况的传输媒体和通信手段是什么。
可以将物理层的主要任务描述为确定与传输媒体接有关的一些特性
- 机械特性:接口所用接线器的一些物理属性如接口范围,接口尺寸,引线数目及排列;
- 电气特性:接口电缆的各条线上出现电压的范围,阻抗匹配,传输速度,距离等;
- 功能特性:某条线上出现的某一电平的电压的意义,接口部件信号线的用途;
- 过程特性:对于不同功能的各种可能事件的出现顺序,定义各条物理线路的工作规程和时序关系。
传播媒体
传输媒体也称为传输截止和传输媒介,是数据传输系统中在发送设备和接收设备之间的物理通路。传输介质可认为是第0层,它传输的是信号,但是它不必知道信号是什么意思,物理层根据规定的电气特性来识别比特。
传输媒体可以分成两大类:导引性传输媒体和非引导性传输媒体
导向型传播媒体
导向型传播媒体(这里通常指的是导线),在上面的概论中有简单介绍
双绞线排线规则有两种:T568A标准;T568B标准:
1 | ----------------------- |
1 | ----------------------- |
常见的双绞线带宽大小和其应用的举例
频率是由一个个电平和电压组成的,频率描述的是二者转化的速度。HZ
的意思是,在一秒钟变化的周期。
光纤常见标准
光纤的优点如下:
- 通信容量非常大
- 抗雷电和电磁干扰性能好
- 传输损耗小,中继距离长无串音干扰,保密性好
- 体积小,重量轻
传输方式
串行传输
串行传输是指在计算机总线或其他数据通道上,每次传输一个比特数据,并连续进行以上单次过程的通信方式,可以理解为连续不断的发送。
串行传输接收端存在一个如何从串行数据比特流中正确地划分出发送的一个个字符的问题,也就是字符同步的问题。在串行数据通信中同步问题十分关键。发送端一位一位地把信息通过介质发往接收端,接收端必须识别信息的开始和结束,而且必须知道每一位的持续时间。
字符同步问题可以用曼彻斯特编码和差分曼彻斯特编码解决。
并行传输
数据以一组或者整个字符的方式在多条并行信道上同时传输。 常用的就是将构成一个字符代码的8位二进制码,分别在8个并行信道上进行传输。并行传输的效率高但是使用费用高,通常执行短距离的数据输送。同时在计算机中,网卡负责将并行的数据流转化为串行的数据流,反之亦然。
同步传输
在同步数据传输中,数据以帧或块的形式在接收方和发送方之间传输。数据以配对方式传输,因此发送方和接收方的同步是必要的。只有当这些系统共享一个内部时钟时,这种同步才有可能,也就是每一个字节都按照一定的时间传输。这种数据传输方式用于通过闭路电视传输语音和实时视频等对时间敏感的数据。
为了在同步传输方式中实现收发双方的时钟同步,可以采用以下两种方法:
- 外同步:在收发双方之间增加一条时钟线,发送端在发送数据信号的同时,还要发送一路时钟信号。接收端在时钟信号的“指挥下”对数据信号进行采样。这样就实现了收发双方的同步。
- 内同步:发送端将时钟信号编码到发送数据中一起发送。例如,曼彻斯特编码和差分曼彻斯特编码都自含时钟编码,具有自同步能力。
异步传输
异步数据传输与同步数据传输正好相反,不需要接收方和发送方之间的主动同步。数据以半对方式以字符或字节的形式移动。传输数据的字符大小为8位,在数据的首尾加上奇偶校验位后变为10位。这种传输方法利用奇偶校验位来通知接收器有关数据转换的信息。通常一次传输1个字符或字节的数据。
异步传输方式以字节为传输单位,但字节之间的时间间隔并不固定,接收端只在每个字节的起始处对字节内的比特实现同步。为此,一般要给每个字节添加起始位和结束位。异步是指字节之间的异步(也就是字节之间的时间间隔并不固定),但字节内的每个比特仍然要同步,它们的信号持续时间是相同的。
对应一个字节的位的分配:
- 起始位是一个低电平(逻辑0),用于通知接收方一个新字节的开始。
- 数据位传输实际的数据信息。
- 停止位标志一个字节的结束,通用是高电平,并为接收方提供处理当前字节和准备下一个字节的时间。
- 奇偶校验位(可选)用于错误检测。可以放在停止位之后作为奇偶校验。
通讯方式
单工通信:是指消息只能单向传输的工作方式。
- 特点:发送端只能发送信息,接收端只能接收信息,不能反向传输。例如广播电台发送信息,听众只能接收。
- 示例:广播是单工通信的典型应用,广播电台发送信号,听众收听,不可反向传输。
半双工通信:可以实现双向通信,但不能同时进行,需交替进行。
- 特点:发送端和接收端可以互换角色,但每次只能有一个方向传输。例如对讲机可以发出信号,也可以接收信号,但不能同时进行。
- 示例:对讲机是半双工通信的常见应用,需要按下按讲(Push To Talk, PTT)按钮才能说话。
全双工通信:是指通信的双方可以同时进行双向信息传输。
- 特点:可以同时发送和接收信息,双向通信无延迟。例如手机通话时,双方可以同时讲话和听。
- 示例:手机通信是全双工通信的应用,双方可以同时说话和听对方讲话。
编码与调制*
基带信号是由信源发出的原始信号,原始信号中含有一些杂信号例如直流信号(连续的1或者连续的0)
。调制是将基带信号用于调节载波信号的某些参数(如振幅、频率或相位),以将信息嵌入载波信号中进行传输。
解调则是调制的反过程,通过检测和分析已调信号的参数变化,提取并恢复出原始的基带信号。
调制基带信号是为了让原始信号能在信道上传输
解调就是将调制信息还原为源信息
码元*
通过不同类型的码元组合,表示其他信息
码元是指用一个固定时长的信号波形(数字脉冲),代表不同离散数值的基本波形。1码元可以携带多个比特的信息量。例如,在使用二进制编码时,只有两种不同的码元,一种代表0状态,另一种代表1状态。也就意味着每一个数字信号,就表示调制信号的一小段波长。
码元携带的数据量取决于编码方式和调制方式
- 在数字通信中,码元是信息的最小单位,每个码元对应一定的信号状态。调制过程将信息编码为这种信号状态,并在传输介质上形成波形信号。
- 在分析和研究中,我们常常将连续的模拟信号波形映射为离散数值,这样可以更容易地理解和处理信息。这个过程有助于将模拟信号转换为数字形式,以便进行进一步分析、处理和优化。
基带信号
由信源发出的原始信号称为基带信号,也就是基本频带信号。例如,由计算机输出的表示各种文字、图像、音频或视频文件的数字信号都属于基带信号。基带信号往往包含较多的低频成分,甚至包含由连续个0或连续个1造成的直流成分,而许多信道并不能传输这种低频分量或直流分量。因此,需要对基带信号进行调制(modulation)
后才能在信道上传输。
调制完成的信息通过映射之类的关系转化为方便人类理解的数字信号,也就是bit
。不过一般而言信息传输的单位是字节。当然无论是何种传输方式,其内部的bit
都是连续的。
基本调制
常用调制方式有:不归零制、归零制、曼彻斯特编码以及差分曼彻斯特编码等。编码方式的目的是将数据表示为二进制的操作。
不归零制
在实际电流频率中,正负电平的转换并不均匀。为了区分正电平和负电平,编码过程中引入了一种零电平作为两者的参考点。这相当于数学上的零,其中左侧表示负电平(-1),右侧表示正电平(1)。
不归零是指信号中的码元在编码过程中都不会回归到零电平。编码效率最高,但是存在收发双方的同步问题。为了解决同步问题,需要给收发双方再添加一条时钟信号线。发送方通过数据信号线给接收方发送数据的同时,还通过时钟信号线给接收方发送时钟信号。接收方按照接收到的时钟信号的节拍,对数据信号线上的信号进行采样。
归零制
归零制是指信号在每个码元期间会回归到零电平。例如,如图所示的是一种双极性归零编码,正电平表示1,负电平表示0,在每个码元的中间时刻信号都会回归到零电平。由于每个码元传输后信号都会归零,所以接收方只要在信号归零后采样即可。
归零编码相当于将时钟信号编码在了数据之内,通过数据信号线进行发送,而不用单独的时钟信号线来发送时钟信号。因此,采用归零编码的信号也称作自同步信号。然而,归零编码也有缺点:大部分的数据带宽都用来传输归零而浪费掉了。
曼彻斯特编码
曼彻斯特编码在每个码元的中间时刻都会发生电平跳变。这种电平的跳变同时表示时钟信号和数据(因为每个跳变都能指示比特的起始位置和数值,所以说可以根据在一个码元内的形状来判断映射的比特流)。向下跳变表示1还是0,以及向上跳变表示0还是1,可以自行定义。其实这种也是不归零制
曼彻斯特编码信号属于自同步信号,10Mbs
的传统以太网采用的就是曼彻斯特编码。
差分曼彻斯特编码
与曼彻斯特编码不同的是,电平的跳变仅表示时钟信号,而不表示数据。数据的表示在于每一个码元开始处!!!!是否有电平跳变:无跳变表示1,有跳变表示0。
常见编码方式整图:
带通调制
在解题过程中,不需要了解具体的调制原理。只需要了解这种调制方法能创造出多少种码元来表达信息就行。常见的带通调制的方法:
调幅(AM):载波的振幅随基带数字信号而变化。1或0对应于有无载波输出。
调频(FM):载波的频率随基带数字信号而变化。1或0对应于两个不同的频率。
调相(PM):载波的初始相位随基带数字信号而变化。1或0对应于相位180度或0.
基本调制中,一个码元只能包含一种比特信息。
码元通过调制转化为编码信号,这是接收端处理的事情
混合调制
为了提高数据传输速率,可以使用技术上更为复杂的混合调制方法,使1个码元可以表示多个比特的信息量。因为载波的频率和相位是相关的,即频率是相位随时间的变化率,所以载波的频率和相位不能进行混合调制。通常情况下,载波的相位和振幅可以结合起来一起调制,例如正交振幅调制(QAM)。
相位和振幅的混合调制:正交振幅调制QAM
正交振幅调制(qam)
正交幅度调制是一种在两个正交载波上进行幅度调制的调制方式。这两个载波通常是相位差为90度(T/2)
的正弦波,因此被称作正交载波。这种调制方式因此而得名。我们不去纠结具体实现原理,而是研究其能产生的码元种类有几个,计算公式如下
码元的状态数决定了它可以表示的信息量。如果一个码元可以在0和1之间切换,则它能够表示的信息量为2种状态。对于多个码元来说,所有码元的组合状态可以共同表示的信息量为2的码元数量次方(2^n)。这意味着如果一个码元的状态数量为 n,那么对于 m 个码元,其能表示的信息量为n^m
种状态。
QAM中的每个码元可以表示多比特的信息。16-QAM中每个码元可以表示4比特信息,64-QAM中每个码元可以表示6(4+2)比特信息,而更高阶的QAM(如256-QAM)可以表示更多比特的信息。
在数字信号调制中,星座图通常用于表示QAM调制二维图形。星座图相对于IQ调制而言,将数据调制信息映射到极坐标中,这些信息包含了信号的幅度信息和相位信息。
星座图上的每一个点,都表示一个符号。该点I轴和Q轴的分量分别代表着正交的载波上的幅度调整。该点到原点的距离A就是调制后的幅度,夹角φ就是调制后的相位。
根据调制出的码元,可以计算可以表示的比特数量
信道极限容量*
信道容量是指在一个信道中能够可靠地传送信息时可达速率的最小上界。所谓可靠传输指的是可以以任意小的错误率传递信息。根据有噪信道编码定理,信道容量是可以误差概率任意小地达到的给定信道的极限信息率。信道容量的单位为比特每秒、奈特每秒等等。
信道容量是信道的输入与输出的互信息量的最大值,而相应的输入分布称为最佳输入分布
传输信号有这个特点:传输越快,质量越差。质量越高,传输越慢
可通频率
在信道上传输的数字信号其实是使用多个频率的模拟信号进行多次谐波而成的方波,假如数字信号频率位1000Hz
,需要使用1000Hz
的模拟信号作为基波,基本信号和更高频率谐波叠加形成数字信号的波形。经过多次更高频率的波进行谐波,可以形成接近数字信号的波形,现在大家应该明白了为什么数字信号中包含更高频率的谐波了。
谐波是指电流中所含有的频率为基波的整数倍的电量,一般是指对周期性的非正弦电量进行傅立叶级数分解,除了基波频率的电量,其余大于基波频率的电流产生的电量,称为谐波。谐波次数是谐波频率与基波频率
(n=fn/f1)
的比值。
具体的信道所能通过的模拟信号的频率范围总是有限的。能够通过的最高频率减去最低频率就是该信道的带宽。如图所示的电话线,假定其允许频率范围从300~3300Hz的模拟信号能够通过,低于300Hz和高于3300Hz的模拟信号均不能通过,则电话线的带宽位3000Hz。
怎么样拆解和叠加不同的波呢(傅里叶变换),这里超纲了就不做多评价
奈氏法则*
对于无噪声的信道,其带宽为W Hz
,规定该信道的最大波特率(码元传输速率)为2W Baud
其中M
是该信道上信号中一个码元携带的信息位数(相同的说法有M电平信息,M进制码元)
奈氏准则的提出是针对码间串扰
问题的,所谓码间串扰问题就是当信息发送过快时,相邻的码元在接受时有可能被错误接收。其原理类似于视觉残留,画面在眼前闪太快时,人眼就会自动把上一帧画面和当前帧画面联系起来。
- 在任何信道中,码元传输的速率是有上限的。若传输速率超过此上限,就会发现严重的码间串扰问题,使接收端对码元的完全正确识别成为不可能。
- 信道的频带越宽(即能通过的信号高频分量越多),就可以用更高的速率进行码元的有效传输。
- 奈氏准则给出了码元传输速率的限制,但没有对信息传输速率给出限制。
- 由于码元的传输速率受奈氏准则的制约,所以要提高数据的传输速率,就必须设法使每个码元能携带更多个比特的信息量,这就需要采用多元制的调制方法。
码元的比特数(码元所能携带的信息位数)可以用公式log_2(相位)
来计算。如果涉及幅度调制和相位调制,需要将它们表示的比特数相加,即幅度调制的比特(log2(M)
)与相位调制的比特数(log2(N)
)相加。
计算码元的比特数的主要目的是将波特率和比特率的单位进行转换。波特率指的是每秒钟传输的码元数,而比特率指的是每秒钟传输的比特数。经过带通调制后,码元可以转化为比特数,从而使我们能够用比特率来描述码元的传输速率
解题过程中,只关心可以调制出不同基本波形的数量,则每一个码元可以携带的比特数量为log2X。
这里的四个相位类比为四种不同的手势,也就是说一个码元可以携带log24 = 2信息
由题目得知,其码元可以携带的比特数量为:log216(44),*相位乘上振幅。
根据公式:
最大传输速率 = 最高码元传输速率*每个码元携带的比特数量
= 2W*4 = 2*3k*4 = 24kbps
答案选择B总结:只需要关注技术调制出不同码元的数量即可。计算就是用相位乘上振幅。详细计算公式就是
其中W表示带宽
香农公式
噪声存在于所有的电子设备和通信信道中。由于噪声随机产生,它的瞬时值有时会很大,因此噪声会使接收端对码元的判决产生错误。但是噪声的影响是相对的,若信号较强,那么噪声影响相对较小。因此,信噪比就很重要。信噪比=信号的平均功率/噪声的平均功率,常记为S/N,并用分贝 (dB) 作为度量单位,用下面这个公式计算出S/N
。
对于有噪声的信道,其带宽为𝑊 Hz,该信道的信噪比记为𝑆/𝑁,则该信道的最大传输速率为(该式子中的信噪比为无单位比值)
具体步骤:
- 先用公式求出S/N
- 再用香农定理,带入
S/N
信道复用*
在一条传播媒体上传输多路用户的信号,称之为复用
频分复用
频分复用, 就是通过将不同频率的信号进行融合, 然后在接收端再进行不同频率信号的分离。当然, 叠加后的频率是不能超出传输媒介的频率带宽的。
频分复用的所有用户同时占用不同的频带资源并行通信,可以将宽带看做一个矩形,在矩形处划分不同的区块作为子信道。
频分复用FDW的例子
在三台电话的信号合并之前,如果没有采取信道复用技术,一端的两台电话同时打给另一端的同一台电话,就会出现占线的情况。使用频分复用在传输过程中通过将三种波形合并为一个波,这样就可以避免占线问题。也就是让三个信号同时传输。
时分复用
时分多路复用(TDM)是一种多路复用技术。使用这种技术,两个以上的信号或数据流可以同时在一条通信线路上传输,表现为同一通信信道的多个子信道。然而,在物理层面上,信号实际上是轮流占用物理通道的。
在 TDM 中,时间域被分成周期循环的若干小段,每段时间长度是固定的,每个时段用于传输一个子信道的数据。例如,子信道1的采样数据(可以是字节或数据块)在时间段1传输,子信道2的数据在时间段2传输,以此类推。
一个 TDM 帧包含一个子信道的一个时间段。当最后一个子信道的数据传输完毕后,这个过程会重复进行,以传输新的帧,也就是下一个信号片段。
波分复用
波分复用是利用多个激光器在单条光纤上同时发送多束不同波长激光的技术。每个信号经过数据(文本、语音、视频等)调制后都在它独有的色带内传输。WDM 能使电话公司和其他运营商的现有光纤基础设施容量大增。波分复用就是光的频分复用(也就是不同的频率)。
通过复用器,将所有频率的光合并传输道分用器中。
码分复用
最普通的例子就是手机打电话。比如联通公司发送总的信号是一样的,那么当多人同时打电话时如何判断打的是A手机而不是B手机呢?
常用的名词是码分多址 CDMA
- 各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。
- 这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被他人发现。
- 每一个比特时间划分为 m 个短的间隔,称为码片(chip)。
CDMA(码分多址)
的工作原理: 在CDMA中,正交码片序列的要求是,它们的内积需要为零。这个内积实际上是两个序列中对应位置的码片值相乘的结果求和。因此,为了使两个序列正交,其对应位置的码片值乘积的总和必须为零。
网路硬件设备
接线的材质和特殊物理信道这里就不提了,这里说明最常见和最基础的物理设备
集线器
集线器也被称之为HUB,是一种多端口的转发器。大多数的时候它用在星型与树型网络拓扑结构中。属于数据通信系统中的基础设备,它和双绞线等传输介质一样,是集线器集线器一种不需任何软件支持或只需很少管理软件管理的硬件设备。其实,集线器实际上就是中继器的一种,其区别仅在于集线器能够提供更多的端口服务,所以集线器又叫多口中继器。简单来说,集线器是一个比较简单的网络设备,用于连接多个设备并共享数据传输通道。
网桥
一种桥接器,连接两个局域网的一种存储/转发设备。工作在数据链路层,是早期的两端口二层网络设备。可将一个大的VLAN分割为多个网段,或者将两个以上的LAN互联为一个逻辑LAN,使得LAN上的所有用户都可以访问服务器。
最简单的网桥只有两个端口,复杂的网桥可有多个端口。网桥的两个端口分别有一条独立的交换信道,但不是共享一条背板总线,可以隔离冲突域。后来随着交换机的发展和应用,组件被拥有更多端口又能隔离冲突域的交换机所替代。
普通网桥
网桥使用的是一种对帧进行转发的技术,根据MAC分区块,可隔离碰撞。网桥将网络的同一网段在数据链路层上连接起来,但是只可以连接同构的网络(即统一网段),不能连接异构网络(即不同网段)。通过将两个相似的网络连接起来,且对网络数据的流通进行管理。因其工作在二层网络(数据链路层),其主要作用用来筛选和转发不同网络的信息
网桥能够有效连接多个局域网,例如图示中的网络1(LAN1)和网络2(LAN2),并管理它们之间的数据流动。
当网桥接收到来自网络1的数据包时,如果目标地址属于网络1的设备,网桥将丢弃该数据包,避免不必要的网络负担。
如果数据包的目标地址属于网络2,网桥将该数据包转发到网络2的设备,确保数据能够顺利到达目的地。
从而通过利用网桥实现隔离信息,将同一个网络号划分成多个网段(属于同一个网络号),隔离出安全网段,防止其他网段内的用户非法访问。由于网络的分段,各网段相应独立(属于同一个网络号),一个网段的故障不会影响到其他网段的运行。
透明网桥工作在数据链路层,将两个LAN连起来,通过学习接收到数据包的MAC地址, 在本地建立一个以MAC地址和网络接口对应的网桥表,并根据这张表来转发帧,可以看作是一个“低层的路由器”(但路由器工作在网络层,根据网络地址如IP地址进行转发)。
根据以上拓扑图可知,客户机IP和路由LAN口IP在同一网段,有没有网桥都不需要改变客户端IP地址,这也就是网桥对于客户机来说透明的原因了。交换机本来是可以直接与路由连接,中间多出一网桥的主要原因是交换机没有防火墙和流量控制这些功能,不能对客户机作一些限制操作,但是网桥可以。此种网络结构一般用于企业内部管理。
交换机
交换机是网桥和集线器的升级版,结合了两者的功能。交换机作用于数据链路层。直接看链接的文章即可。
路由器
第三章 数据链路层
数据链路层的主要作用是保证数据的正确性
数据链路层的主要作用是在两个网络实体之间提供数据链路的建立、维持和释放。它负责将网络层的数据封装成数据帧(frame),并在帧中添加地址段、控制段和数据段等信息,以确保数据在传输过程中的完整性和准确性。数据链路层通过对帧进行定界、同步、以及发送和接收顺序的控制,实现对物理层数据的封装和管理。
它还包括流量控制和差错检测与纠正,通过在帧尾添加检验码来识别和修正传输中的错误,从而将物理层的可能出错的连接转换为逻辑上无差错的数据链路。因此,数据链路层在保证数据准确传输的同时,也提高了数据传输的可靠性。
链路简单理解,是局域网中网卡和网卡联通的通道。在数据链路层中需要实现是:如何在物理链路上传输数据,包括错误检测和纠正、帧的格式化等。
链路层传输的数据被称之为帧,帧是链路层中的一种封装方式,帧的构成:
- 帧头(Header):包含源和目标地址、类型字段等控制信息。
- 数据部分(Payload):实际传输的数据,即来自网络层(第三层)的数据包。
- 帧尾(Trailer):包含错误检测码(如CRC校验码),用于验证数据的完整性。
在数据链路层中,链路层地址有很多中不同的称谓:LAN 地址、物理地址或者 MAC 地址,因为 MAC 地址是最流行的术语,所以我们一般称呼链路层地址指的就是 MAC 地址。
封装成帧和透明传输*
打包成帧(framing):在网络层的数据报传输之前,几乎所有的链路层协议都会将数据报封装成链路层的帧。数据链路层从网络层获取数据后,将其封装成帧。如果帧过大,数据链路层会将其拆分为多个小帧,以提高传输控制和错误检测的效率。
一个帧由以下部分组成:
- Header(帧头):包含帧的控制信息,如源地址和目的地址等。
- Payload Field(有效载荷):包含上层的数据,网络层的数据报被封装在这个字段中。
- Trailer(帧尾):包含用于错误检测和校验的信息。
一个典型的数据链路层帧中包含以下部分,按照下述顺序排列
- 帧定界符(Flag or Frame Delimiter)
- 帧头(Frame Header)
- 数据字段(Data or Payload)
- 帧校验序列 (FCS是用于差错检测)
- 帧尾部(Trailer) - 一般这个是没有的
- 帧结束定界符,和帧定界符是一样的
定界符 → 帧头 → 数据字段 → 帧校验序列 → 帧尾部(可选) → 定界符(可选)
当需要在数据部分传输帧定界符 (FLAG
) 或转义字符 (ESC
) 时,才需要在它们前面加上 ESC
以防止它们被误认为控制字符。
将网络层协议封装成帧时,非透明传输会在帧的首部和尾部分别添加SOH(开始符)和EOT(结束符)这两个特殊字符,以便接收方能够确定帧的开始和结束。如果链路层数据部分包含EOT字符,接收方可能会误以为帧已经结束,从而导致解析错误。
为了实现透明传输,链路层会对数据中的特殊字符(如EOT)进行特殊处理,例如添加转义符(如果数据中还包含转义符,则再添加一个转义符),从而确保这些特殊字符不会被误解为帧的结束符。这样可以保证数据部分能够完整传输,即使其中包含特殊字符。
非透明传输则是在数据传输过程中,如果数据中包含与特殊字符相同的字符(如停止符),但未进行任何处理,那么这些字符可能会导致误解,进而影响数据的完整传输。
实现透明传输的方法通常有两种:字节填充和比特填充。
字节填充:在这种方法中,数据帧的定界符前插入一个转义字符
ESC
,以确保传输过程中不会误将数据中的特定字符识别为帧定界符。比特填充:这种方法通过在数据帧中的特定比特序列前后插入额外的比特,确保帧的定界符不会与数据中的比特序列混淆。
总结:透明传输是为了保护帧界定号,使得它不会被误识别
差错检测*
数据在传输的过程中难免会出现差错(比如经过路由转发时),因此我们需要一些差错检测和纠正技术来检测数据中的差错并纠正,使接收方收到正确的数据,也避免发送方对数据进行重传。
常见的差错检测和纠正技术有:奇偶检测,检验和,循环冗余检测
奇偶检测
奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数.
偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数,
奇校验只能检测寄次出现的错误,同样的偶校验只能检测偶次出现的错误
循环冗余校验*
循环冗余校验是一种广泛应用于数字通信和存储设备中的错误检测技术。CRC 通过生成一个固定长度的校验码来检测数据传输或存储过程中是否发生了错误。
它的基本原理是将数据视为一个二进制数,并使用一个预定义的生成多项式(通常以二进制表示)来对数据进行模2除法,计算出一个校验码。
生成多项式:选择一个固定的生成多项式,这个多项式用于整个CRC过程。生成多项式可以视为一个位模式,用于计算校验码。CRC生成的多项式本身是与数据无关的
计算校验码:
- 发送方在原始数据后面附加与生成多项式长度相等的零位。
- 然后,使用生成多项式对扩展后的数据进行模2除法(不需要进位的二进制除法),得到的余数就是CRC校验码。
- 将这个CRC校验码附加到原始数据后面,构成一个完整的传输帧。
带有CRC校验码的数据帧被发送到接收方。
错误检测
接收方接收到数据帧后,使用同样的生成多项式对整个数据帧(包括附加的CRC校验码)再次进行模2除法。
如果除法的余数为0,则说明数据在传输过程中没有发生错误。如果余数不为0,则表明数据可能出现了错误。
发送端:准备数据 -> 数据扩展 -> 计算CRC校验码(是模2的余数!!) -> 附加校验码 -> 发送数据。
接收端:接收数据 -> 校验过程 -> 检查余数。
计算冗余码的过程是:
- 先构造被除数,在发送数据后方添加多项式的最高次数的0的个数
- 用构造好的被除数,除以多项式系数构成的二进制除数
- 做二进制模2除法,等价于对于每一位做异或运算
- 得出的余数位数要和多项式最高次数相同
可靠传输
网络层提供的可靠交付主要指的是端系统到端系统的交付,而数据链路层提供的可靠交付则更侧重于单个链路节点之间的传输。当链路层协议提供可靠交付时,它保证无差错地在链路层将每个网络层数据报从一个节点传送到另一个节点。链路层的可靠交付方法类似于 TCP,即通过使用 确认
和 重传
机制来实现。
链路层的可靠交付通常用于出错率较高的链路,如无线链路。其目的是在本地纠正出错的帧,而不是通过运输层或应用层协议实现端到端的数据传输。对于出错率较低的链路,例如光纤、同轴电缆和双绞线,链路层的交付开销通常是不必要的,因此这些链路通常不提供可靠的交付服务。
可靠传输是通过检测信息是否完整的结果,没有差错检测就没有可靠传输
- 如果网络接口层使用的是信道易受干扰的802.11无线局域网,那么其数据链路层必须实现可靠传输。
- 如果网络接口层使用的是信道质量比无线局域网好很多的以太网,那么其数据链路层不要求实现可靠传输。
数据链路层向上层提供的服务呈现出两种不同的类型。不可靠传输服务是一种弃疗的心态,而可靠传输是一种挽救的心态。
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
- 可靠传输:想办法实现发送端发送什么,接收端接收什么
并且,误码只是传输差错中的一种。传输差错还包括分组丢失、分组失序以及分组重复三种类型。
- 分组丢失是指,当某一个分组传入到一个已经挤满分组的路由器,这个路由器就会根据其分组丢失策略将该分组进行丢失。
- 分组失序是指,在某一台主机按顺序发送一连串分组,而这些分组在传输过程中会因为具体的路径选择和“路况”导致最终到达目的地的顺序和原本发送的顺序不太一样。这就叫做分组失序。
- 分组重复是指一个分组在发送过程中可能堵在传输路径上过久以致触发超时重发机制,且最终最开始发送的和重新发送的分组都到达了目的地。
停止等待协议
停止- 等待流量控制是一种最简单的流量控制方法。发送方每次只允许发送一个数据分组,接收方每接收一个数据分组都要反馈一个应答信号,表示可以接收下一数据分组,发送方收到应答信号后才能发送下一数据分组。若发送方没有收到接收方反馈的应答信号,则需要一直等待。发送方每发送完一个数据分组,就进入等待接收方确认信息的过程中,因而传输效率很低。
数据分组可以理解为帧的一部分。在停止等待协议中,发送方在发送一个数据分组后,会启动一个重传超时计时器。如果在RTO时间内未收到接收方的确认(ACK)或否定确认(NAK),则重新发送该分组,直到接收到ACK或NAK为止。
接收方收到发送方的数据分组后,通过差错检测技术可检测出数据分组是否存在误码。
- 如果没有误码,就接受该数据分组,并给发送方发送ACK(确认)分组。发送方收到ACK分组后就可以发送下一个数据分组。
- 如果存在误码,就丢弃该数据分组,并给发送方发送NAK(报错)分组,发送方收到NAK分组后就会重传之前出现误码的这个数据分组。
如果发送方的数据发送失败了,但是他又需要接收方返回一个ACK
。如果没有超时重传时间,那么就会形成死锁。超时重传时间是为了解决发送方发送数据接收方未收到的情况。需要注意的是超时重传时间(RTO)应当仔细选择:
- 若RTO太短,则会造成正常情况下确认分组还未到达发送方时,发送方就出现了不
必要的超时重传。 - 若RTO太长,则发送方会白白等待过长的时间,降低信道利用率,一般可将RTO设置为略大于收发双方的平均往返时间RTT。
回退N帧协议
回退N帧协议(GBN)采用流水线传输方式,利用发送窗口限制发送方在同一时间内可以连续发送的数据分组数量。与停止等待协议不同,回退N帧协议允许发送方在未收到ACK的情况下发送多个数据分组。这意味着,在一个PTO(超时重传时间)周期内,发送方可以发送多个数据分组,而不是在每个数据分组后都等待ACK的返回。
- 发送方需要维护一个发送窗口,在未收到接收方确认分组的情况下,发送方可将序号落入发送窗口内的所有数据分组连续发送出去。
- 接收方需要维护一个接收窗口,只有正确到达接收方且序号落入接收窗口内的数据分组才被接收方接收。
在回退N帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。在传输信息正常的情况下,发送方和接收方的传输信息步骤如下
发送方发送数据
发送方根据其发送窗口的大小,发送多个数据包(
data
)。发送窗口定义了在未收到确认(
ACK
)之前,发送方能够发送的最大未确认数据包数量。- 每个数据包都包含一个序列号,以便接收方能够正确重组数据。
接收方接收数据并发送ACK
接收方接收到数据包后,会记录每个数据包的接收时间。
接收方基于接收的顺序和接收时间,向发送方发送对应的数据包(Data)确认(
ACK
)。ACK通常包括接收到的数据包的序列号或者下一个期望接收的数据包的序列号。
发送方根据收到的ACK,调整发送窗口,决定是否发送新的数据包。
在信息传输过程中,如果出现了报错或者误码的情况如下
发送方发送数据
发送方根据发送窗口大小,依次发送多个数据包(如图中的
DATA1
、DATA2
、DATA3
等)。在图中的场景下,接收方接收到
DATA1
,但在接收到DATA2
时检测到误码(第2帧出错)。
接收方处理错误
丢弃出错帧及后续帧:接收方会丢弃
DATA2
及其后续的所有帧,因为DATA2
未正确接收。这意味着接收方只接受到了正确的DATA1
。发送ACK:接收方将发送一个
ACK
,指示其成功接收到的最后一个正确的数据帧的编号。在这种情况下,接收方发送ACK0
,表示它只成功接收到了DATA0
(假设从0开始编号)。
发送方的处理
接收ACK并判断重传:发送方收到
ACK0
后,确认接收方未成功接收到DATA1
之后的所有帧。因此,发送方会回退到ACK0
之后的第一帧,从DATA1
开始重新发送。超时处理:如果ACK在一定时间内未到达,发送方会触发超时重传机制,重新发送未被确认的帧。
重复过程
- 发送方继续发送
DATA1
、DATA2
、DATA3
等帧,直到这些帧被成功接收并确认。
在上述的过程中我们可以得到回退N帧的一些特点:
- 累积确认机制:当发送方接收到一个ACK(n)时,这表示接收方已经正确接收了编号为0到n的所有数据帧。因此,发送方确认这些帧都已成功传输,无需重传。
- 数据帧的丢失和误码处理
- 丢失数据帧:如果某个数据帧在传输过程中丢失,接收方无法接收到这个帧,自然也不会发送对应的ACK。在这种情况下,发送方会在超时后重传该帧及其后续未确认的帧。
- 误码数据帧:如果接收方检测到收到的帧有误码,它会丢弃该帧并不会发送ACK。发送方在超时后也会重传这个帧及其后续帧。
- 接收方行为:接收方只会对顺序正确且无误的数据帧发送ACK。如果接收到的帧编号与期望的顺序不符(例如帧2、帧3丢失,但帧4到达),接收方会丢弃帧4,不发送ACK,并等待重传。
- 发送方行为
- 接收到某帧位置的ACK:说明该帧及之前的所有帧都已被正确接收,没有丢失或误码。
- 未接收到ACK:表示该帧可能丢失或存在误码,发送方将在超时后重传这些帧。
选择重传协议
选择重传协议是对回退N帧协议(GBN)的优化。GBN使用累计确认机制,这可能导致批量重传,即使其中某些数据包是正确的。例如,如果一个数据帧(封装数据分组)中包含10个数据包(分组的最小单位),而最后一个(第10个)数据包出现错误,那么发送方需要重传所有10个数据包,即使前9个数据包已经成功接收。
选择重传协议(Selective Repeat)通过为每个数据包分配一个独立的确认机制,避免了这种情况。在选择重传协议中,只有出错的数据包会被重传,已经成功接收的数据包将不会被重新发送。发送方可以记录每个数据包的状态,并针对丢失或错误的数据包进行重传,从而提高了传输效率。
- 发送方:每个数据帧都有一个定时器。只有当某个帧超时时才会重传该帧,而不是所有未确认的帧。
- 接收方:可以接收并缓存任意序号的帧,只要在接收窗口范围内。接收到的帧会被缓存,直到前面的帧到达。
要将累计确认改为批量重传,将滑动窗口改为
SR发送方操作
上层调用:从上层接收数据后,SR发送方检查数据帧的序号是否在当前发送窗口范围内。如果是,则发送数据帧;如果不是,则根据窗口控制机制缓存数据或将其返回给上层。
接收到 ACK:当接收到确认(ACK)时,SR发送方首先检查ACK是否在当前窗口范围内。如果在窗口内,则标记对应帧为已确认。如果ACK确认的是窗口的下界(即窗口的最小序号),则窗口向前滑动到下一个未确认的帧。如果窗口滑动后有新的帧需要发送,则继续发送这些帧。
超时事件:每个数据帧都有独立的定时器。超时事件发生时,只有对应的帧会被重传。
SR 接收方操作
接收顺序:SR接收方能够接收并确认任何在接收窗口范围内的帧,无论帧是否按顺序到达。接收到的帧将被缓存,直到所有前面的帧都到达并按顺序交付给上层协议。
处理丢失帧:对于丢失的帧,接收方会缓存后续到达的帧,并等待丢失的帧重传。当丢失的帧到达后,接收方会发送累积确认(ACK),确认包括了所有按顺序到达的帧。
累积确认与窗口移动:接收方会在确认所有按顺序到达的帧后,将这些帧交付给上层协议,并移动接收窗口,准备接收新的数据帧。
滑动窗口的长度不可能为无限,发送窗口最好等于接收窗口也就是
点对点传输协议(PPP)
PPP(点对点协议)是一种用于在两点之间直接建立和管理网络连接的传输协议,并且支持多种网络层协议的封装。在数据链路层,不论封装了什么网络层协议,PPP传输的都是帧,只不过根据功能的不同,帧的结构和用途可能有所变化。
PPP协议由三个组成部分:
PPP协议提供了一种将IP数据报封装到串行链路中的方法,支持异步链路(8位数据,无奇偶校验)和面向比特的同步链路。IP数据报在PPP帧中作为数据部分,长度受MTU(最大传输单元)的限制。
LCP(链路控制协议)用于建立、配置和测试数据链路连接。LCP(Link Control Protocol)允许通信双方协商链路参数和选项。
NCP(网络控制协议)是一组支持不同网络层协议的协议,如IP、OSI网络层、DECnet、AppleTalk等,每个NCP协议为特定的网络层协议提供支持和配置。
实现PPP协议的透明传输
字节填充:因为PPP帧的帧定界符是0x7E(126),所以当信息字段中出现一样的比特组合时,就必须采取一些措施,使得和帧定界符一样的比特组合不出现在信息字段中。当PPP使用异步传输时,它把转义符定义为0x7D(01111101),并使用字节填充。RFC 1662规定了如下填充方法:
- 把信息字段处出现的每一个0x7E(帧定界符)转变为2字节序列(0x7D,0x5E)
- 若信息字段中出现一个0x7D的字节,即出现了和转义字符一样的比特组合,则把0x7D转变为2字节序列(0x7D,0x5D)
- 若信息字段中出现ASCII码的控制字符,即数值小于0x20的字符,则在该字符前面加入一个0x7D字节,同时转变该字符,例如:出现了0x03(在控制字符中,是“传输结束”ETX),就要把它转变为2字节序列(0x7D,0x23)
零比特填充:PPP协议用在SONET/SDH链路时,使用同步传输(一连串的比特连续发送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。
- 在发送端,先扫描整个信息字段(通常用硬件实现,也可用软件实现),只要发现有5个连续1,就立即填入一个0。因此经过这种零比特填充后的数据,就可以保证信息字段中不会连续出现6个1(6个1,可能为01111110,与帧定界符一致)。
- 在接收端,当收到一个帧时,先找到帧定界符F,以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续的1时,就把这5个连续的1后面的一个0删除,以还原成原来的信息比特流。这样就保证了透明传输,在传送的数据比特流中,可以传送任意组合的比特流,而不会引起对帧边界的错误判断。
差错检测*
和上面的差错检测原理一致
当用户拨号接入ISP时,便建立了一条从用户电脑到ISP的物理连接。随后,用户电脑会向ISP发送一系列链路控制协议(LCP)分组(包含多个PPP帧),用于协商和建立LCP连接。这些分组及其响应用于确定PPP连接的相关参数。
接着,进行网络层的配置。通过网络控制协议(NCP),ISP为新接入的用户电脑分配一个临时IP地址,使其成为互联网中的一台具有IP地址的主机。通信结束后,NCP会释放网络层连接并回收分配的IP地址。随后,LCP释放数据链路层连接,最后物理连接也被断开。
共享式以太网
早期流行的传输速率为10Mb/s
的以太网,现在被交换式以太网取代
网络适配器
网络适配器,俗称网卡。在计算机内部,网卡与CPU之间的通信,是通过计算机主板上的IO总线以并行传输方式进行的。网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线、光纤)以串行方式进行的。
显然,网卡除了要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。
当网卡收到正确的帧时,就以中断方式通知CPU取走数据并将其交付给协议栈中的网络层。当网卡收到误码的帧时,就把这个帧丢弃而不必通知CPU。
MAC地址
对于点对点信道,由于只有两个站点直接连接在信道两端,数据链路层不需要使用地址。然而,在有多个站点的广播信道中,为了实现站点间的通信,每个站点都必须拥有一个唯一的数据链路层地址,作为其标识。这也意味着,MAC地址是数据链路层中每个主机的唯一标识。
广播信道的共享式以太网中,总线上的某台主机要给另一台主机发送帧,由于广播信道天然的广播特性,表示帧的信号会通过总线传播到总线上的其他所有主机。那么这些主机中的网卡如何判断收到的帧是否是发送给自己的呢?很显然,使用广播信道的数据链路层必须使用地址来区分各主机。
每台主机的MAC地址就是其网卡上的网卡地址,通常是在出厂时由制造商设置的,属于硬件属性。MAC地址是一个唯一标识符,用于在局域网中识别和区分不同的网络设备。
MAC地址是作用于局域网上的,在局域网中起到识别主机的作用。在IEEE 802中规定了MAC地址的规则,如下图。
MAC地址是一个48位(6字节)的地址,其中每一位都有特定的含义。
MAC地址发送顺序是:
第一字节到第六字节
字节内的比特发送顺序是:
b0-b7
前面说过,MAC地址是每台主机的唯一标识。在单播传输中,只需在数据封装过程中指定接收方的MAC地址,以标识数据的目标位置。
而对于广播传输,目的地址被设置为专用的广播地址,即FF:FF:FF:FF:FF
。这样操作的结果是,所有连接到同一网络的主机都可以接收到该信息。
判断一个MAC地址是否为多播地址,关键在于第1字节的最低位(b0位)
。如果b0
位是1
,那么这个MAC地址就是一个多播地址。例如:A9-8B-7C-6D-5E-4F:第1字节是 A9
,转换为二进制是 10101001
,b0位是 1
,所以是多播地址。这里构成的是十六进制。
CSMA/CD协议**
CSMA/CD是英文carrier sense multiple access/collision detected
的缩写,可把它翻成“载波监听多路访问/冲突检测”,或带有冲突检测的载波侦听多路访问。
所谓载波监听(carrier sense),意思就是以太网络上的各个工作站在发送数据前,都要监听总线上有没有数据正在传输。若有数据传输 (称总线为忙),则不发送数据,需要等待;若无数据传输(称总线为空),可以立即发送准备好的数据。
所谓多路访问(multiple access),意思就是以太网络上的各个工作站在发送数据时,共同使用一条总线,且发送数据是广播式的。
所谓冲突(collision),意思就是,若以太网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的冲突;多个工作站都同时发送数据,在总线上就会产生信号的冲突,哪个工作站接收到的数据都辨别不出真正的信息。这种情况称冲突或者碰撞。
为了减少冲突发生的影响,工作站在发送数据过程中还要不停地检测自己发送的数据,检测自己传输过程中有没有其他工作站在发送数据,在传输过程中与其它工作站的数据发生冲突,这就是冲突检测(collision detected)。
使用 CSMA/CD 协议的以太网不能进行全双工通信,只能进行双向交替通信(半双工通信)。这是因为每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性,这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
CSMA/CD是带有冲突检测的CSMA,其基本思想是:当一个节点要发送数据时,首先监听信道;如果信道空闲就发送数据,并继续监听;如果在数据发送过程中监听到了冲突,则立刻停止数据发送,等待一段随机的时间后,重新开始尝试发送数据。
CSMA/CD媒体访问控制方法的工作原理,可以概括如下:
先听后说,边听边说;
一旦冲突,立即停说;
等待时机,然后再说;
听,即监听、检测之意;说,即发送数据之意。
上面几句话的意思是在发送数据前,先监听总线是否空闲。若总线忙,则不发送。若总线空闲,则把准备好的数据发送到总线上。在发送数据的过程中,工作站边发送边检测总线,查看是否自己发送的数据有冲突。若无冲突则继续发送直到发完全部数据;若有冲突,则立即停止发送数据,但是要发送一个加强冲突的JAM信号,以便使网络上所有工作站都知道网上发生了冲突,然后,等待一个预定的随机时间,且在总线为空闲时,再重新发送未发完的数据。
CSMA/CD是标准以太网、快速以太网和千兆以太网中统一采用的介质争用处理协议(但在万兆以太网中,由于采用的是全双工通信,所以不再采用这一协议)。之所以称之为”载波侦听”(”载波”就是承载信号的电磁波),而不是称之为”介质侦听”,那是因为如果介质上正在有载波存在,则证明介质处于忙的状态(因为信号或者数据不是直接传输的,而是通过电磁载波进行的);如果没有载波存在,则介质是空闲状态。也就是通过载波的检测,可以得知介质的状态,而不能直接来侦听介质本身得出其空闲状态。
【说明】其实这里侦听的应该是”信道”,而不是”介质”本身,因为在一条传输介质中,可能包含有多条信道,用于不同的传输链路。
最小帧长*
当多个主机挂载在bus型半双工信道上时我们都会存在一个信道争用问题,为解决这个问题我们发明了CSMA/CD协议。当两个主机同时在bus型半双工信道上发送数据就会产生数据碰撞。数据发送过程如图所示
我们假设单向传播时延为 t ,图中发生数据碰撞时,A知道碰撞检测的时间为 2 t1
,而B检测到碰撞的时间为 2t2
。
最差的情况下,当A即将到达B时,B才发送数据,此时发生碰撞。所以最迟我们检测到数据碰撞的时间是 2t。因为如果我们自身数据全部发完后才检测到数据则数据会被误认为是正常的数据而被接收,所以我们要确保我们还没有发完数据时就检测到碰撞。因此根据上面的时延计算,我们可以得出帧长 / 数据传输速率 >= 2 t
最大帧长限制为
1518B(字节)
当数据传输速率提高时,帧的发送时间缩短,如果帧的发送时间短于信号的往返延迟,可能导致冲突检测失败。为了解决这一问题,可以采用以下几种方案:
- 增加最小帧长
- 减少网络最大段长度
- 引入延迟时间
退避算法
退避算法就是网络上的节点在发送数据冲突后,等待一定时间后再发,等待时间是随指数增长,从而避免频繁的触发冲突。在计算机网络中,二进制指数退避算法或截断指数退避算法常常作为避免网络堵塞的一部分用于同一数据块的重发策略。发生n次冲突后,等待时间在0~2^n-1
个间隙时间之间选择随机选择。
截断二进制指数逃避算法
信道利用率*
信道的效率即为信道的利用率,是指发送方在一个发送周期的时间内,有效的发送数据所需要的时间占整个发送周期的比率。
例如,发送方从开始发送数据,到收到第一个确认帧为止,称为一个周期,设为T。发送方在这个周期内共发送L比特的数据,发送方的传输速率为C,则发送方用于发送有效数据的时间为L/C
,这种情况下信道的利用率为(L/C)/T。
信道利用率,常用的是时间角度的定义。对发送方而言,发送方在一个发送周期(发送方从发送第一个数据开始,到接收到第一个确认帧为止)内,有效地发送数据所需要的时间占整个发送周期的比率。
设发送周期为T
,这个周期内发送的数据量为L
,发送方的速率是C
,则发送方用于发送有效数据的时间是L/C
。在这种情况下,信道的利用率是
扩展以太网
在物理层拓展以太网:主机使用光纤和一对光纤调制解调器连接到集线器,使以太网的距离扩大
- 用多个集线器可连成更大的局域网,在数量上扩展。
- 用集线器组成更大的局域网,都在一个碰撞域中,
优点:使原来属于不同碰撞域的局域网上的计算机能够进行跨碰撞域的通信。同时扩大了局域网覆盖的地理范围。
缺点:碰撞域增大了,每一台计算机与另一台计算机通信都要通过主干集线器给所有计算机发送数据,但总的吞吐量并未提高。计算机数量越多效率越低,所以计算机数量不宜超过30台。如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
数据链路层扩展以太网:在数据链路层扩展局域网是使用网桥。网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口
交换式以太网
交换式以太网是指以数据链路层的帧为数据交换单位,以以太网交换机为基础构成的网络。交换式以太网允许多对结点同时通信,每个结点可以独占传输通道和带宽。它从根本上解决了共享以太网所带来的问题。
交换机本质上就是一个多接口的网桥,因此交换机也是一种即插即用设备,其内部的转发表也是通过自学习算法,通常是记录帧的源MAC
地址以及该帧进入交换机的端口号。另外,交换机也使用生成树协议,作用是让网络内部不会产生环路,计算出一条最适合的路径。
一般的交换机都采用存储转发方式,为了减小交换机的转发时延,某些交换机采用了直通交换方式,也就是把交换机当做一个分拣口。采用直通交换方式的交换机,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。直通交换的优点是交换时延非常小,但直通交换也有其缺点:不检查差错就直接将帧转发出去,因此有可能会将一些无效帧转发给其他主机。
MAC帧格式
以太网上使用两种标准帧格式。第一种,Ethernet II帧格式。第二种是1983年提出的IEEE 802.3格式。这两种格式的主要区别在于,Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理。IEEE802.3格式中,同样的位置是长度字段。
不同的Type字段值可以用来区别这两种帧的类型,当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。以太网中大多数的数据帧使用的是Ethernet II格式。
以太帧中还包括源和目的MAC地址,分别代表发送者的MAC和接收者的MAC,此外还有帧校验序列字段,用于检验传输过程中帧的完整性。 以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在物理介质上传输。
虚拟局域网(VLAN)
虚拟局域网(VLAN)是一种将局域网中的设备按照逻辑需求划分为独立组的技术,与物理位置无关。每个逻辑组即为一个 VLAN,组内设备通常具有相同的应用需求。同一 VLAN 内的设备可以直接通信,而不同 VLAN 的设备则无法直接互通。
与传统局域网不同,VLAN 并不依赖设备的物理连接,而是通过交换机或路由器等网络设备配置,实现逻辑上的网络拓扑。即使设备连接在同一物理网络中,通过交换机配置可以创建多个逻辑上独立的 VLAN,使得位于相同交换机上的设备可能无法互通,而属于同一 VLAN 的设备可以分布在不同交换机上。VLAN 是局域网的一种服务,它并未改变局域网的本质,而是提供了一种灵活的网络划分和管理方式。
早期以太网是一种基于CSMA/CD的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过二层设备实现LAN互连虽然可以解决冲突严重的问题,但仍然不能隔离广播报文和提升网络质量。
在这种情况下出现了VLAN技术。这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,广播报文就被限制在一个VLAN内。如下图所示。
因此,VLAN具备以下优点:
- 限制广播域:广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。
- 增强局域网的安全性:不同VLAN内的报文在传输时相互隔离,即一个VLAN内的用户不能和其它VLAN内的用户直接通信。
- 提高了网络的健壮性:故障被限制在一个VLAN内,本VLAN内的故障不会影响其他VLAN的正常工作。
- 灵活构建虚拟工作组:用VLAN可以划分不同的用户到不同的工作组,同一工作组的用户也不必局限于某一固定的物理范围,网络构建和维护更方便灵活。
1 | #vlan帧格式 |
VLAN链路类型,分为两种类型,一种是和路由器连接另一种就是和用户机器连接
接入链路(Access Link) 常用作连接用户主机和交换机的链路。通常情况下,主机并不需要知道自己属于哪个VLAN,主机硬件通常也不能识别带有VLAN标记的帧。因此,主机发送和接收的帧都是untagged帧。
干道链路(Trunk Link) 常用作连接交换机与交换机或交换机与路由器之间的链路。干道链路可以承载多个不同VLAN数据,数据帧在干道链路传输时,干道链路的两端设备需要能够识别数据帧属于哪个VLAN,所以在干道链路上,一般传输的帧都是Tagged帧。
- Hybrid端口:是一种能够同时处理多个VLAN的交换机端口类型。它结合了Access端口和Trunk端口的功能,能够在同一端口上处理标记帧(Tagged)和未标记帧(Untagged),因此可以支持多个VLAN的通信需求。
Vlan
划分根据以下原理或者目的。
无线局域网*
无线局域网WLAN(Wireless Local Area Network)是一种无线计算机网络,使用无线信道代替有线传输介质连接两个或多个设备形成一个局域网LAN(Local Area Network),典型部署场景如家庭、学校、校园或企业办公楼等。WLAN是一个网络系统,而我们常见的Wi-Fi是这个网络系统中的一种技术。所以,WLAN和Wi-Fi之间是包含关系,WLAN包含了Wi-Fi。
IEEE 802.11标准
基于IEEE 802.11系列标准,利用高频无线射频(如2.4GHz、5GHz或6GHz频段的无线电磁波)作为传输介质的无线局域网。也就是日常生活中的WIFI。具体信息还是看上面的链接。
第四章 网络层
在网络层中常用的设备是路由器。路由器的主要功能是接收、分析并在不同网络之间转发数据包。数据包到达路由器时,路由器会检查目标地址,并通过查阅路由表选择最佳路径,将数据包沿该路径传输到目的地。
在互联网的抽象环境中,路由器通过IP地址定位互联局域网中的指定主机,并实现路由选择和数据包转发,确保数据从源地址准确传送至目标地址。网络层通过IP地址标识设备,并根据路由算法确定最佳传输路径。此外,它还负责数据包的分片与重组,以适应不同网络的最大传输单元(MTU)限制,并提供基本的差错检测和流量控制,确保在复杂网络环境中数据可靠传输。
具体的网络层通过实现分组转发和路由选择来传递信息。
分组转发是指网络层将收到的IP数据包根据目标IP地址转发到下一跳的过程,通常通过路由表来决定转发路径;而路由选择是指网络层根据网络拓扑结构和路由算法动态选择数据包从源地址到目标地址的最佳路径,以优化传输效率和网络资源使用。
路由器的主要工作是为每个经过的数据包寻找最佳传输路径,并将数据高效传送到目的地。为实现最佳路径选择,路由器维护了一张包含周边网络拓扑和路径参数的路由表。
下一跳是路由表中的一个IP地址条目,指示数据包传输路径中的下一个目标路由器。通过每一跳,数据包依次通过不同的网络设备,最终到达目的地。
路由器通常用于连接和隔离不同的网络,因此,连接在不同路由器上的网络通常是独立的。
每一个路由器都有一个路由表,记录了网络路径信息。这些信息通常由目标网络,子网掩码,下一跳地址还有接口组成。
向上层提供服务
网络层向传输层只提供简单灵活的,无连接的、尽最大努力交付的数据报服务。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由⽹络的主机中的运输层负责可靠交付(包括差错处理、流量控制等)
- 无连接的数据报服务
无连接数据报服务的大致意思是:起点和终点确定,传输顺序不定,不保证交付。核心思想是:可靠通信由用户主机自行保证。在传输过程中,无连接数据报服务会直接丢弃检测到的错误分组。此外,用户和其他用户的网络层是互通的,网络层不需要建立多余的连接,传输的分组可以自由选择路径,因此分组的首部需要包含目的主机的完整地址。
- 面向链接的虚电路服务
发送数据前需要先建立一个逻辑上的连接,即虚电路,确保发送方和接收方之间的路径已预先确定。这个服务类似于电话系统的工作方式,在通信开始前双方建立连接,通信结束后再释放连接。
网际协议(IP)
IP地址的作用是标识互联网上的设备。之所以需要IP地址,主要原因是MAC地址只能在局域网内使用,而IP地址则可以在全球范围内工作。此外,二者作用的层级也不同,分层设计使网络管理更加高效。还有IP地址是灵活的,可以更换也可以添加,这也提供了私密性。
举个例子,类似于寄送快递:如果仅依靠MAC地址(相当于你家里的具体地址),快递在运输过程中缺少全局规划,难以预测到达的顺序。通过分层设计(如国家、省、市、县等层级),则能够更清晰地跟踪和规划路线,确保快递按照最优路径抵达你手中。同样,IP地址通过网络层级结构实现更高效的路由和追踪,确保数据包能够在全球范围内找到最优路径传输。和 IP 协议配套使⽤的还有三个协议:地址解析协议 ARP、⽹际控制报⽂协议 ICMP、⽹际组管理协议 IGMP
异构网络互联
IP的作用是辅助异构网络互联,如果要把在全世界数以百万计的网络都互相连接起来,并且能够相互通信,是一件很复杂的事情。网络技术是不断发展的。网络的制造厂家也要经常要推出新的网络,在竞争中求生存,因此在市场上总是有很多不同性能、不同网络协议的网络。**将⽹络互相连接起来要使⽤⼀些中间设备。中间设备⼜称为中间系统或中继 (relay)系统。**有下面五种中间设备:
- 物理层中继系统:转发器 (repeater,中继器);
- 数据链路层中继系统:⽹桥 或 交换机
- ⽹络层中继系统:路由器 (router);
- ⽹桥和路由器的混合物:桥路器 (brouter);
- ⽹络层以上的中继系统:⽹关 (gateway)。
实际的互联网是通过一些路由器连接的,由于参与互联的计算机网络都使用相同的网际 IP 协议,因此可以把互联以后的网络看成是一个虚拟互联网络。
IP 协议能够将性能各异的网络统一呈现为一个完整的网络,从用户的角度看,仿佛是一个巨大的局域网。使用 IP 协议的虚拟互联网络,也称为 IP 网。整个过程中,分组信息在未达到目的地址之前,所有的传输都是通过路由器的间接交付完成的。每个路由器根据路由表和路由算法,选择最佳路径将数据包逐步转发,直到最终到达目标地址并进行直接交付。
在这个传递分组信息的过程中,IP地址的作用就是给互联网中上的每一台主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32位的标识符。
IP 地址的编址方式经历了三个历史阶段
分类的 IP 地址。这是最基本的编址方式。
子网的划分。这是对最基本编址方式的改进。
构成超网。这是比较新的无分类编址法。
IPV4编址*
IPv4地址采用点分十进制(二进制按照一定的区间转化为十进制)表示方法,由32比特构成。
32比特的IPv4
地址分为网络号和主机号
网络号是确定数据包转发至哪个网络的关键信息,路由器的作用在于连接不同的网络号。主机号则用于标识网络或子网内的具体设备。在计算机中,子网掩码用于分离网络号和主机号。这里的子网将一个大区域的网络划分为较小的网络,与VLAN不同,子网通过物理隔离实现网络分割,依赖于路由器的连接方式。而VLAN是在数据链路层通过逻辑作用的划分,它不涉及硬件的相对位置变化。
分类编址是调整网络号和主机号的位数,来实现分类的。但是之后出现的CIDR分类方式完全替代了这种分类。
A类B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。单播地址是用于标识网络中单个接口的唯一IP地址,确保数据包能够精确传输到特定的目标设备。
主机号为全0的地址是网络地址,不能分配给主机(或路由器)的各接口。网络地址用于标识一个特定的网络或子网的范围,而不是一个具体的主机。网络地址帮助定义子网的范围,并用于路由和网络配置。它不指向网络中的任何具体设备,而是标识整个子网。
主机号为全1的地址是广播地址,不能分配给主机(或路由器)的各接口。广播地址涉及到很多东西,之后在DHCP中会了解到
分类地址计算
A类地址的范围是
1.0.0.0
到126.255.255.255
。其中127.0.0.0
到127.255.255.255
是特殊用途的回环地址,不用于正常的网络通信。B类地址
128.0.0.0-191.255.255.255
C类地址
192.0.0.0-223.255.255.255
网络号和主机号的关系如下:网络号位数 = 32 - 主机号位数
、子网掩码的位数与网络号位数相同、主机号位数越多,可分配的地址数量越多
假设一个网络 192.168.0.0/24
(这里的子网掩码的表示其实是CIDR)
- 网络号的位数:
24
- 主机号的位数:
32 - 24 = 8
- 可分配的主机地址数量:
2^8-2 = 254
- 网络地址:
192.168.0.0
- 广播地址:
192.168.0.255
- 可用主机地址范围:
192.168.0.1
到192.168.0.254
网络号表示不同的网络,是计算机识别网络的一种方式。主机号表示可分配的地址位数。由于主机号的每一位可以有两种状态(0或1),一个网络号下的主机数量为 2^主机号位数
。实际可用的主机地址数量为 2^主机号位数 - 2
,因为全0和全1的地址分别保留用于网络地址和广播地址。
网络类别分配的网络号,网络类别A、B、C、D、E的区别在于其网络号的位数、范围和用途。
特殊的ip地址
,这类ip
是不可以分配给主机的
划分子网
子网可以被视为网络内部的子网络。由于网络号是固定的,分配子网需要从主机号借用位数,借用的位数决定可以分配的子网数量。例如,借用2位主机号,就可以多出2^2 = 4
个子网。剩下的主机号位数决定每个子网内可以分配的主机数量。
举个例子:如果要将一个子网掩码为/25
的网络(意味着网络号有25
位),划分为5
个子网区域,需要从主机号借用3
位(2^3 = 8
,足以分配5个子网)。这样,子网的子网掩码从/25
变为/28
。每个子网的可分配主机数量为2^(32-28) - 2 = 2^4 - 2 = 14
。使用子网的目的就是节省ipv4
地址,避免对ip
地址的浪费,一般用户使用的分配管理操作都是通过DHCP
服务器来实现的。
划分子网是一个单位内部的事情,对外(其他网络)仍然表现为一个没有划分子网的网络。
- 位数较小的子网掩码可以包含位数较大的子网掩码。即一个大网络可以被划分为多个更小的子网。
- 每一个IP网段可以划分的子网数量:
2^(借用主机号的位数)
。IP网段指的是一组具有相同网络前缀的IP地址。
子网掩码用于划分子网,表示网络号和主机号的位数。IPv4 地址总共有 32 位,其中网络号和主机号的总和为 32 位。子网掩码的格式是:网络号部分的位全为1,主机号部分的位全为0。例如,对于子网掩码 /24
,其表示的形式是:11111111.11111111.11111111.00000000
,其中前24位是网络号,后8位是主机号。
一个未划分子网的B类地址共有65,534个可用地址。为了避免在顺序分配时产生混淆,可以将这些地址划分为多个子网。这样做有助于规范管理和分配所有地址,使网络管理更加清晰和高效。
划分之后,IP地址值的范围缩小,变得更容易管理。
划分子网的主要目的是将网络地址进行有规律的分配,避免在分配地址时混乱。它通过定义明确的网络段,使得管理和路由更加高效和清晰,而不是直接节省IP地址数量。
子网掩码
子网掩码是一个32位地址,这是一种与IP地址结合使用的技术。 它具有两个主要功能。
- 一种是屏蔽IP地址的一部分,以区分网络ID和主机ID,并指示IP地址是在局域网上还是在远程网络上。
- 第二个是将大型IP网络划分为若干个小型子网。
通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是将计算机的十进制IP地址和子网掩码转换为二进制形式,然后执行二进制AND计算(全1则得1,不全1则得0)。 如果结果相同,则两台计算机属于同一网段。
已知某个网络的地址为218.75.230.0
(C类地址255.255.255.0
),使用子网掩码255.255.255.128
对其进行子网划分。从主机位借了1
位,最高位是2^7 = 128
。从而我们知道是划分了两个子网(2^1
),也就知道了每一个子网的地址范围是0 - 127
。
在32位的点分十进制表示法中,每个字节是8位,代表的权重是:128、64、32、16、8、4、2、1。这些权重可以用来计算每个字节的具体数值。例如,字节 11000000
表示的十进制数是 128+64=192
。
对于A类地址来说,默认的子网掩码是 255.0.0.0
、对于B类地址来说,默认的子网掩码是 255.255.0.0
、对于C类地址来说,默认的子网掩码是 255.255.255.0
无分类编址(CIDR)*
传统的IP地址分类存在一些不适应的问题。例如,C类地址最多支持254个主机,这对于一些中小型网络来说可能不够。而B类地址则支持最多65534个主机,这对于大多数企业来说可能过多。因此,传统分类方式难以灵活地满足各种规模网络的需求。
为了解决这一问题,引入了无类别域间路由(CIDR)。CIDR打破了传统的IP地址分类,将32位
IP地址划分为前面的网络号和后面的主机号。这种方法提供了更大的灵活性和效率,可以根据实际需求按需分配IP地址,从而实现更高效的网络资源利用。
CIDR 的优点包括:
- 变长网络前缀:CIDR 使用变长的网络前缀替代传统的固定网络号和主机号,使IP地址从三级编址(子网掩码)回到两级编址。这样提供了更大的灵活性,能根据需求精确划分网络。
- CIDR 地址块:CIDR 允许将网络前缀相同的连续IP地址组成CIDR地址块,一个地址块可以表示多个地址。这种地址聚合(路由聚合)减少了路由表项,提高了路由效率,优化了互联网性能。
- 高效的IP地址分配:CIDR 通过按需分配合适大小的地址块,避免了IP地址的浪费,实现了更高效的IPv4地址空间利用。
CIDR也被称之为使用变长长的子网掩码划分区域
由于一个CIDR地址块可以包含多个IP地址,路由器的路由表能够利用这些地址块(即子网的IP地址网络号)来查找目的网络。这种方法被称为路由聚合(Route Aggregation),它使得路由表中的一个条目可以替代传统分类地址中的多个条目,从而简化了路由表。
路由聚合也被称为超网(Supernetting),其主要优势在于减少了路由器之间交换路由信息的需求,进而提升了整个互联网的性能。可以简单理解为使用一个更大的IP网段地址来表示该IP网段及其所有子网。
超网的概念与子网类似——子网是将大网络分割成多个小网络,而超网则是将多个小网络合并成一个大网络。这种合并使得多个连续的C类网络地址能够聚合到一个物理网络上,允许该网络使用一个共同的地址前缀。
- 超网的目的是将多个连续的 C 类网络地址合并到一个物理网络中,这样该网络就可以使用这些地址的共同前缀作为其网络号。
- 超网的创建解决了路由列表过于庞大的问题,并为 B 类地址空间的耗尽提供了解决方案。它允许一个路由表条目表示多个网络,就像一个区域代码代表一个地区的电话号码集合一样。
- 超网(路由聚合)技术旨在解决路由表冗余的问题,也就是路由表不用记录这个子网的所有IP地址了,只需要记录这个子网络的网络号。通过这种技术,路由表的规模可以大幅缩小,从而减少所需的内存。
总结:链路聚合的目的是减少路由器的路由表条目。通过将多个相邻的IP地址块合并为一个更大的地址块,路由器能够只记录该子网络的网络号。这样,在传输数据到某个IP地址时,路由器可以根据其路由表中记录的网络号进行查找,从而快速找到目的网络。这种方法显著提高了路由效率,减少了路由表的冗余,进而提升了整个网络的性能。
IPv4地址与MAC地址
IPv4地址和MAC地址的一大特点是它们的唯一性。IP地址通常由ISP分配,但在本地网络中也可以通过路由器动态分配。MAC地址则是硬件地址,通常由设备制造商分配,并嵌入到网络接口卡中。IP地址的分配通常与网络拓扑结构和地理位置有关,同一设备在不同地理位置和网络中可能会获得不同的IP地址。而MAC地址与地理位置无关,通常情况下,不论设备连接到哪个网络,MAC地址都保持不变(虽然可以通过软件手段修改)。
同时,它们在OSI模型中的位置不同:MAC地址位于数据链路层,而IP地址位于网络层。在TCP/IP协议上,MAC地址位于数据链路层,IP位于网际层。如果以范围为准,MAC地址通常在局域网中使用属于数据链路层的概念,通过MAC地址,设备可以在局域网内接收和发送数据,利用网络广播获取小范围内的所有信息。然而,MAC地址缺乏地理位置信息,并且只能在局域网内工作,无法跨越不同的网络进行通信。
相比之下,IP地址由互联网服务提供商(ISP)和互联网号码分配机构(IANA)集中管理,确保了其全球唯一性和规范性。IP地址的分配可以通过动态主机配置协议(DHCP)灵活进行,允许设备根据网络需求自动获得一个IP地址。这种灵活性使得设备能够在不同的网络中移动,并在数据包传输时适应不断变化的网络拓扑结构,极大地提升了数据通信的灵活性和可靠性。
在使用交换机的局域网环境中,交换机会记录每个设备的MAC地址,并根据这些地址来进行数据帧的转发。然而,当需要在大规模网络中进行数据传输时,MAC地址的作用就受到了限制。因为它的作用范围值局限于局域网无法互通其他网络。IP地址的引入解决了这个问题,因为它提供了网络层的寻址能力。路由器根据IP地址的子网信息转发数据包,而不需要记录每个设备的具体MAC地址。这不仅简化了路由器的工作,还大大提高了数据传输的效率和可扩展性。
可以将这个过程比作送快递:信息就像一个快递包裹,由门卫(交换机)接收和转发。IP地址相当于快递单上的收货地址,MAC地址相当于收件人的姓名(MAC包含信息的范围有限)。中转站和快递员则类似于路由器,它们只关注包裹的目的地地址(IP地址),而不关心具体的收件人(MAC地址)。因此,MAC地址主要用于局域网内的通信,而IP地址则适用于在不同网络之间进行远程数据传输。路由器和交换机只需要知道它们负责的区域信息,不需要记住每个设备的详细信息,这使得IP地址更适合用于实现远程数据包传输。
封装位置:如图所示,IP地址封装的区域是在网际层;MAC地址封装的区域是在数据链路层。
在数据包的传输过程中,IP地址始终保持不变,这是因为IP地址位于网络层(即网际层)的首部,用于标识数据包的源地址和目的地址,从而确保数据包能够在网络中正确路由到目标设备。正如前面提到的,IP地址提供了逻辑上的寻址,适用于跨越不同网络的通信。
然而,随着数据包经过不同的网络设备,MAC地址会不断更新。这是因为MAC地址位于数据链路层的首部,用于在局域网中标识和转发数据包。每当数据包从一个网络段进入另一个网络段时,交换机会使用目标网络段的MAC地址来确保数据包在局域网内的正确传输。
通过IP来解析目的MAC地址,也就是ARP协议(地址解析协议)
地址解析协议ARP
在访问网络的过程中,数据传输速率非常快。为了在如此短的时间内找到指定的IP地址并建立通信连接,需要迅速在不同的网络中进行交换,以定位到目标网段。
通常,在访问网页时,我们输入的是域名,通过域名系统(DNS)将其解析为IP地址。获得IP地址后,可以使用地址解析协议(ARP)来找到目标设备的MAC地址。数据从一台电脑发送到另一台电脑时,会被封装成帧。一个帧的组成结构如下:
如果我们不知道源地址和目的的MAC地址,我们就无法将数据封装成帧,也就无法发送这条信息了。
在主机中,会记录一个高速缓存表,称为 ARP 缓存表,记录 IP 地址和 MAC 地址的对应关系。当主机需要发送数据包时,会在这个表中查询对应的 MAC 地址信息。
如果查询不到,就会发送对应的ARP请求报文,使用广播的方式请求指定的MAC地址。当然,是携带了目的地址的IP信息,当不符合目的地址的IP主机查询到这个广播信息会直接忽略。
然后对应的响应报文就会从目的主机中以单播的方式发送出来,这样发送方就知道了目的主机的MAC地址了
得到的ARP数据会保存一段时间,时间大致为两分钟。之所以要在一段时间之后删除这些数据,是因为要保持ARP缓存的有效性和准确性。同时,大部分的主机用户都是使用DHCP服务动态生成IP地址,其IP地址会频繁更换,所以说定时删除可以减少内存压力。
ARP协议在同一局域网内使用广播来解析MAC地址,但不能跨网络使用。跨网络时,路由器的路由表可以提供所需的MAC地址。
IP数据报的发送和转发
同一个网络的主机可以通过交换机(也就是局域网用MAC地址通讯)直接进行通信,因为交换机在同一个局域网内使用MAC地址进行数据包转发。对于不同网络的主机,它们需要通过路由器进行网络中转。路由器负责在不同网络之间转发数据包,并决定最佳的传输路径。
ARP(地址解析协议)的功能是通过本地网络中的IP地址查询目的主机的MAC地址。具体来说,ARP协议根据目的地址的IP,来查找和确定目标设备的MAC地址,以便在同一局域网内实现数据链路层的数据传输。
在同一个网络中,不同地址块之间的信息是直接交付的。原理是连接的交换机会记录每个地址块上主机的MAC地址,通过这个MAC表来索引并传递信息。
在不同网络之间的信息交付是间接的,通过路由器来实现。路由器通过比较IP地址和子网掩码来确定数据包的传输路径。例如,如果子网掩码是/25,那么路由器会取出IP地址的前25位进行比较,以确定目标网络。
通过链接不同网络的路由器中的路由表进行查询,路由表由ARP广播获取。广播行为可以看作是一种类似泛洪的方法
广播的过程就是ARP在表中填写信息的过程,
IPv4数据报格式
IP数据报格式封装的内容,由IP首部格式来确认。IP首部规定了IP数据报需要封装的内容大小,以及其规范的长度和组成。类似于寄信,需要指定的邮票和目的地址。
静态路由配置
静态路由是一种网络路由配置方法,路由信息由网络管理员手动配置并固定在路由器的路由表中,说人话就是手动配置路由信息,让别的路由器知道它连接了哪些设备。
在路由器中,配置静态路由时,需要指定三个数据:目的网络地址、子网掩码和下一跳地址(该路由器连接的下一个路由器)。配置静态路由的过程包括设置这些数据,以便路由器知道如何将数据包转发到指定的网络。
下一跳是指在路由器中配置的路由目标地址,决定了数据包转发的方向。路由器的端口通过其配置的IP地址决定了下一跳的位置,从而实现两个网络之间的数据转发。
如果需要将IP数据报转发到互联网的某个网络,通常需要配置默认路由。默认路由具有最低的优先级,仅在没有其他匹配的路由时才会被使用。
配置的特定主机路由,其优先级最高。
动态路由配置
路由选择协议是动态计算和维护路由表的工具,它们能够自动适应网络拓扑的变化,并选择最佳路径以优化数据传输。主要类型包括距离向量协议、链路状态协议、混合协议和路径矢量协议,每种协议都有其特定的使用场景和特点。
在因特网中,采用的是分层次的路由选择协议
网关可以是多种设备,除了路由器外,还可能包括专用的网关设备、防火墙、代理服务器等。它们用于在不同网络之间进行通信和协议转换。简单来说,网关通常是连接不同网络的设备,充当网络间的接口,帮助区分和连接不同的网络环境。
内部网关协议(IGP)作用于一个自治系统(AS)内部,通过与多个路由器交换信息来实现网络内的路由管理。自治系统指的是一个由一个或多个网络组成的集合,这些网络在同一管理机构下运行,并使用统一的路由策略和协议。
路由信息协议(RIP)*
路由信息协议是一种动态路由协议,用于在IP网络中实现路由选择和信息传递。RIP基于距离矢量算法,并用于管理网络中路由器的路由表。核心在于路由选择,属于网际层。
- 距离度量:RIP使用跳数作为度量标准,每个跳数代表一个路由器经过的步骤。一个网络的最大跳数是15跳,超过15跳的路由被视为不可达。
- 更新周期:RIP协议定期广播路由信息,每30秒更新一次。路由器会接收这些更新,并根据收到的信息来调整其路由表。
- 路由表:每个RIP路由器都有一个路由表,其中记录了到达不同网络的最佳路径和跳数。
- 收敛时间:由于RIP采用距离矢量算法,其收敛时间较长,需要一段时间才能让网络中所有路由器同步到一致的路由信息。在寻找最短路径时,路由信息逐跳传递,直至到达目标节点。当网络出现不通时,路由器可能会不断尝试更新路由信息,最多允许15跳,超过该限制时被视为不可达。这延长了RIP的更新周期,导致收敛速度较慢(路由表构建时间较长),这可能会引发短暂的路由环路问题,影响网络的整体稳定性。
RIP适合用于小型和中型网络,因为它的跳数限制和收敛速度对于大型网络来说可能不够理想。
RIP网络有三大特点:仅与相邻路由器交换信息、交换路由器的路由表信息、周期性交换信息,拓扑变化的时候自动出发更新
RIP 协议的问题:好消息传播的快,坏消息传播得慢
- 当网络拓扑发生变化(例如,新增一条更短的路径)时,RIP路由器会很快得知此信息,因为RIP每隔30秒就会广播它的路由表。假设一条新的更短路径被发现,RIP路由器会立即更新其路由表并在下一次广播中传播这条信息。由于这种周期性的广播机制,新路由信息会快速传播到整个网络,所有路由器都会更新它们的路由表以反映新的、更优的路径。
- 计数到无穷大问题:当一条路由变得不可达时(例如一条链路断开),RIP不会立即知道这条路由失效了。相反,由于路由器只是周期性地更新其路由表,它们可能继续向邻居宣告失效的路由。由于跳数最大为15(超过此值的跳数被认为是不可达的无穷大),路由器将继续增加跳数直到达到16,表示该路由不可达。这种逐步增加跳数的过程可能需要很长时间(尤其在更大的网络中),这就是为什么坏消息传播得慢。
为了加速坏消息的传播并避免路由环,RIP使用了路由中毒技术。路由中毒意味着当一个路由器检测到某条路由不可达时,它会立即将该路由的跳数设置为16(无穷大)并广播给所有邻居。然而,即便如此,由于RIP的周期性广播和其他路由器的相互依赖性,坏消息的传播仍会有一定延迟。
最短路径有限协议(OSPF)*
记忆两个就行:泛洪法和分组类型
OSPF(开放最短路径优先)是一种基于链路状态的动态路由协议,旨在提高不同网络之间的通信效率。与静态路由相比,OSPF能够自动适应网络拓扑的变化,并选择最佳路径进行数据传输。它的设计初衷是为了解决RIP(路由信息协议)的缺陷。它使用了迪杰斯特拉(Dijkstra)算法来计算最优路径。与基于距离向量的RIP不同,OSPF基于链路状态,不需要记录跳数,从而有效避免了环路的出现。此外,OSPF不限制网络规模,并且具有较快的更新速度。
在OSPF中,每条路由链路都会被分配一个代价。代价可以由管理员手动设置。例如,思科设备中的OSPF代价计算方法是通过将参考带宽(通常是100 Mbps)除以实际带宽得到的结果,向下取整,确保结果不低于1。这种处理方式有助于避免代价过低的情况,同时简化了计算过程。
代价越低:表示链路的开销越小,这通常意味着链路的带宽越高。OSPF会优先选择代价低的链路作为最佳路径。换句话说,代价低的链路被认为更优越,更适合传输数据。
代价越高:表示链路的开销较大,通常意味着链路的带宽较低。因此,代价高的链路在路径选择中优先级较低,不是首选路径。
OSPF
相邻路由器之间通过使用Hello协议来建立和维护邻居关系,通过发送Hello
包(Hello
协议的分组),路由器会周期性地广播这些包到其接口,来发现网络上的其他OSPF路由器。Hello
包包含本路由器的基本信息、协议版本、Router ID
等。
每个在OSPF中的路由器都会建立一个邻居表,记录邻居路由器的信息,包括邻居路由器的IP地址、邻居的状态、保持存活的倒计时以及连接的端口号等。
每个路由器都会生成链路状态广告(LSA),里面刊登了当前路由器的信息,用于其他路由器的登记。
- 当前路由器的状态信息:包括路由器接口的IP地址、子网掩码、接口的状态(如启用或禁用)、接口的代价等。
- 邻居关系信息:包括与其他OSPF路由器的邻接关系(邻居关系),以及这些邻居的路由器ID。
链路更新分组的时候会使用洪泛法(Flooding):向整个OSPF区域内的所有路由器发送链路状态更新(LSA)分组
- 确保更新信息快速传播:洪泛法确保路由器生成的每一个LSA都能迅速传播到整个OSPF网络中的所有其他路由器,从而使整个网络的链路状态数据库保持同步。
- 防止循环和冗余传播:洪泛法采用序列号、年龄等机制来防止相同的LSA在网络中无限循环或被重复处理,从而保证了网络的效率和稳定性。
链路状态数据库(LSDB),在使用OSPF中的每一个路由器都会有这个数据库。LSDB记录了邻居路由器的LSA,供OSPF路由算法使用,以计算最短路径树并生成路由表。这里是利用了洪泛法来更新路径
使用OSPF的路由器,通过比对LSDB进行最短路径优先计算,构建出各自到达其他路由器的最短路径,这里就是构建各自的路由表。构建最短路径的过程使用的是Dijkstra算法。
分组类型指的是不同类型的控制信息和数据包
- Hello分组:建立和维护邻居关系。
- 数据库描述(DBD)分组:
- 链路状态请求(LSR)分组:请求特定的LSA以更新LSDB。
- 链路状态更新(LSU)分组:发送新的或更新的LSA。
- 链路状态确认(LSAck)分组:确认已接收到的LSA。
为了减少发送问候分组和链路状态更新的数量,OSPF采取了选举指定路由器(DR)和备用指定路由器(BDR)的机制来优化更新分组的传播
指定路由器(DR)
- DR负责在多访问网络(如以太网)中收集和分发LSA,减少了冗余的LSA传播。
- 所有其他路由器只与DR交换LSA,而不是与所有其他邻居交换,从而减少了LSA的数量。
- DR会在网络中广播和接收所有LSA更新,确保网络的一致性。
备用指定路由器(BDR)
- BDR是DR的备份,在DR失效时接替其职责,确保网络的稳定性和可靠性。
- 在DR正常工作时,BDR也会接收所有的LSA,但不会广播LSA,除非它接替了DR的角色。
从子网的角度来看,使用泛洪法对整个园区进行信息传播是低效的。我们可以在连接路由器的主干区域中选举一个路由器,让它负责记录绝大部分的路由信息。其他路由器只需向这个路由器发送其链路状态广告(LSA)信息。这种操作称为划分区域,其目的是将链路状态信息的交换限制在每个区域内,而非在整个系统中进行,从而减少整个网络的通信量。
- 区域的划分:OSPF网络可以被划分成多个逻辑区域,每个区域内的路由器仅在区域内交换链路状态信息。每个区域有一个独特的标识符,通常以数字表示(如区域0称为骨干区域)。
- 减少通信量:在一个区域内生成的LSA只会在该区域内传播,不会传递到其他区域。这样,洪泛法仅在区域内部操作,限制了链路状态信息的传播范围,降低了整个网络的通信负担。
- 区域边界路由器(ABR):区域边界路由器(ABR)连接不同的区域,负责在区域之间传递路由信息。ABR会将区域内的路由信息汇总并简化后,再通报给其他区域,从而进一步减少了传播的信息量。
- 骨干区域(Area 0):所有的非骨干区域都必须直接连接到骨干区域,骨干区域负责汇总和分发全网的路由信息。这种结构有助于组织和优化路由信息的分发,保持网络的高效性和可扩展性。
外部网关协议(BGP)
BGP(边界网关协议)是一种用于在不同自治系统(AS)之间交换路由信息的协议。自治系统可以看作是划分的区域,连接这些区域的路由器构成了拓扑。在不同自治系统之间,路由器不能直接相连,而是需要通过外部网关协议(EGP)进行通信,通常通过选举的路由器来实现。
使用BGP的原因在于不同自治系统(AS)之间的度量单位和路由策略可能各不相同。BGP的目标是寻找一条能够到达目的地且相对较优的路由,而不是绝对的最佳路由。
配置BGP的关键在于选择两个自治系统(AS)中的路由器作为BGP对等体,这些路由器被称为发言人,负责在不同自治系统之间交换路由信息。在自治系统内部,OSPF记录每个路由器之间的网络代价及其他属性,以帮助路由器计算最佳路径。而BGP的发言人角色则专注于处理跨自治系统的路由交换,同时这些路由器也会继续执行其原有的OSPF任务。
通过选举每个自治系统的发言人,可以实现多个不同自治系统之间的通信。也就是通过每个自治系统中和其他自治系统相连的路由器传输信息
路由器的工作原理
路由器的工作原理可以概括为两个基本过程:路由选择和数据传输。路由选择是指路由器根据路由表选择最佳的路径,将数据包传输到目标地址。数据传输是指路由器将数据包从一个网络传输到另一个网络。
下列是数据信号通过路由器转发的过程:
数据信号首先进入到物理层中解包为比特流
比特流传输到数据链路层,拆分成帧
在网络层拆包成数据分组
数据分组传入路由器中,根据路由表记录的MAC地址或者记录的IP地址传输到指定的端口中。
传输到指定的端口的网络层,封装成帧传输到链路层中
在物理层转换成比特流变成信号传输到信道中
下面是路由报文(路由信息)更新的流程:
路由报文在网络层中被处理,传入路由器后通过动态路由更新方法更新路由表
路由表对网络拓扑的变化进行计算和优化,并将计算结果写入转发表。
路由表用于更新当前路由器的转发表。当信号通过路由器时,路由器使用转发表中的逻辑来决定如何转发数据。
总结
网际控制报文协议(ICMP)*
网际控制报文协议(ICMP,Internet Control Message Protocol)是一种网络协议,用于在IP网络中传递控制和错误报告信息。ICMP在IP层(网络层)运行,主要用于发送和接收与网络状态和错误处理相关的消息。它并不直接用于数据传输,而是帮助网络管理和故障排除。ICMP协议的类型被分为两大类:查询报文和差错报文。
差错报文类型会显示出不同的报错,通常有五中报错方式
终点不可达
源点抑制
超时
参数问题
重定向
在 ICMP 协议中,询问报文(主要指回显请求)用于网络测试和诊断。它是网络维护工具中重要的部分,通过检测网络设备的连通性和性能来帮助管理员识别和解决网络问题。
常用的命令语句有:
- ping:用于测试网络设备的连通性和测量延迟。
- tracert:用于追踪数据包从源设备到目标设备的路径,以及每跳的延迟。
- pathping:结合了
ping
和tracert
的功能,用于分析数据包丢失和延迟,并提供详细的路径信息。 - mtr:是
tracert
和ping
的结合,提供连续的实时路由和延迟信息。 - ping6:用于测试 IPv6 网络的连通性。
- ping -t:持续发送 ICMP 回显请求报文,直到手动停止(通过
Ctrl+C
) - ping -c:指定发送 ICMP 回显请求报文的次数。
虚拟专用网(VPN)
虚拟专用网(VPN)发明的目的是为了让不同的网络能够通过不安全的公共网络进行安全的通信。VPN利用公用的以太网作为通信载体,在以太网上构建一条加密的信息通道,从而保证数据传输的安全性。当然,这需要了解通信双方的IP地址,这类IP地址被称为专用地址。
在配置VPN时,发出方和接收方之间需要进行相应的配置,通常包括加密密钥和解密密钥。这些密钥用于加密和解密传输的数据,确保只有授权的用户能够访问通信内容。
通过在以太网上加密数据,VPN实现了安全通信。发送时,数据包首部会填写源地址和目的地址,然后传输加密后的内部IP数据报。这使得整个传输过程看起来就像是在本机构的专用网上进行一样,尽管实际使用的是公共网络。
网络地址转换(NAT)
网络地址转换(NAT)的目的是为了缓解IPv4地址空间的耗尽问题。NAT的主要功能是将内部网络(局域网)的私有IP地址转换成公共IP地址,以便在外部网络上进行通信,同时也能将外部网络的访问IP地址转换成内部网络的IP地址,从而允许内部网络设备通过一个或少数几个公共IP地址访问互联网。这不仅节省了IP地址资源,还增强了网络的安全性。
私有地址是指在局域网内部使用的IP地址,这些地址不直接在互联网中进行路由。当流量从这些私有IP地址发送到外部网络时,会通过NAT转换为公共IP地址,以便与互联网进行通信。因此,对外网络使用的是配置为NAT的公共IP地址,而对内部网络则使用私有IP地址。
10.0.0.0 到 10.255.255.255(10.0.0.0/8)
172.16.0.0 到 172.31.255.255(172.16.0.0/12)
192.168.0.0 到 192.168.255.255(192.168.0.0/16)
NAT的转发流程如下:
当私有网络中的计算机发送数据包时,它会使用它的私有IP(192.168.0.10)(不唯一)地址作为源IP地址。
NAT路由器接收到数据包后,会将源IP地址更改为NAT路由器的公共IP(36.111.64.85)地址,并将此映射关系保存在转发表中。
NAT路由器将数据包转发到Internet上的目标计算机。
当目标计算机回复数据包时,它会使用NAT路由器的公共IP地址作为目标IP地址(36.111.64.85)。
NAT路由器接收到回复数据包后,会查找转发表以确定它所属的私有网络,并将目标IP地址(36.111.64.86)更改为私有IP地址(192.168.0.10)。
NAT路由器将回复数据包转发到私有网络中的计算机。
每一个局域网网络都有一个公共的IP地址(ISP分配的),如果要与其他网络进行通信,可以使用NAT(网络地址转换)将本地IP地址转换为公共IP地址。具体来说,当需要发送IP数据报时,本地网络设备会将数据报中的本地IP地址替换为公共IP地址,这样就可以实现跨网络的通信。
IP多播*
IP多播,目的是实现一种一对多的通讯技术,与传统的一对一通讯,多播可以节省网络资源,在以太网上进行的多播,被称之为IP多播。
IP多播通信必须依赖于IP多播地址。在IPv4中,IP多播地址属于D类IP地址,范围从224.0.0.0到239.255.255.255,分为三类:局部链接多播地址、预留多播地址和管理权限多播地址。
局部链接多播地址(224.0.0.0 - 224.0.0.255):这些地址为路由协议和其他用途保留,路由器不转发属于此范围的IP包。
预留多播地址(224.0.1.0 - 238.255.255.255):这些地址可用于全球范围(如Internet)或网络协议。
管理权限多播地址(239.0.0.0 - 239.255.255.255):这些地址可供组织内部使用,类似于私有IP地址,不能用于Internet,以限制多播范围。
使用同一个IP多播地址接收多播数据包的所有主机构成一个主机组,也称为多播组。多播组的成员是动态的,主机可以随时加入或离开多播组,成员的数量和地理位置没有限制。一台主机也可以属于多个多播组。此外,不属于某一多播组的主机也可以向该多播组发送数据包。
可使用的多播地址如下:
在局域网上,多播通信是通过MAC地址实现的。其原理是将IP多播地址映射为多播MAC地址。具体来说,IP多播数据报会封装在局域网的MAC帧中,MAC帧的目的MAC地址字段被设置为对应的多播MAC地址,从而实现对特定多播组的设备进行数据传输。
在因特网上实现多播通信,需要考虑多重路由器的转发问题。多播路由器根据IP多播数据报首部中的IP多播地址,将数据报转发到包含该多播组成员的局域网。为实现这一过程,需要借助IGMP(互联网组管理协议)和PIM(协议无关多播)协议的帮助。
IGMP协议
IGMP(Internet Group Management Protocol,互联网组管理协议)的主要作用是管理IP多播组成员资格。它在主机和多播路由器之间传递信息,用于主机向多播路由器发送加入多播组的请求,以便接收特定多播组的数据,或通知多播路由器它要离开某个多播组,停止接收该多播组的数据。
此外,多播路由器会定期发送查询消息,主机使用IGMP响应,以报告其正在加入的多播组,从而确保路由器知道当前的多播组成员情况。通过这些功能,IGMP有效管理和维护多播组成员列表,确保多播数据能够准确传递到需要接收的主机。
PIM协议
PIM(Protocol Independent Multicast,协议无关多播)协议的主要作用是支持在因特网上的多播路由。PIM不依赖于特定的单播路由协议,而是可以与任何单播路由协议(如OSPF或BGP)配合使用,以建立多播路由路径。PIM有两个主要模式:
- PIM-DM(稠密模式):适用于多播组成员分布密集的场景。PIM-DM在初始阶段会将多播数据包泛洪到整个网络,然后通过剪枝(prune)机制逐步排除不需要数据的路径,从而优化多播传输路径。
- PIM-SM(稀疏模式):适用于多播组成员分布稀疏的场景。PIM-SM通过中心化的RP(Rendezvous Point)节点来管理和优化多播路由。只有当有接收者明确请求时,PIM-SM才会建立数据传输路径,从而减少不必要的网络负载。
通过这两种模式,PIM协议能够在不同的网络环境中高效地管理和传输多播数据,确保多播数据能够准确、及时地传递到所有需要接收的节点。
多播路由选择协议
多播路由选择协议用于在网络中高效地传递多播数据包,支持多点到多点的通信。常见的多播路由选择协议包括:
- DVMRP(Distance Vector Multicast Routing Protocol):基于距离向量算法,适用于小型网络。
- PIM(Protocol Independent Multicast):分为PIM-DM(密集模式)和PIM-SM(稀疏模式),适用于大型网络。
- MOSPF(Multicast Open Shortest Path First):基于OSPF协议的扩展,适用于使用OSPF的网络环境。
反向路径多播(RPM)
反向路径多播(Reverse Path Multicast, RPM)是一种用于多播路由的技术。其主要目的是提高网络中多播数据包的传输效率和可靠性。
基本概念:
- 路径验证:RPM 通过确保每个多播数据包的来源是有效的,来验证多播路径。这意味着,如果某个节点接收到来自某个源的多播数据包,它会检查数据包的来源是否符合其反向路径。
- 反向路径:在 RPM 中,每个路由器都会维护一条到源地址的反向路径。如果多播数据包的来源与这条路径匹配,数据包就会被处理和转发。否则,数据包会被丢弃。这种方法可以防止无效的数据包或来自未知来源的多播流量进入网络。
- 多播组管理:RPM 通常用于网络层的多播路由协议中,例如 PIM-SM(Protocol Independent Multicast - Sparse Mode)。在这种模式下,RPM 帮助确保多播组的成员能够正确接收到数据。
工作原理:
- 当一个源节点开始发送多播数据包时,网络中的每个路由器会检查数据包的来源是否在其反向路径表中。如果是,数据包会被转发到其所有的多播组成员。如果不是,数据包会被丢弃。
- RPM 还可以与其他多播路由协议(如 DVMRP 或 PIM-DM)结合使用,以确保多播数据在网络中的有效传输。
优点:
- 减少广播风暴:通过确保数据包的来源是有效的,RPM 可以减少网络中的广播风暴。
- 提高效率:可以提高多播数据的传输效率,因为只有有效的数据包会被转发。
组共享树多播路由选择
组共享树(Shared Tree)多播路由选择是一种在多播网络中优化数据分发的技术,主要用于管理多播数据包的传输路径。它常见于协议独立多播(PIM)中的稀疏模式(PIM-SM)。以下是组共享树多播路由选择的基本概念和工作原理:
组共享树的概念:组共享树的核心思想是为一个多播组(例如,一个多播地址组)创建一棵共享的多播树。所有加入该多播组的接收者通过这棵树接收数据。这种树由一个特定的节点称为“根”来管理,根通常被称为“拉比特”(Rendezvous Point, RP)。
构建共享树:
- RP(Rendezvous Point)选择:一个网络中的某个路由器被选为RP,所有多播组的共享树都以RP为根。
- 注册和加入:当一个源节点要发送多播数据时,它首先将数据包发送到RP。RP负责建立共享树,并将数据分发到所有的接收者。
- 数据转发:接收者的路由器通过共享树从RP接收数据。数据包从RP开始传播,通过树的路径到达所有接收者。
优化和切换:
- 共享树切换到源树:为了提高效率,PIM-SM 协议允许在共享树上建立一个专门的源树(也称为SPT,Source Path Tree)。当接收者发现通过源树直接从源节点接收数据更高效时,会触发切换。
- 切换条件:如果从源直接到达的路径比通过RP到达的路径更短,路由器会将数据包的转发路径从共享树切换到源树。
移动IP技术
移动IP的作用是允许移动设备在不同网络间切换时保持其IP地址不变,从而保证通信的连续性。这通过在设备的“归属代理”和“外地代理”之间路由数据包来实现。归属代理负责在设备不在家时将数据包转发到其当前位置,而外地代理则在设备连接到新网络时进行注册和管理,从而实现无缝切换。
在移动IP的实现步骤中,常见的有以下几个概念:
- 归属网络:移动主机的初始网络。
- 归属地址:移动主机在归属网络中的固定IP地址。
- 归属代理:管理归属网络中的移动主机,通常是连接在归属网络上的路由器。
- 外地网络:移动主机当前连接的网络。
- 外地代理:为移动主机在外地网络中提供服务的路由器。
- 转交地址:移动主机在外地网络中的临时IP地址,由外地代理分配。
归属网络:在移动IP中,每个主机都有一个初始连接的网络,称为归属网络。移动主机在归属网络上的IP地址不会改变。归属网络中的移动管理实体称为归属代理,通常是连接在归属网络上的路由器。归属代理在应用层实现代理功能,负责管理和转发发往移动主机的数据包,即使主机在不同网络之间移动。
三角路由问题是指数据包从通信对端经过归属代理再到移动主机所引发的非最优路由路径。具体来说,当一个固定主机与移动主机通信时,数据包首先被发送到移动主机的归属代理,然后再转发到移动主机的当前位置。这种间接路由会导致额外的延迟和带宽消耗。
IPv6技术*
IPv6 是“互联网协议第六版”的缩写。IPv6是由IETF设计的下一代互联网协议,目的是取代现有的互联网协议第四版(IPv4)。IPv4的设计思想成功地造就了目前的国际互联网,其核心价值体现在:简单、灵活和开放性。但随着新应用的不断涌现,传统的IPv4协议已经难以支持互联网的进一步扩张和新业务的特性,比如实时应用和服务质量保证等。其不足主要体现在以下几方面:
地址资源即将枯竭:IPv4提供的IP地址位数是32位,也即1亿个左右的地址。随着连接到Internet上的主机数目的迅速增加,有预测表明,所有IPv4地址将在2005~2010年间分配完毕。
路由表越来越大:由于IPv4采用与网络拓扑结构无关的形式来分配地址,所以随着连入网络数目的增涨,路由器数目飞速增加,相应地,决定数据传输路由的路由表也就不断增大。
缺乏服务质量保证:IPv4遵循Best Effort原则,这一方面是一个优点,因为它使IPv4简单高效;但另一方面它对互联网上涌现出的新业务类型缺乏有效的支持,比如实时和多媒体应用,这些应用要求提供一定的服务质量保证,如带宽、延迟和抖动等。
地址分配不便:IPv4是采用手工配置的方法来给用户分配地址,这不仅增加了管理和规划的复杂程度,而且不利于为那些需要IP移动性的用户提供更好服务。
IPv6能够解决IPv4的许多问题,如地址短缺、服务质量保证等。同时,IPv6还对IPv4作了大量的改进,包括路由和网络自动配置等。IPv6和IPv4将在过渡期内共存几年,并由IPv6渐渐取代IPv4。
IPv6核心技术
在地址长度上,IPv6与IPv4相比,很明显的一个改善就是IPv6的128位地址长度可以提供充足的地址空间,同时它还为主机接口提供不同类型的地址配置,其中包括:全球地址、全球单播地址、区域地址、链路本地地址、地区本地地址、广播地址、多播群地址、任播地址、移动地址、家乡地址、转交地址等。IPv6的另一个基本特性是它支持无状态和有状态两种地址自动配置的方式。其中无状态地址自动配置方式是:需要配置地址的节点使用一种邻居发现机制获得一个局部连接地址。一旦得到这个地址之后,它使用另一种即插即用的机制,在没有任何人工干预的情况下,获得一个全球唯一的路由地址。另外IPv6还在以下几方面表现出很高的特性。
- 服务质量方面
IPv6数据包的格式包含一个8位的业务流类别(Class)和一个新的20位的流标签(Flow Label)。它的目的是允许发送业务流的源节点和转发业务流的路由器在数据包上加上标记,中间节点在接收到一个数据包后,通过验证它的流标签,就可以判断它属于哪个流,然后就可以知道数据包的QoS需求,并进行快速的转发。
- 安全方面
在安全性方面,IPv6与IP安全性(IPSec)机制和服务更加紧密结合。虽然两种IP标准目前都支持IPsec(IP安全协议),但是IPv6是将安全作为自身标准的有机组成部分,安全的部署是在更加协调统一的层次上,而不像IPv4那样通过叠加的解决方案来实现安全。通过IPv6中的IPsec可以对IP层上(也就是运行在IP层上的所有应用)的通信提供加密/授权,可以实现远程企业内部网(如企业VPN网络)的无缝接入,并且可以实现永远连接。除了这一强制性安全机制外,IPSec还提供两种服务。认证报头(AH)用于保证数据的一致性,而封装的安全负载报头(ESP)用于保证数据的保密性和数据的一致性。在IPv6包中,AH和ESP都是扩展报头,可以同时使用,也可以单独使用其中一个。作为IPSec的一项重要应用,IPv6集成了虚拟专网(VPN)的功能。
- 移动IPv6方面
移动性无疑是互联网上最精彩的服务之一。移动IPv6协议为用户提供可移动的IP数据服务,让用户可以在世界各地都使用同样的IPv6地址,非常适合未来的无线上网。
IPv6中的移动性支持是在制订IPv6协议的同时作为一个必需的协议内嵌在IP协议中的。不同于IPv4的移动性支持是作为一种对IP协议附加的功能提出的,不是所有的IPv4实现都能够提供对移动性的支持,其效率没有移动IPv6高。更重要的是,IPv4有限的地址空间资源无法提供所有潜在移动终端设备所需的IP地址,难以实现移动IP的大规模应用。和IPv4相比,IPv6的移动性支持取消了异地代理,完全支持路由优化,彻底消除了三角路由问题,并且为移动终端提供了足够的地址资源,使得移动IP的实际应用成为可能。
- 当移动节点处于本地网络时,通过接收本地网络上路由器的路由器通告来进行地址配置;获取网络参数。
- 当移动节点接入异地网络后,不再收到来自本地网络的路由器通告;而是收到来自异地网络上路由器的路由器通告,移动节点利用接收到的异地网络路由器通告进行移动检测。
- 移动节点配置好在异地网络的转交地址后,就向本地代理发送绑订更新报文,通知其自己的转交地址,并注册。
- 移动节点同时向通信节点发送绑订更新报文,通知其自己的转交地址。
- 这样,本地代理就可以通过隧道的方式向移动节点转发来自通信节点的报文。
- 如果通信节点通过接收来自移动节点的绑定更新,获取了移动节点的转交地址,则可以直接与移动节点通信,而无需通过本地代理,实现路由优化。
- 组播技术
组播是一种允许一个或多个发送者(组播源)发送单一的数据包给多个接收者(一次的,同时的)的网络技术,它适用于一点到多点或多点到多点的数据传输业务。组播实现的基本原则是:依托IP协议完成组播,IP组播强制网络在数据分发树的分叉处进行信息包的复制。IP组播的实现包括三个部分:寻址、组播成员管理和组播路由协议。
组播寻址:IPv6为组播预留了一定的地址空间,其地址高8位为”11111111”,后跟120位组播组标识。此地址仅用作组播数据包的目标地址,组播源地址只能是单播地址。发送方只需要发送数据给该组播地址,就可以实现对多个不同地点用户数据的发送,而不需要了解接收方的任何信息。
组播成员管理:组播使用IGMP(Internet Group Manager Protocol)协议实现用户的动态注册过程。在主机与组播路由器之间通过IGMP协议建立并维护组播组成员的关系。组播转发路由器通过IGMP协议了解其在每个接口连接的网段上是否存在某个组播组的接收者,即组成员。如果出现成员,组播路由器将组播数据包转发到这个网段;如果没有则停止转发或不转发,以节省带宽。
组播路由协议:组播路由协议的作用是建立和维护组播路由表,以充分利用带宽。组播路由协议分为两种类型:密集模式和稀疏模式。密集模式组播路由协议指组播成员在整个网络上密集分布,即许多子网至少包含一个成员,带宽充裕,但其不适用于规模大的适用于组播成员在网络中稀疏分布,且未必有充裕带宽可用的网络。
IPv4到IPv6的过渡技术
如何完成从IPv4到IPv6的转换是IPv6发展中需要解决的第一个问题。目前,IETF已经成立了专门的工作组,研究IPv4到IPv6的转换问题,并且提出了很多方案,主要包括以下几个类型:
- 网络过渡技术
隧道技术:随着IPv6网络的发展,出现了许多局部的IPv6网络,利用隧道技术可以通过现有的运行IPv4协议的Internet骨干网络(即隧道)将局部的IPv6网络连接起来,因而是IPv4向IPv6过渡的初期最易于采用的技术。隧道技术的方式为:路由器将IPv6的数据分组封装入IPv4,IPv4分组的源地址和目的地址分别是隧道入口和出口的IPv4地址。在隧道的出口处,再将IPv6分组取出转发给目的站点。
网络地址转换/协议转换技术(NAT):网络地址转换/协议转换技术NAT-PT(Network Address Translation - Protocol Translation)通过与SIIT协议转换和传统的IPv4下的动态地址翻译(NAT)以及适当的应用层网关(ALG)相结合,实现了只安装了IPv6的主机和只安装了IPv4机器的大部分应用的相互通信。
- 主机过渡技术
IPv6和IPv4是功能相近的网络层协议,两者都基于相同的物理平台,而且加载于其上的传输层协议TCP和UDP又没有任何区别。可以看出,如果一台主机同时支持IPv6和IPv4两种协议,那么该主机既能与支持IPv4协议的主机通信,又能与支持IPv6协议的主机通信,这就是双协议栈技术的工作机理。
- 应用服务系统(DNS)过渡技术
在IPv4到IPv6的过渡过程中,作为Internet基础架构的DNS服务也要支持这种网络协议的升级和转换。IPv4和IPv6的DNS记录格式等方面有所不同,为了实现IPv4网络和IPv6网络之间的DNS查询和响应,可以采用应用层网关DNS-ALG结合NAT-PT的方法,在IPv4和IPv6网络之间起到一个翻译的作用。例如,IPv4的地址域名映射使用A记录,而IPv6使用AAAA或A6记录。那么,IPv4的节点发送到IPv6网络的DNS查询请求是“A”记录,DNS-ALG就把A改写成AAAA,并发送给IPv6网络中的DNS服务器。当服务器的回答到达DNS-ALG时,DNS-ALG修改回答,把“AAAA”改为“A”,把IPv6地址改成DNS-ALG地址池中的IPv4转换地址,把这个IPv4转换地址和IPv6地址之间的映射关系通知NAT-PT,并把这个IPv4转换地址作为解析结果返回IPv4主机。IPv4主机就以这个IPv4转换地址作为目的地址与实际的IPv6主机通过NAT-PT通信。
上述技术很大程度上依赖于从支持IPv4的互联网到支持IPv6的互联网的转换,我们期待IPv4和IPv6可在这一转换过程中互相兼容。目前,6to4机制便是较为流行的实现手段之一。
几种IPv6应用介绍
从语音、数据到视频,从对现有网络应用更卓越的支持与改善,到IPv6独具特色的创新业务,IPv6带给我们的全方位、高品质的应用与服务前景是美妙而广阔的。以下简单介绍几种IPv6的应用:
- 视频应用
IPv6对于视频应用的意义在于:解决了地址容量问题,优化了地址结构以提高选路效率,提高了数据吞吐量,以适应视频通信大信息量传输的需要。IPv6还加强了组播功能,实现基于组播、具有网络性能保障的VC视频会议、高清晰度数字电视、VOD视频点播、网络视频监控应用。这是只有高带宽、高性能的下一代互联网才能支持的典型应用,具有交互协同技术特性。IPv6对于IPv4的最大革新之处在于它对于QoS的考虑,对各种多媒体信息根据紧急性和服务类别确定数据包的优先级。此外,IPv6采用必选的IPSec很好地保证了网络的安全性。
- 移动智能终端应用
传统的移动通信技术主要是为了支撑话音业务,虽然随着用户需求的提出和技术的发展,目前已经有了基于WAP或GPRS提供IP业务的蜂窝电话产品,但是现有的技术远远无法满足未来通信的需要,第三代移动通信将采用分组交换的设备来代替电路交换设备,IP业务将是第三代移动通信业务中的重要组成部分。
由于IP的诸多优点和全球IP浪潮的影响,3G演变为全IP的趋势越来越明显。作为移动通信的核心,3G为了满足始终在线的需求,需要很大的地址空间,只有IPv6才能满足这种需求。5GPP RAN WG3已经要求,对于Iu、Iub以及Iur接口,如果要提供IP传输,则UTRAN节点必须支持IPv6,对IPv4的支持则是可选的。
3G的发展方向将是一个全IP的分组网络,3G业务将以数据和互联网业务为主,在3G网络上将承载着实时话音、移动多媒体、移动电子商务等多种业务,因此在计费、漫游、应用、终端等方面会更加复杂,IPv6将是实现这些服务的关键。如果说3G的发展推动了IPv6的发展和标准化,那么IPv6协议的诸多优越特性则为3G网络的发展奠定了坚实的基础,IPv6有庞大的地址空间、对移动性有良好的支持、有服务质量的保证机制、安全性和地址自动分配机制等。3GPP将IPv6作为3G必须遵循的标准,国内外很多通信厂商正致力于构建基于IPv6的全IP的3G核心网(All-IP Core)。
- 无线网络应用
最近,无线网络WLAN在中国的热点地区渐成亮点,随着网络技术和业务的发展,人们将会提出多种接入方式无缝互连的要求,即忽略蓝牙、无线局域网和广域网(GSM/CDMA)之间的技术差异,使得在不同网络环境下用户的连接和所使用的业务不会中断,真正实现不间断的连接。采用移动IPv6将使这一目标的实现更加容易。
实现用户通信的同一性:目前一个人拥有多个不同类型的终端(如手机、PDA、笔记本电脑等)的现象已不鲜见,这些终端普遍都有上网功能,但这些终端的上网是互不相干的,通信的内容、方式也因终端而异。然而从用户的角度来看,实现通信的同一性是至关重要的,未来用户应该只关注自己的应用而将终端淡化成一种手段,而以IPv6大量的地址资源和其它先进的性能做基础,完全可以实现通信的同一性。
实现多种接入方式的无缝互联:未来各种接入网技术仍然共存,如在PAN中采用蓝牙技术、LAN中采用无线局域网(802.11)、WAN中采用WCDMA/GSM等,而无线技术最终将使人们忽略接入技术的不同而实现随时随地的网络连接,用户能够使用一种多模的终端来通过全球移动网络以及有限范围的WLAN或蓝牙系统来接入IP网络或因特网,用户从某种接入技术覆盖的区域移动到另外一种接入技术覆盖的区域时仍然能够保持不间断的连接。
第五章 运输层
如果说网络层的作用是在逻辑上实现了不同主机的通讯,那么运输层就通过进程进一步规范化通讯。在运输层中,会接触到各种的协议,通过控制协议的端口号,可以让用户和管理者清晰知道进程中执行的项目以及维护这些功能。同时,端口号也是向上层提供服务的一种接口,通过不同端口号标注不同功能实现不同的互联网传输目的。
运输层通过端口号来识别来区分不同的应用程序。每个端口号是一个唯一的标识符,用于确保数据能够正确地传递到目标应用程序。这样,运输层可以在同一台设备上管理多个应用的通信。每个端口号就像售货机上的一个按钮,不同的按钮对应不同的饮料。你按下特定的按钮(端口号),售货机就会提供相应的饮料(服务)。
回顾一层级,网络接口层负责差错检测,网际层通过将网络结构层的数据包封装成帧通过IP进行运输,运输层通过将数据帧加入端口号用于隔离并标志具体的应用信息,应用层就是用户调用的应用也就是我们网络的最终目的。
TCP和UDP简介
在运输层中,有两个重要的协议TCP和UDP。TCP和UDP可以理解为交流确定协议,通过这两个协议确认两个主机交流情况。
- TCP:可靠、面向连接、顺序传输,适用于需要数据完整性和顺序的应用。
- UDP:不可靠、无连接、低开销,适用于需要快速传输和实时性的应用。
这里需要补充的是,TCP和UDP是端到端也就是确保数据能够从源主机传输到目标主机。
对于不同以太网应用的特点,使用不同的运输层协议,如下图所示。
运输层端口号PID
运输层端口号用于标识和区分计算机上运行的不同应用进程,因为不同操作系统使用不同格式的进程标识符。为了实现跨操作系统的应用进程通信,TCP/IP体系结构的运输层采用统一的16位端口号(范围为0~65535)来标识应用进程
数据在发送方通过TCP或UDP协议封装后由IP层传输,并在接收方通过协议字段和端口号解封装和分发到相应应用程序的过程。
常见的网络协议以及他们的端口号如下,每一个功能对应着一个端口号
DNS解析域名
举个例子说明一下依靠端口号,DNS是在应用层的
DNS服务器的主要作用是将域名解析为对应的IP地址。这使得用户可以通过易记的域名访问网站,而不需要记住复杂的IP地址。Web服务器的作用是接收客户端请求并提供相应的内容和服务。
端口号在运输层中用于标识和管理网络通信中的应用程序和服务,确保数据能够准确地传输到预期的目标。
用户PC访问域名的过程如下:
从用户电脑发送DNS查询请求报文的目的是查找指定域名对应的IP地址。
DNS接收到请求报文时,UDP首部中记录了源端口和目的端口号。源端口号表示发起请求的客户端端口,目的端口号通常是DNS服务器监听的端口(通常为53)。端口号帮助标识和处理网络通信中的请求和响应。
此时用户接收到了访问处的IP地址,然后可以通过对应的IP地址在数据链路层中解析得到对应的MAC地址,这里用的是ARP但是为了简化这里就忽略了。
用户向WEB服务器发送HTTP请求报文,请求获取首页内容。这里的首页内容指的是构成当前网页的HTML文件及其相关资源(如CSS、JavaScript、图片等)。
在收到请求报文之后,WEB服务器生成并发送响应报文,返回请求的首页内容。
用户的PC接收到WEB服务器返回的响应报文后,会根据响应报文中的IP地址和内容呈现出相应的网页内容。
通常,返回的内容就是请求的WEB网页,包括其HTML、CSS、JavaScript以及可能的图像和其他资源。
在上述的过程中,端口号主要起到以下作用
指定服务:DNS协议使用特定的端口号来区分服务类型。DNS请求和响应通常通过UDP协议在53号端口进行。如果请求需要更大的数据量,DNS也可以通过TCP协议在53号端口进行。
区分会话:虽然DNS的请求和响应通常使用UDP的53号端口,但在某些情况下,如长时间的DNS传输或需要更高的可靠性时,DNS也可以使用TCP协议。这时,端口号53仍然用于区分DNS服务,但TCP协议会处理会话管理和数据流控制。
防火墙和路由设置:端口号用于网络设备(如防火墙和路由器)来允许或阻止DNS流量。通过监控端口号53,这些设备可以管理和过滤DNS请求,确保安全性和网络管理。
- 客户端与服务器的通信:端口号帮助客户端与服务器进行通信。客户端会向服务器的特定端口发送请求,服务器通过相应的端口接收请求并返回响应。
UDP的特点
UDP 为应用程序提供了一种无需建立连接就可以发送分装的IP数据报的方法。如果应用程序开发人员选择的是UDP而不是TCP的话,那么该应用程序相当于就是直接和IP直接打交道的。在这链接的过程中,UDP发送的数据是数据报也就是说UDP是面向数据报的。
所谓的无需建立连接,就是在使用UDP协议在将数据报传递给目标主机时,发送方和接收方的运输层实体间是没有握手的。它通过IP地址和端口号实现了准确传递,举个例子:UDP像是发短信。你可以直接发送一条短信(数据包)给对方,而不需要确认对方是不是已经准备好接受短信(无需建立连接)。你也不知道对方是否收到了这条短信(没有确认和重传)。每条短信是独立的,不需要维持一个对话状态。
UDP传输数据时,直接将应用层数据封装为UDP数据报,并在数据报的头部添加UDP首部(包含端口号等信息)。然后,网络层的IP协议对UDP数据报进行封装,通过IP地址将其传输到目标主机,实现了端到端的通信。整个过程相当于直接将数据从源主机发送到目标主机,没有复杂的连接建立和确认机制。
UDP的报文结构,每个UDP报文分为UDP报头和UDP数据区两部分。报头由4个16位长(2字节) 字段组成,分别说明该报文的源端口、目的端口、报文长度、校验值
- 源端口号(Source Port):这个字段占据UDP报文头的前16位,通常包含发送数据报的应用程序所使用的UDP端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。
- 目标端口号(Destination Port):表示接收端口,字段长位16位
- 长度(Length):字段占据16位,表示UDP数据报的长度,等于UDP报文头长度+UDP数据长度。因为报文头长度为
4*2 = 8
个字节,所以这个值最小为8,最大长度为65535 字节。 - 校验和(Checksum): UDP 使用校验和来保证数据安全性,UDP的校验和也提供了差错检测功能,差错检测用于校验报文段从源到目标主机的过程中,数据的完整性是否发生了改变。
UDP采用端到端的设计原则,这个原则说的是要让传输中各种错误发生的概率降低到一个可以接受的水平。需要补充的是UDP本身不提供数据传输的可靠性保障,它不保证数据包的送达、顺序或完整性,也不进行重传、流量控制或拥塞控制。虽然UDP提供了基本的错误检测功能,但数据包的丢失、重复或乱序需要由应用程序自行处理,因此适合对传输速度要求高而对可靠性要求较低的场景。
TCP的特点*
TCP(传输控制协议,Transmission Control Protocol)是一个面向连接的、可靠的传输层协议,用于在网络中提供可靠的数据传输服务。它通过建立连接、确认数据和流量控制等机制,确保数据的准确传输和顺序。
TCP就像打电话。打电话之前,双方需要确认对方接听电话(建立连接),然后才能开始交流。你说一句话,对方会回应“听到了”,双方会保持联系直到通话结束(维持连接)。如果某句话没听清楚,还可以重说一遍(重传数据)。这个过程保证了通信的可靠性。
TCP通常只支持单播,因为它是面向连接的协议,需要为每个连接维护状态、保证数据顺序和可靠性。单播的点对点通信模式更适合TCP的设计和管理机制,而多播需要处理多个接收方,增加了复杂性和资源管理难度。
TCP是面向字节流的协议。应用进程发送的数据被视为一个连续的字节流,TCP在传输过程中将其分割成多个段,每个段都有TCP首部。接收方将这些段重组为完整的字节流,并交给应用进程。TCP提供可靠的数据传输,确保数据的顺序和完整性。
找到的一张图简要描述的TCP和UDP的特点
TCP的实现*
TCP报文首部格式
TCP报文首部是TCP报文段中的控制信息部分,在计算机网络中,首部提供了控制、管理和寻址信息,确保数据的正确传输、完整性和协议识别。方便其它层识别包装的数据信息。
TCP首部包含以下字段:
- 源端口号:16位,标识发送方的应用端口。
- 目标端口号:16位,标识接收方的应用端口。
- 序列号:32位,用于标识数据流中的字节顺序。
- 确认号:32位,用于确认接收到的数据。
- 数据偏移:4位,指示TCP首部的长度。
- 保留位:3位,保留为将来使用。
- 标志位:9位,包括URG、ACK、PSH、RST、SYN、FIN等标志,用于控制连接状态和数据传输。
- 窗口大小:16位,流量控制字段。
- 校验和:16位,用于数据的错误检测。
- 紧急指针:16位,指示紧急数据的结束位置(如有紧急数据)。
- 选项:可变长度,提供额外控制信息。
- 填充:可变长度,用于确保首部对齐。
- 数据:实际传输的数据部分。
端口号可以复用,端口号复用主要体现在以下三种情况
不同的IP地址:想象有两台服务器分别有不同的IP地址,比如IP地址A是
192.168.1.10
,IP地址B是192.168.1.11
。即使它们都使用了相同的端口号(如80端口),它们不会冲突。原因是它们位于不同的IP地址下,每台服务器都会根据自己的IP地址区分请求。- 服务器A (
192.168.1.10:80
) 提供网站A的服务。 - 服务器B (
192.168.1.11:80
) 提供网站B的服务。
即使都在80端口运行,用户访问
192.168.1.10
时只能连接到服务器A,访问192.168.1.11
时只能连接到服务器B。也就是不同的IP地址对应着不同的主机,- 服务器A (
不同的传输协议:TCP和UDP是不同的传输协议,即使它们使用相同的端口号,也不会互相影响。例如,TCP端口80通常用于HTTP,而UDP端口80可以用于其他应用,因为TCP和UDP是两个独立的协议栈。
- TCP端口80用于浏览网页(HTTP请求)。
- UDP端口80用于实时流媒体应用(假设的场景)。
两者同时存在,并不会发生冲突。
同一IP地址和端口号的多连接:这是互联网常见的连接模式。当多名用户访问同一网站(同一个IP地址和端口号,如
www.example.com:80
),服务器如何区分每个用户的请求?答案是通过四元组(源IP地址、源端口号、目的IP地址、目的端口号)来唯一标识每个连接。- 客户端1 (
192.168.1.20:56789
) 连接到服务器 (203.0.113.10:80
)。 - 客户端2 (
192.168.1.21:54321
) 连接到同一服务器 (203.0.113.10:80
)。
服务器通过客户端的IP地址和端口号来区分不同的连接,即使目标服务器的IP地址和端口号是相同的,它依然可以处理来自多个客户端的请求。
- 客户端1 (
TCP的运输连接管理
通过TCP四元组可以确定一个TCP连接,但是这还不够,接下来说明有关于TCP连接的建立。
三报文握手
TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图:
一开始,客户端和服务端都处于
CLOSE(关闭)
状态。直到服务端主动监听某个端口,处于LISTEN(监听)
状态。客户端随机初始化序号(
client_isn
),将其填入TCP首部的「序号」字段,同时将SYN
标志位设置为1,表示这是一个建立连接的SYN报文。客户端随后发送该SYN报文给服务端,以发起连接请求。该报文不包含应用层数据,客户端进入SYN-SENT
状态。SYN标识是同步标志位,用于启动连接并同步序列号。服务端收到客户端的
SYN
报文后,首先随机初始化自己的序号(server_isn
),并将其填入TCP首部的「序号」字段中。然后将「确认应答号」字段设为client_isn + 1
,并将SYN
和ACK
标志位置为1,表示接受了连接请求。接着,服务端发送该SYN+ACK报文给客户端,报文不包含应用层数据,服务端此时进入SYN-RCVD
状态,表示SYN
已经收到了。ACK
标志位用于确认已收到客户端的SYN
报文,通知客户端服务端已准备好进行连接。客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部
ACK
标志位置为1
,其次「确认应答号」字段填入server_isn + 1
,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于ESTABLISHED
状态。服务端收到客户端的应答报文后,也进入
ESTABLISHED
状态,也就是已经建立连接。
从上面的过程可以发现第三次握手是可以携带数据的,前两次握手是不可以携带数据的。一旦完成三次握手,双方都处于 ESTABLISHED
(已经成功建立) 状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。
举个例子演示TCP连接的过程:
第一次握手(客户端发起连接请求):客户端发送带有SYN标志的请求,表示“你好,我想连接你,请告诉我你是否准备好了。”
第二次握手(服务器回应请求):服务器回复带有SYN和ACK标志的响应,表示“你好,我收到你的请求,可以与你建立连接,我已经准备好,并告知你我的序列号。”
第三次握手(客户端确认响应):客户端发送带有ACK标志的确认消息,表示“谢谢,我收到了你的确认,我也准备好了。”这次握手确认客户端的连接状态不是历史信息。
三次握手的主要原因是为了防止旧的重复连接初始化造成混乱。虽然在通信过程中,发送方发送请求,接收方返回响应,似乎已经建立了通信,但仅有这两次交互并不足以确保连接的可靠性。
我们考虑一个场景,客户端先发送了 SYN(seq = 90)报文,然后客户端宕机了,而且这个 SYN 报文还被网络阻塞了,服务端并没有收到,接着客户端重启后,又重新向服务端建立连接,发送了 SYN(seq = 100)报文(注意!不是重传 SYN,重传的 SYN 的序列号是一样的)。
客户端连续发送多次 SYN(都是同一个四元组)建立连接的报文,在网络拥堵情况下:
- 一个「旧 SYN 报文」比「最新的 SYN」 报文早到达了服务端,那么此时服务端就会回一个
SYN + ACK
报文给客户端,此报文中的确认号是 91(90+1)。 - 客户端收到后,发现自己期望收到的确认号应该是 100 + 1,而不是 90 + 1,于是就会回 RST 报文,它的作用是强制终止当前的TCP连接。
- 服务端收到 RST 报文后,就会释放连接。
- 后续最新的 SYN 抵达了服务端后,客户端与服务端就可以正常的完成三次握手了。
上述中的「旧 SYN 报文」称为历史连接,TCP 使用三次握手建立连接的最主要原因就是防止「历史连接」初始化了连接。如果使用两次握手进行连接,就无法阻止旧的历史连接,因为在两次握手的情况下,服务端没有中间状态来阻止历史连接的建立,这可能导致服务端误建立一个历史连接,造成资源浪费。
在两次握手建立 TCP 连接的情况下,服务端在向客户端发送数据之前,无法有效阻止历史连接的发生,可能导致服务端建立一个无效的历史连接,并发送不必要的数据,浪费资源。更糟糕的是,服务端在收到 RST
报文后关闭连接,但由于之前已经进入 ESTABLISHED
状态,如果旧的 SYN
报文再次滞留并重新到达,可能会重复这个过程,从而造成无限循环和更多资源浪费。
为了解决这一问题,最好是在服务端发送数据之前,也就是在真正建立连接之前,能够识别并阻止旧的历史连接。这正是三次握手的作用所在。三次握手通过在连接建立前加入一个确认步骤,有效防止了旧连接的干扰,从而避免了不必要的资源浪费。
总结,TCP 使用三次握手建立连接的最主要原因是防止「历史连接」初始化了连接。
三次握手的第二个原因是同步双方的初始序列号。TCP协议的通信双方必须维护一个序列号,这是可靠传输的关键因素,具体作用如下:
- 去除重复数据:接收方可以识别并丢弃重复的数据包。
- 按序接收数据:接收方能够根据序列号确保数据包的顺序接收。
- 确认数据接收:通过ACK报文中的序列号,发送方可以识别哪些数据包已经被对方接收。
序列号在 TCP 连接中占据着非常重要的作用,所以当客户端发送携带「初始序列号」的 SYN
报文的时候,需要服务端回一个 ACK
应答报文,表示客户端的 SYN(同步序列号) 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。同步在这里指的是确保发送方和接收方的序列号一致,以便在后续的数据传输中维持数据的顺序和完整性。
其实,四次握手也可以可靠地同步双方的初始序列号,但因为第二步和第三步可以合并成一步,即同时发送 ACK
和 SYN
,所以实际只需要「三次握手」。而两次握手只能保证一方的初始序列号被对方成功接收,无法确保双方的初始序列号都被确认接收。
三次握手的第三个原因是为了避免资源浪费。如果仅采用两次握手,当客户端发送的SYN
报文在网络中阻塞,且未收到服务端的ACK
报文时,客户端会重新发送SYN
。由于缺少第三次握手,服务端无法确认客户端是否收到自己的ACK
报文,因此每次收到SYN
都会主动建立连接。这可能导致:如果客户端发送的 SYN
报文在网络中阻塞了,重复发送多次 SYN
报文,那么服务端在收到请求后就会建立多个冗余的无效链接,造成不必要的资源浪费。
即两次握手会造成消息滞留情况下,服务端重复接受无用的连接请求 SYN
报文,而造成重复分配资源。TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。
不使用「两次握手」和「四次握手」的原因:
- 「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
- 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数
四报文挥手
天下没有不散的宴席,对于 TCP 连接也是这样, TCP 断开连接是通过四次挥手方式。双方都可以主动断开连接,断开连接后主机中的「资源」将被释放,四次挥手的过程如下图:
- 客户端发起连接关闭:当客户端决定关闭连接时,会发送一个TCP报文,该报文的
FIN
标志位被置为1
,称为FIN
报文,主要功能是在数据传输结束时,告知对方不再发送数据。发送FIN
报文后,客户端进入FIN_WAIT_1
状态。FIN_WAIT_1
状态的作用是确保客户端在发送FIN
报文后,能够正确地等待并接收服务端的确认(ACK
)。 - 服务端收到
FIN
报文:服务端收到客户端的FIN
报文后,会发送一个ACK
应答报文给客户端,确认收到关闭请求。接着,服务端进入CLOSE_WAIT
状态,准备关闭自己的连接。 - 客户端收到
ACK
应答报文:客户端收到服务端的ACK
应答报文后,进入FIN_WAIT_2
状态。FIN_WAIT_2
状态的主要作用是让客户端在收到服务端的ACK
确认后,继续等待服务端发送FIN
报文,以完成连接的另一半关闭。此时,客户端已经完成了自己发起关闭的第一步,进入了等待服务端关闭的阶段。 - 服务端发送
FIN
报文:服务端在处理完数据后,会向客户端发送一个FIN
报文,表示它也准备关闭连接。发送FIN
报文后,服务端进入LAST_ACK
状态,等待客户端的确认。 - 客户端收到
FIN
报文:客户端收到服务端的FIN
报文后,回复一个ACK
应答报文,确认关闭。此后,客户端进入TIME_WAIT
状态。 - 服务端关闭连接:服务端在收到客户端的
ACK
应答报文后,进入CLOSED
状态,完成连接的关闭。 - 客户端完成关闭:客户端在
TIME_WAIT
状态下等待2MSL
时间(即最大报文段寿命的两倍)以确保服务端收到了ACK
报文。如果在此期间没有收到任何重发的FIN
报文,客户端进入CLOSED
状态,至此,客户端也完成了连接的关闭。
每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。这里一点需要注意是:主动关闭连接的,才有 TIME_WAIT 状态。在 TCP 连接关闭时,四次挥手过程确保了双方能够完整地完成数据传输并正确地关闭连接。下面是四次挥手的详细步骤及其原因:
- 客户端发送
FIN
报文:当客户端想要关闭连接时,它会发送一个FIN
报文,表示客户端不再发送数据,但仍然可以接收来自服务端的数据。 - 服务端回应
ACK
报文:服务端收到客户端的FIN
报文后,会发送一个ACK
报文确认收到FIN
。此时,服务端仍然可以继续发送数据给客户端,客户端进入FIN_WAIT_2
状态。 - 服务端发送
FIN
报文:在完成所有数据的发送和处理后,服务端会向客户端发送自己的FIN
报文,表示服务端也准备关闭连接。客户端在收到服务端的FIN
报文后,会回一个ACK
报文确认收到 `FIN。此时,客户端进入
TIME_WAIT状态,**等待可能出现的延迟的
FIN` 报文。** - 客户端回应
ACK
报文:客户端收到服务端的FIN
报文后,会发送一个ACK
报文确认,服务端在收到这个ACK
后,会进入CLOSED
状态,连接完全关闭。
由于服务端可能需要时间来完成数据的发送和处理,服务端的 ACK
和 FIN
报文通常是分开发送的,因此需要四次挥手来确保双方都能正确关闭连接。
TCP的可靠传输实现
实现可靠传输的过程非常复杂,因此我们先考虑一些特殊情况。在一个已经连接的TCP协议的网络中,对于发送方,我们只考虑发送窗口(SWND);对于接收方,我们只考虑接收窗口(RWND)。
接收方先向发送方发送确认报文段,标志的ack表示希望接收的下一个数据的序号,同时包含接收窗口的长度。
为了简化实现过程,假设网络中不存在拥塞问题。发送方在构建发送窗口时,仅考虑接收方的接收窗口长度,不考虑发送方的拥塞窗口。例如,发送窗口长度为20,接收方希望接收下一个字节的序号为31。
对于发送窗口,有以下性质
发送窗口是否移动,取决于是否取得接受方的信息
计算机使用三个指针来识别发送窗口的移动情况,这三个指针帮助实现窗口的移动。
在确认过程中,针对每一个字节,TCP都会发送接收数据报。根据接收到的数据,发送窗口会移动,从而删除旧数据并发送新数据。
如果在传输过程中出现丢包或传输错误,发送方未收到接收方的确认情况下,不会发送新数据。在一定时间后,触发超时重传机制。
TCP流量控制
发送方在传输数据时,不能不顾接收方的处理能力。如果发送方不断地发送数据,而接收方无法及时处理,则可能触发重传机制,造成网络流量的浪费。为了解决这一问题,TCP引入了流量控制机制。流量控制让「发送方」根据「接收方」的实际接收能力调整发送的数据量。
举个例子,假设客户端是接收方,服务器是发送方。接收窗口和发送窗口的大小都为200,并且在整个传输过程中,这两个设备的窗口大小始终保持不变,不受外界影响。
根据上图的流量控制,说明下每个过程:
- 客户端向服务端发送请求数据报文。这里要说明下,本次例子是把服务端作为发送方,所以没有画出服务端的接收窗口。
- 服务端收到请求报文后,发送确认报文和 80 字节的数据,于是可用窗口
Usable
减少为 120 字节,同时SND.NXT
指针也向右偏移 80 字节后,指向 321,这意味着下次发送数据的时候,序列号是 321。 - 客户端收到 80 字节数据后,于是接收窗口往右移动 80 字节,
RCV.NXT
也就指向 321,这意味着客户端期望的下一个报文的序列号是 321,接着发送确认报文给服务端。 - 服务端再次发送了 120 字节数据,于是可用窗口耗尽为 0,服务端无法再继续发送数据。
- 客户端收到 120 字节的数据后,于是接收窗口往右移动 120 字节,
RCV.NXT
也就指向 441,接着发送确认报文给服务端。 - 服务端收到对 80 字节数据的确认报文后,
SND.UNA
指针往右偏移后指向 321,于是可用窗口Usable
增大到 80。 - 服务端收到对 120 字节数据的确认报文后,
SND.UNA
指针往右偏移后指向 441,于是可用窗口Usable
增大到 200。 - 服务端可以继续发送了,于是发送了 160 字节的数据后,
SND.NXT
指向 601,于是可用窗口Usable
减少到 40。 - 客户端收到 160 字节后,接收窗口往右移动了 160 字节,
RCV.NXT
也就是指向了 601,接着发送确认报文给服务端。 - 服务端收到对 160 字节数据的确认报文后,发送窗口往右移动了 160 字节,于是
SND.UNA
指针偏移了 160 后指向 601,可用窗口Usable
也就增大至了 200。
从上面的步骤来说,可以简单描述为
接收方告知可用空间:接收方告诉发送方它的缓冲区还有多少空间可以用来接收数据(通过接收窗口大小)。
发送方调整数据发送量:发送方根据接收方提供的窗口大小,控制发送的数据量,确保不会发送超过接收方能接收的数据。
操作系统缓冲区
在实际情况下,发送窗口和接收窗口的大小并非固定不变,它们是操作系统内存缓冲区的一部分,会受到操作系统动态调整的影响。当应用程序无法及时读取缓冲区中的数据时,这也会影响到我们的发送和接收窗口。让我们来看一个例子:
- 场景设置:客户端作为发送方,服务器作为接收方,发送窗口和接收窗口的初始大小均为
360
。 - 应用场景:服务器处于高负载状态,接收到客户端的数据后,应用层无法及时处理并读取这些数据。
根据上图的流量控制,说明下每个过程:
- 客户端发送 140 字节数据后,可用窗口变为 220 (360 - 140)。
- 服务端收到 140 字节数据,但是服务端非常繁忙,应用进程只读取了 40 个字节,还有 100 字节占用着缓冲区,于是接收窗口收缩到了 260 (360 - 100),最后发送确认信息时,将窗口大小通告给客户端。
- 客户端收到确认和窗口通告报文后,发送窗口减少为 260。
- 客户端发送 180 字节数据,此时可用窗口减少到 80。
- 服务端收到 180 字节数据,但是应用程序没有读取任何数据,这 180 字节直接就留在了缓冲区,于是接收窗口收缩到了 80 (260 - 180),并在发送确认信息时,通过窗口大小给客户端。
- 客户端收到确认和窗口通告报文后,发送窗口减少为 80。
- 客户端发送 80 字节数据后,可用窗口耗尽。
- 服务端收到 80 字节数据,但是应用程序依然没有读取任何数据,这 80 字节留在了缓冲区,于是接收窗口收缩到了 0,并在发送确认信息时,通过窗口大小给客户端。
- 客户端收到确认和窗口通告报文后,发送窗口减少为 0。
可见最后窗口都收缩为 0 了,也就是发生了窗口关闭。当发送方可用窗口变为 0 时,发送方实际上会定时发送窗口探测报文,以便知道接收方的窗口是否发生了改变。
当服务端系统资源非常紧张的时候,操作系统可能会直接减少了接收缓冲区大小,这时应用程序又无法及时读取缓存数据,那么这时候就有严重的事情发生了,会出现数据包丢失的现象。
- 客户端发送了140字节的数据,出于重传的考虑,客户端将这140字节的数据存储在内存中,因此可用窗口减少到220字节。
- 由于服务器当前非常繁忙,接收缓存减少了120字节。当服务器收到140字节数据时,由于应用程序尚未读取任何数据,这140字节留在缓冲区中,导致接收窗口大小从360字节缩减至100字节。随后,服务器在发送确认信息时通告了新的窗口大小。
- 客户端尚未收到服务器的窗口通告,因此仍以220字节为可用窗口,继续发送180字节的数据,导致可用窗口减少到40字节。
- 当服务器接收到180字节的数据时,发现数据大小超过了接收窗口的限制,因此丢弃了该数据包。
- 客户端在接收到第2步中的服务器确认报文时,发现接收窗口被缩减到100字节。由于内存中仍存储着未被确认的数据,客户端的可用窗口出现了负值的异常情况。
所以,如果发生了先减少缓存,再收缩窗口,就会出现丢包的现象。为了防止这种情况发生,TCP 规定是不允许同时减少缓存又收缩窗口的,而是采用先收缩窗口,过段时间再减少缓存,这样就可以避免了丢包情况。
窗口关闭
TCP 通过让接收方指明希望从发送方接收的数据大小(窗口大小)来进行流量控制。如果窗口大小为 0 时,就会阻止发送方给接收方传递数据,直到窗口变为非 0 为止,这就是窗口关闭。
接收方向发送方通告窗口大小时,是通过 ACK
报文来通告的。那么,当发生窗口关闭时,接收方处理完数据后,会向发送方通告一个窗口非 0 的 ACK 报文,如果这个通告窗口的 ACK 报文在网络中丢失了,那麻烦就大了。
这会导致发送方一直等待接收方的非 0 窗口通知,接收方也一直等待发送方的数据,如不采取措施,这种相互等待的过程,会造成了死锁的现象。
为了解决这个问题,TCP 为每个连接设有一个持续定时器,只要 TCP 连接一方收到对方的零窗口通知,就启动持续计时器。如果持续计时器超时,就会发送窗口探测 ( Window probe ) 报文,而对方在确认这个探测报文时,给出自己现在的接收窗口大小。
- 如果接收窗口仍然为 0,那么收到这个报文的一方就会重新启动持续计时器;
- 如果接收窗口不是 0,那么死锁的局面就可以被打破了。
窗口探测的次数一般为 3 次,每次大约 30-60 秒(不同的实现可能会不一样)。如果 3 次过后接收窗口还是 0 的话,有的 TCP 实现就会发 RST
报文来中断连接。
TCP的拥塞控制
流量控制主要是为了防止「发送方」的数据填满「接收方」的缓存,但它无法感知网络中的状况。在共享环境下的计算机网络中,网络拥堵可能由于其他主机之间的通信造成。
当网络发生拥塞时,继续发送大量数据包会导致更高的时延和数据包丢失。此时,TCP 会重传数据,但重传数据会加重网络负担,导致更大的延迟和更多的丢包,形成恶性循环。因此,TCP 必须考虑网络状况。它被设计成一个无私的协议,在检测到网络拥塞时,会主动降低发送的数据量。为此,TCP 引入了「拥塞控制」机制,其目的是防止「发送方」的数据过多占用网络资源。
拥塞窗口 cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。我们在前面提到过发送窗口
swnd
和接收窗口rwnd
是约等于的关系吗,两个窗口的大小通常是相互依赖和相关的,那么由于加入了拥塞窗口的概念后,此时发送窗口的值是swnd = min(cwnd, rwnd)
,也就是拥塞窗口和接收窗口中的最小值。拥塞窗口
cwnd
变化的规则:只要网络中没有出现拥塞,cwnd
就会增大、但网络中出现了拥塞,cwnd
就减少;要「发送方」没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了拥塞。也就会导致cwnd
值增大.
慢启动
TCP 在刚建立连接完成后,首先是有个慢启动的过程,这个慢启动的意思就是一点一点的提高发送数据包的数量。慢启动的算法记住一个规则就行:当发送方每收到一个 ACK,拥塞窗口 cwnd 的大小就会加 1。这里假定拥塞窗口 cwnd
和发送窗口 swnd
相等,下面举个栗子:
- 连接建立完成后,一开始初始化
cwnd = 1
,表示可以传一个MSS
大小的数据。 - 当收到一个 ACK 确认应答后,
cwnd
增加 1,于是一次能够发送2
个 - 当收到
2
个的 ACK 确认应答后,cwnd
增加2
,于是就可以比之前多发2
个,所以这一次能够发送4
个 - 当这
4
个的 ACK 确认到来的时候,每个确认cwnd
增加1
,4
个确认cwnd
增加4
,于是就可以比之前多发4
个,所以这一次能够发送8
个。
可以看出慢启动算法,发包的个数是指数性的增长。慢启动门限是发送包的涨幅上限
- 当
cwnd
<ssthresh(慢启动阈值)
时,使用慢启动算法。 - 当
cwnd
>=ssthresh
时,就会使用「拥塞避免算法」。
拥塞避免算法
拥塞避免算法和慢启动算法是两个不同的算法,但是他们都是为了解决拥塞,在实际中这两个算法通常是在一起实现的。相比于慢启动算法拥塞避免算法多维护了一个慢启动阈值ssthresh。
当cwnd<ssthresh
时,拥塞窗口使用慢启动算法,按指数级增长。 当cwnd>ssthresh
时,拥塞窗口使用拥塞避免算法,按线性增长。拥塞避免算法每经过一个RTT
,拥塞窗口增加initcwnd
。
当发生拥塞的时候(超时或者收到重复ack),RFC5681认为此时ssthresh
需要置为没有被确认包的一半,但是不小于两个MSS。此外,如果是超时引起的拥塞,则cwnd被置为initcwnd,此时为初始窗口大小,大小为1。
超时重传对传输性能有严重影响。原因之一是在RTO阶段不能传数据,相当于浪费了一段时间;原因之二是拥塞窗口的急剧减小,相当于接下来传得慢多了。
快重传
快速重传和快速恢复算法一般同时使用,快速恢复算法是认为,你还能收到 3 个重复 ACK 说明网络也不那么糟糕,所以没有必要像 RTO(超时重传协议)
那么强烈。正如前面所说,进入快速恢复之前,cwnd
和 ssthresh(慢启动阈值)
已被更新了:
cwnd = cwnd/2
,也就是设置为原来的一半;ssthresh = cwnd
;
然后,进入快速恢复算法如下:
- 拥塞窗口
cwnd = ssthresh + 3
( 3 的意思是确认有 3 个数据包被收到了); - 重传丢失的数据包;
- 如果再收到重复的 ACK,那么 cwnd 增加 1;
- 如果收到新数据的 ACK 后,把 cwnd 设置为第一步中的 ssthresh 的值,原因是该 ACK 确认了新的数据,说明从 duplicated ACK 时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态;
快速恢复算法的变化过程如下图:
也就是没有像「超时重传」一夜回到解放前,而是还在比较高的值,后续呈线性增长。
TCP超时重传时间的选择
超时重传时间的选择是TCP协议中最复杂的问题之一。以下是通过一个已经建立连接的TCP网络来说明这一问题:
如果将超时重传时间设置为一个数据报文段的发送时间大小,当接收方未收到数据报文段时,发送方会再次发送一个重传数据报文段,导致不必要的重传。
如果超时重传时间设置过大,会导致网络空闲时间过长,因为每次传输数据都需要等待一次超时重传时间(RTO)
因此,设置RTO时,应使其略大于往返时间(RTT)。
在计算RTT时,不能使用单一的样本值。因为在低层网络数据传输中,网速可能不稳定,如果设置草率,可能会降低网络速率。
在测量RTT样本时,需确保传输过程中无错误。根据不同的错误类型,需要调整不同的RTT结果,仅测量数据报文段和确认报文段的时间差无法准确获取RTT。
具体测量流程如下:采用试错法,一旦检测到错误或重传,则舍弃之前记录的RTT样本,并将新的样本值加倍
第六章 应用层
应用层的作用是处理应用的问题,它是网络协议栈的最顶层,直接与应用程序交互,为用户提供各种网络服务。应用层是建立计算机网络的最终目的。
应用层提供了一种将应用程序与网络之间的接口,使得应用程序可以通过网络传输数据。应用层协议包括HTTP、FTP、SMTP、DNS等,是计算机网络中最常用的协议之一。
提供网络服务方式
只有一个用户端的网络是没有意义的,因为在日常生活中,几乎所有的网络功能都需要与服务端进行交互。在应用层中,有许多为我们提供方便调用的网络服务,帮助实现客户端与服务端之间的通信和数据交换。应用层提供网络服务的方式主要包括客户端-服务器模型、对等网络模型、代理服务器、发布-订阅模型、远程过程调用等。这些方式使得用户可以通过各种应用程序与服务端进行通信,访问网络资源,实现数据交换和功能调用。
客户-服务器方式(CS)
客户端/服务器架构,是一种网络架构模式,客户端向服务器发送请求,服务器处理请求并返回结果。这种架构分工明确,客户端负责用户交互和部分计算,服务器集中管理数据和业务逻辑,适用于Web浏览、电子邮件、文件传输等场景。尽管具有分工明确和集中管理的优点,但也面临服务器负载和单点故障的问题。
对等方式(P2P)
计算机网络中的 P2P(Peer-to-Peer)
是一种网络架构,允许计算机直接互联并共享资源,而无需依赖中央服务器。每个节点既是客户端又是服务器,能够直接进行数据交换和服务提供,从而提高网络的效率和可靠性。
动态主机协议(DHCP)
DHCP于1993年10月成为标准协议,其前身是BOOTP协议。DHCP由RFC 2131定义,采用客户端/服务器模式,客户端(DHCP Client)向服务器(DHCP Server)请求配置,服务器为网络中的设备动态分配IP地址、子网掩码、默认网关、DNS地址等参数,使设备能够在网络中通信。
DHCP的主要功能是为连接到网络的每个设备分配唯一的IP地址,实现自动化IP地址分配。这样不仅简化了配置和部署过程,还降低了配置错误的风险。此外,DHCP服务器可以集中管理多个网段的IP配置,管理员只需在服务器上更新设置,即可实现网络中设备的自动配置和管理。
DHCP使用目的
在IP网络中,每个连接到互联网的设备都需要一个唯一的IP地址。DHCP(动态主机配置协议)通过中心化管理,帮助网络管理员自动监控和分配IP地址。当设备移动到网络中的不同位置时,DHCP会自动为其分配新的IP地址。这样不仅减少了手动配置和设备部署的时间,也降低了配置错误的概率。此外,DHCP服务器可以集中管理多个网段的IP配置,管理员只需在服务器上更新配置即可,无需手动更改每个设备的设置。DHCP的主要优势:
准确的IP配置:手动输入IP地址容易出错,导致网络连接问题。DHCP通过自动分配,确保IP地址的准确性,降低配置错误的风险。
减少IP地址冲突:每个设备都需要一个唯一的IP地址,手动分配容易导致地址冲突。DHCP确保每个地址只被分配一次,减少冲突的发生。
自动化IP地址管理:无需DHCP时,管理员必须手动跟踪和分配IP地址,这在设备频繁连接和断开时尤其困难。DHCP自动化了这一过程,使管理员能够轻松管理所有设备的IP分配。
高效的变更管理:通过DHCP,更改IP地址范围或网络设备变得更加简单。只需在DHCP服务器上更新配置,所有设备会自动获取新的设置,无需手动调整。
总体来说,DHCP通过减少手动配置、避免IP冲突、实现集中管理和自动化分配,显著提高了网络管理的效率和灵活性,是现代网络不可或缺的工具。
DHCP工作过程
DHCP是帮助用户电脑自动获取IP地址,那么电脑是如何通过 4 个步骤的过程,获取到 IP 的
先说明一点,DHCP 客户端进程监听的是 68 端口号,DHCP 服务端进程监听的是 67 端口号。DHCP通过四个步骤分配IP地址
- 客户端首先发起 DHCP 发现报文(DHCP DISCOVER) 的 IP 数据报,由于客户端没有 IP 地址,也不知道 DHCP 服务器的地址,所以使用的是 UDP 广播通信,其使用的广播目的地址是 255.255.255.255(端口 67) 并且使用 0.0.0.0(端口 68) 作为源 IP 地址。DHCP 客户端将该 IP 数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
- DHCP 服务器收到 DHCP 发现报文时,用 DHCP 提供报文(DHCP OFFER) 向客户端做出响应。该报文仍然使用 IP 广播地址 255.255.255.255,该报文信息携带服务器提供可租约的 IP 地址、子网掩码、默认网关、DNS 服务器以及 IP 地址租用期。
- 客户端收到一个或多个服务器的 DHCP 提供报文后,从中选择一个服务器,并向选中的服务器发送 DHCP 请求报文(DHCP REQUEST进行响应,回显配置的参数。
- 最后,服务端用 DHCP ACK 报文对 DHCP 请求报文进行响应,应答所要求的参数。
一旦客户端收到 DHCP ACK
后,交互便完成了,并且客户端能够在租用期内使用 DHCP 服务器分配的 IP 地址。如果租约的 DHCP IP 地址快期后,客户端会向服务器发送 DHCP 请求报文:
- 服务器如果同意继续租用,则用 DHCP ACK 报文进行应答,客户端就会延长租期。
- 服务器如果不同意继续租用,则用 DHCP NACK 报文,客户端就要停止使用租约的 IP 地址。
在 DHCP 交互过程中,整个通信都是通过 UDP 广播完成的。由于广播包无法跨越路由器,因此如果 DHCP 服务器和客户端不在同一个局域网内,广播包无法传递,似乎每个网络都需要单独配置一个 DHCP 服务器。为了解决这一问题,引入了 DHCP 中继代理。通过 DHCP 中继代理,不同网段的 IP 地址分配可以集中由一个 DHCP 服务器统一管理。
- DHCP 客户端会向 DHCP 中继代理发送 DHCP 请求包,而 DHCP 中继代理在收到这个广播包以后,再以单播的形式发给 DHCP 服务器。
- 服务器端收到该包以后再向 DHCP 中继代理返回应答,并由 DHCP 中继代理将此包广播给 DHCP 客户端 。
因此,DHCP 服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。
域名系统(DNS)*
我们在上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人类记忆。那么实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。
域名结构
DNS 中的域名都是用句点来分隔的,比如 www.server.com
,这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。
毕竟域名是外国人发明,所以思维和中国人相反,比如说一个城市地点的时候,外国喜欢从小到大的方式顺序说起(如 XX 街道 XX 区 XX 市 XX 省),而中国则喜欢从大到小的顺序(如 XX 省 XX 市 XX 区 XX 街道)。根域是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com。
所以域名的层级关系类似一个树状结构:
- 根 DNS 服务器
- 顶级域 DNS 服务器(com)
- 权威 DNS 服务器(server.com)
根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。因此,客户端只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器
域名解析过程
浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts
,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:
- 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
- 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
- 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
- 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
- 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
- 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
- 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
- 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
DNS 域名解析的过程蛮有意思的,整个过程就和我们日常生活中找人问路的过程类似,只指路不带路。
文件传输协议
FTP*
FTP(File Transfer Protocol,文件传输协议)是用于在计算机网络中传输文件的标准协议。FTP是一种客户端/服务器协议,我们一般都通过FTP客户端软件将客户端连接到服务器,并使用FTP协议来上传和下载文件。文件传输过程如下图所示:
传输过程
- 服务器打开用于FTP控制连接的TCP(Transmission Control Protocol,传输控制协议)端口21(标准),等待FTP客户端的连接。当客户端需要登录FTP服务器时,与服务端(端口21)建立控制连接,该连接始终等待客户端和服务器之间的通信,将命令从客户端传递到服务器,并传回服务器的应答。
- 每当需要文件传输时,就创建一个数据连接。
举例 寄件人文档君相当于FTP客户端,收件人相当于FTP服务器。
文档君需要寄快递,只需要在手机上操作,就可以让快递小哥上门取件,也可以随时取消取件订单,这个过程类似于控制连接。也就是说,控制连接用于传输控制指令,也可以在传输途中终止传输的指令。快递小哥取到件之后,需要负责包裹(数据)的转运,直至派送。这个过程类似于数据连接,也就是说,数据连接用于实际的文件传输, 在传输完毕后关闭数据连接,结束整个文件传输流程。
传输特点
- 安全性:FTP传输过程采用TCP明文传输,存在安全隐患,对于安全性要求较高的数据,不建议采用FTP服务。
- 可靠性:FTP使用TCP作为传输层协议进行数据传输,保证了数据传输的可靠性。
- 面向连接:FTP建立连接后会一直保持连接状态,直到连接被关闭。
- 需要身份验证:FTP服务器通常需要用户进行身份验证后才能进行文件传输,以保护数据的安全性。
- 支持的传输模式:支持二进制模式和ASCII模式,可以适应不同类型的文件传输。
- 支持文件列表:支持列出目录内容的操作。
- 支持传输大文件:可以传输GB(Gigabyte,千兆字节)大小的文件
STFP
SFTP(Secure File Transfer Protocol,安全文件传输协议)是用于在计算机网络中安全传输文件的协议,其实就是加强版的FTP,专门采用了一个加密传输技术,来提高数据传输的安全性。
传输过程
- 客户端通过密钥对要传输的文件进行加密,然后发送给SFTP服务器。
- SFTP服务器使用密钥对加密文件进行解密,最终得到原文件。
传输特点
- 安全性:SFTP使用SSH(Secure Shell,安全外壳协议)的加密机制,SSH可以在不安全的网络中对网络服务提供安全的传输环境,相当于给文件传输通道加上了一个保护罩,从而保证了数据的安全传输。
- 可靠性:SFTP的传输过程是可靠的。如果传输中断,它可以从上一次中断的地方恢复,而无需重新传输整个文件。
- 面向连接:SFTP建立连接后会一直保持连接状态,直到连接被关闭。
- 需要身份验证:SFTP 提供了两种验证连接的方法。
- 与 FTP 一样,连接时只需要验证用户 ID 和密码就可以了,但是,与FTP不同的是,这些凭据是加密的,这是 SFTP 最主要的安全优势。
- 除密码外,还可以通过 SSH 密钥来验证并通过 SFTP 协议连接。
- 支持的传输模式:二进制模式和ASCII模式,可以适应不同类型的文件传输。
- 支持文件列表:支持列出目录内容的操作。
- 支持传输大文件:可以传输GB(Gigabyte,千兆字节)大小的文件。
TFTP
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一个用来在客户端与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,它只能从服务器上获得或写入文件。
TFTP客户端和TFTP服务器都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。类似于我们生活中和小伙伴打语音电话,一方发出语音请求,另一方可以接收语音。
传输特点
- 安全性:TFTP不支持任何身份验证机制,因此安全性较差,需要在安全的网络中使用。
- 可靠性:TFTP基于UDP(User Datagram Protocol,用户数据报协议)协议实现,没有错误恢复和重传机制,是不可靠的。
- 面向无连接:TFTP是面向无连接的,即每个TFTP包都是独立的,不需要建立连接。
- 不支持身份验证:TFTP不支持任何身份验证机制,因此安全性较差,需要在安全的网络中使用。
- 支持的传输模式:支持二进制模式和ASCII模式,可以适应不同类型的文件传输。二进制模式和ASCII模式,可以适应不同类型的文件传输。
- 不支持文件列表:TFTP不支持列出目录内容的操作,用户需要知道需要下载或上传的文件名。
- 不支持传输大文件:TFTP只能传输较小的文件,因为它限制了数据包的大小。
电子邮件(SMTP)*
简单邮件传输协议(SMTP)是一种通过网络传输电子邮件的技术标准。与其他网络协议一样,SMTP 允许计算机和服务器交换数据,无论其底层硬件或软件是什么。正如使用信封地址书写的标准化格式允许邮政服务得以运作一样,SMTP 标准化电子邮件从发件人到收件人的传输方式,使广泛的电子邮件传递成为可能。
SMTP 是一种邮件传递协议,而非邮件检索协议。邮政服务将邮件传递到邮箱,但收件人仍然必须从邮箱中提取邮件。同样,SMTP 将电子邮件传递到某个电子邮件提供商的邮件服务器,但需要使用其他协议来从邮件服务器检索该电子邮件,以便收件人读取邮件。
所有网络协议都遵循一个预定义的数据交换过程。SMTP 定义了一个在电子邮件客户端和邮件服务器之间交换数据的过程。电子邮件客户端是用户与之交互的对象:计算机或 Web 应用程序,用户可以在其中访问和发送电子邮件。邮件服务器是用于发送、接收和转发邮件的专用计算机;用户不会与邮件服务器直接进行交互。
上图概述邮件客户端和邮件服务器开始发送邮件时所传递的内容:
- SMTP 连接打开:由于SMTP使用传输控制协议(TCP)作为传输协议,因此第一步从客户端和服务器之间建立 TCP 连接开始。接下来,电子邮件客户端以一个专门的“Hello”命令(HELO or EHLO,如下所述)开始电子邮件发送过程。
- 电子邮件数据传递:客户端向服务器发送一系列带有邮件实际内容的命令:邮件头(包括目的地和主题行)、邮件正文以及任何其他组件。
- 邮件传送代理(MTA):服务器运行一个称为邮件传送代理(MTA)的程序。MTA 检查收件人的电子邮件地址,如果该地址不同于发件人地址,则查询域名系统(DNS)以找到收件人的 IP 地址。这个过程好比邮局查找邮件收件人的邮政编码。
- 连接关闭:客户端在数据传输完成时通知服务器,服务器关闭连接。此时,服务器将不会从客户端接受任何额外电子邮件数据,除非客户端打开新的 SMTP 连接。
通常情况下,上述第一个电子邮件服务器不是实际电子邮件的最终目的地。该服务器收到客户端发来的邮件后,会与另一个邮件服务器重复此 SMTP 连接过程。第二个服务器也进行同样的操作,直到电子邮件最终到达收件人的收件箱,其位于收件人电子邮件提供商控制的邮件服务器上。
这个过程好比邮件从发件人传送到收件人的方式。邮差不会直接将信件从发件人送到收件人手上。实际上,邮差会将信件带回邮局。邮局将信件运送到另一个城镇的邮局,然后是另一个,如此重复,直至信件到达收件人。同样,电子邮件通过 SMTP 协议从一个服务器传送到另一个服务器,直至到达收件人的收件箱。
SMTP格式
万维网
万维网(World Wide Web,简称 WWW)是一个全球性的互联网信息系统,它通过超文本链接(Hypertext Links)将各种信息资源连接在一起,使得用户可以通过浏览器访问和查看这些资源。万维网的主要特点和功能包括:
- 超文本系统:万维网利用超文本链接将不同的网页和资源相互连接,使用户可以轻松地从一个页面跳转到另一个页面。
- 网页和网站:万维网由大量的网页和网站组成,每个网页包含文本、图像、视频和其他多媒体内容,通过统一资源定位符(URL)进行访问。
- HTTP 协议:万维网使用超文本传输协议(HTTP)进行数据传输,这是一种标准的网络协议,用于在客户端(如浏览器)和服务器之间传输网页数据。
- 浏览器访问:用户通过网页浏览器(如 Chrome、Firefox、Safari)访问和浏览万维网上的资源。浏览器负责解释网页代码(通常是 HTML)并呈现内容。
- 分布式和开放:万维网是一个分布式的系统,不依赖于单一的中央服务器,任何人都可以创建和发布内容,只要有适当的技术和工具。
万维网的诞生和发展极大地改变了信息的获取和传播方式,推动了互联网的发展和普及。需要注意的是,万维网是互联网的一部分,而互联网还包括其他服务,如电子邮件、文件传输和即时通讯等。
浏览万维网的内容需要用浏览器
浏览器将指定的内容渲染出来,指定的内容用下列语言实现
Cookie
HTTP Cookie 或互联网 Cookie 专门为 Web 浏览器打造,用于跟踪、个性化和保存有关每个用户会话的信息。会话一词用来定义您在网站上花费的时间。当您访问一个新网站时,将创建 Cookie 来标识您的身份。Web 服务器(用于存储网站的数据)向您的 Web 浏览器发送一小段 Cookie 形式的标识信息。这些标识数据(有时称为浏览器 Cookie)按“名称-值”对的形式进行处理和读取。这些数据对告诉 Cookie 要发送到哪里以及要检索哪些数据。
那么,Cookie 存储在哪里?答案很简单: Web 浏览器会将它们存储在本地,以记住标识您身份的名称-值对。当您将来回访该网站时,您的 Web 浏览器会将 Cookie 数据返回给网站服务器,从而检索您以前会话中的数据。
简单来说,Cookie 有点像衣帽寄存处的票据:
- 将“外套”交给寄存处。你连接/访问一个网站,网站服务器上的一小部分数据即与你关联。该数据可以是你的个人账户、购物车,甚至只是你访问过的页面。
- 你获得一张“票”来将你标识为“外套”的所有者。随后将 Cookie(包含相关数据)提供给你并存储在你的 Web 浏览器中。它有一个专门为你创建的唯一 ID。
- 如果您离开后再返回,您可以凭“票”获得“外套”。当您重新访问该网站时,你的浏览器会将 Cookie 返回给网站。网站随后读取 Cookie 中的唯一 ID 来汇集你的活动数据,将你带回到你第一次访问时的位置,就像你从未离开过一样。
HTTP
HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。它可以拆成三个部分:超文本、传输、协议
协议
生活中的协议,本质上与计算机中的协议是相同的,协议的特点:
- 「协」字,代表的意思是必须有两个以上的参与者。例如三方协议里的参与者有三个:你、公司、学校三个;租房协议里的参与者有两个:你和房东。
- 「议」字,代表的意思是对参与者的一种行为约定和规范。例如三方协议里规定试用期期限、毁约金等;租房协议里规定租期期限、每月租金金额、违约如何处理等。
针对 HTTP 协议,我们可以这么理解。HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。
传输
所谓的「传输」,很好理解,就是把一堆东西从 A 点搬到 B 点,或者从 B 点 搬到 A 点。别轻视了这个简单的动作,它至少包含两项重要的信息。HTTP 协议是一个双向协议。
我们在上网冲浪时,浏览器是请求方 A,百度网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。
数据虽然是在 A 和 B 之间传输,但允许中间有中转或接力。就好像第一排的同学想传递纸条给最后一排的同学,那么传递的过程中就需要经过好多个同学(中间人),这样的传输方式就从「A < —- > B」,变成了「A <-> N <-> M <-> B」。而在 HTTP 里,需要中间人遵从 HTTP 协议,只要不打扰基本的数据传输,就可以添加任意额外的东西。针对传输,我们可以进一步理解了 HTTP。
HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
超文本
HTTP 传输的内容是「超文本」。我们先来理解「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算作「文本」。再来理解「超文本」,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。
OK,经过了对 HTTP 里这三个名词的详细解释,就可以给出比「超文本传输协议」这七个字更准确更有技术含量的答案:
HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
统一资源定位符(URL)
URL是统一资源定位器(Uniform Resource Locator)的首字母缩写,表示资源在计算机网络(最常见的是网络)上的位置。通常,这些资源是网页,但它们也可以是文本文档、图形、程序或几乎任何可以数字存储的内容。
基本URL将由三部分或子字符串组成,并通过定义字符分隔。其中包括协议,主机名或地址以及资源位置。URL字符串的简单示例采用以下形式:http://www.example.com/index.html。**http://或https://**
“http”代表超文本传输协议。让浏览器知道它将使用哪种协议来访问域名中指定的信息。“
https”协议是“超文本传输协议安全”的缩写,表示通过HTTP传输的信息已加密且安全。在http或https之后是冒号(:)和两个正斜杠(//),用于将协议与URL的其余部分分隔开。
www:”www”代表万维网,用于区分内容。URL的这一部分不是必需的,可以省去。例如,键入”https://may90.com"仍将带您进入MAY的SEO博客。
example.com:example.com是网站的域名。域的最后一部分称为域后缀,即TLD。它用于标识网站的类型或位置。例如:“.com”是商业名称的缩写;“.org”是组织的缩写;“.co.uk”是英国。要获取域名,您可以通过域名注册商来注册。
index.html:最后,index.html是您正在查看域的实际网页。尾随的.html是网页的文件扩展名,指示该文件是HTML文件。Internet上的其他常见文件扩展名,包括.htm、.php、.asp、.cgi、.xml、.jpg和.gif。这些文件扩展名中的每一个都执行不同的功能,就像计算机上所有不同类型的文件一样。