计算机网络
约 47595 字大约 159 分钟
操作系统
- 1. 计算机网络概述
- 2. 物理层
- 3. 数据链路层
- 4. 网络层
- 4.1. IP体系的网络层提供的服务和虚拟互连网络
- 4.2. IP地址及其编址方法三个阶段
- 4.3. ip数据报(网络层协议数据单元)
- 4.4. 地址解析协议ARP(Address Resolution Protocol 同一个局域网,跨网络由路由器完成转发)
- 4.5. 网络控制报文协议 ICMP(Internet Control Message Protocol)(为了更有效地转发ip数据报和提交交付成功的机会)
- 4.6. 内部网关协议-路由信息协议RIP(Routing Information Protocol)
- 4.7. 内部网关协议OSPF(OpenShortest Path First)
- 4.8. 外部网关协议BGP
- 4.9. 路由器的构成
- 4.10. 虚拟专用网VPN
- 4.11. 网络地址转换NAT (Network Address Translation)
- 5. 运输层
- 6. 应用层
1. 计算机网络概述
1.1. 计算机网络概念
- ISP(Internet Service Provider):因特网服务提供者(如中国电信等),可以从因特网管理结构申请到很多IP地址。任何机构和个人只要向某个ISP交纳规定费用就能获取IP地址使用权,并可通过该ISP接入互联网.中国通过海底电缆连接外国网络
- IXP(Internet eXchagne Point):因特网交换点,将两个ISP直接连接,不需要通过第三个ISP转发分组,更加有效利用网络资源。一般由一个或多个数据链路层的网络交换机构成的局域网组成,许多ISP再连接到这些网络交换机的相关端口
- RFC(Request For Comments)所有的因特网标准都是以RFC的形式在因特网上发表的
- 计算机网络标准化工作步骤:因特网草案、建议标准、草案标准、因特网标准
- 计算机网络相关组织:国际标准化组织(ISO)、国际电信联盟(ITU)、美国电气和电子工程师协会(IEEE)等
- 计算机网络:互连的、自治的计算机系统的集合
- AN(Access Network)接入网/本地接入网或居民接入网。接入网是从某个端系统到另一个端系统的路径中,由这个端系统到第一个边缘路由器之间的一些物理链路组成。用户可以使用多种接入网技术连接到因特网ISP
- 网络协议(network protocol):为进行网络中数据交换而建立的规则、标准或约定,规定了所交换的数据的格式以及有关的同步问题。由以下三要素组成
- 语法:定义数据和控制信息的结构或格式
- 语义:定义要发出何种控制信息,完成何种动作以及做出何种响应
- 同步:即事件实现顺序的详细说明
- 实体(entity):任何可以发送和接收信息的硬件或软件进程
- 对等层:不同机器上的同一层
- 对等实体:同一层上的实体
- 协议:控制两个对等实体(或多个实体)进行通信的规则的集合,协议在语法方面的规则定义了所交换的信息的格式;而协议在语义方面的规则就定义了发送者或者接受者所要完成的操作;协议在同步方面规定了收发双方的时序关系,即在一定条件下应当发生什么事件。在协议的控制下,两个对等实体之间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层提供的服务,下面的协议对上面的实体是透明的
- 服务访问点SAP(Service Access Point)/接口:在同一系统中相邻两层实体进行交互(即交换信息)的地方
- 服务数据单元SDU(Service Data Unit):第n层的服务数据单元,记作n-SDU 层与层之间交换的数据的单位(层与层之间交换的数据单位)
- 协议控制信息PCI:第n层的协议控制信息,记作n-PCI
- 接口控制信息ICI:第n层的接口控制信息,记作n-ICI
- 协议数据单元PDU(Protocol Date Unit):n-SDU + n-PCI = n-PDU (对等层次之间传送的数据单位)
- 接口数据单元IDU:n-SDU + n-ICI = n-IDU
1.2. 计算机网络组成
- 工作方式组成
- 边缘部分:由所有连接在因特网上的主机/端系统组成,用来进行通信和资源共享;端系统之间的通信(实际是计算机进程间通信)方式分为:
- 终端机器->路由器->网关->地区ISP
- 终端机器->路由器->内部网关->统一网关->地区ISP
- 客户-服务器(C/S)方式:客户是服务的请求方,服务器是服务的提供方。服务的请求方和服务提供方都要使用网络核心部分所提供的服务
- 对等连接方式(P2P)方式:运行了对等连接软件的两个主机可以平等的、对等连接通信(每个主机既是客户端也是服务端)
- 核心部分:由大量的网络和连接这些网络的路由器组成,为边缘部分提供连通性和交换服务
- 主干ISP->国际路由器->主干ISP
- 报文(message):要发送的整块数据
- 分组/包(packet):发送报文前把较长的报文划分为一个更小的等长数据段,在每个数据段前面加上必要的控制信息组成的首部/包头(header)后,就构成分组。分组是因特网中传送的数据单元。由于分组中的首部包含了诸如目的地址和源地址等重要控制信息,每个分组才能在因特网中独立地选择路径,并被正确交付到分组传输的终点
- 路由器是实现分组交换(packet switching)的关键构件,任务是转发收到的分组(网络层的IP数据报)。分组交换采用存储转发技术。路由器收到一个分组,先暂时在存储器(内存)中存储一下,检查其首部,查找转发表,按照首部中的目的地址,找到合适的接口转发出去,把分组交给下一个路由器。这样一步一步地(有时候会经过几十个不同的路由器)以存储转发的方式,把分组交付最终的目的主机。各路由器之间必须经常交换彼此掌握的路由信息,以便创建和维持路由器中的转发表,使得转发表在整个网络拓补发生变化时及时更新。
- 分组交换在传送数据之前不必占用一条端到端的通信资源,分组在哪段链路上传送时,才占用这段链路的通信资源;分组交换不需要建立连接和释放连接;采用在数据通信过程中断续(或动态)分配传输带宽的策略
- 分组在各路由器存储转发需要排队,造成一定时延;分组交换无法保证通信时端到端所需的带宽;各分组携带的控制信息造成一定开销。整个分组交换网还需要专门的管理和控制机制
- 边缘部分:由所有连接在因特网上的主机/端系统组成,用来进行通信和资源共享;端系统之间的通信(实际是计算机进程间通信)方式分为:
- 物理组成
- 硬件:由主机、通信处理机(前端处理器)、通信线路(有线线路和无线线路)和交换设备(交换机等连接设备)组成
- 软件:实现资源共享的软件和方便用户使用的各种工具软件
- 协议:数据在线路上传输遵循的规则
- 功能组成
- 通信子网:由各种传输介质、通信设备和相应的网络协议组成,为网络提供数据传输、交换和控制能力,实现联网计算机之间的通信
- 资源子网:由主机、终端以及各种软件资源、信息资源组成,负责全网的数据处理业务,向网络用户提供各种网络资源与服务
1.3. 计算机网络功能:数据通信、资源共享、分布式处理、信息综合处理、负载均衡、提高可靠性
1.4. 计算机网络分类
- 按网络作用范围分类:广域网WAN(Wide Area Network)、城域网MAN(Metropolitan Area Network)、局域网LAN(Local Area Network)、个人区域网PAN(Personal Area Network)
- 按使用者分类:公用网(public network)、专用网(private network)
- 按拓补结构分类:星型网络、总线型网络、环形网络、网状形网络
- 按传输技术分类:广播式网络、点对点网络
- 按数据交换技术分类:电路交换网络、报文交换网络、分组交换网络
- 服务:下层为相邻上层提供的功能调用
- 面向连接的服务TCP:双方通信需要建立通信线路,包括建立连接、使用连接和释放连接3个过程
- 面向无连接的服务UDP/IP:通信时只需把每个带有目的地址的包(报文分组)传送到线路上,由系统选定路线进行传输
- 可靠服务:网络具有检错、纠错、应答机制,能保证数据正确、可靠地传送到目的地
- 不可靠服务:网络不能保证数据正确、可靠地传送到目的地,尽力而为的服务
1.5. 计算机网络的体系结构
- 计算机网络的体系结构:计算机网络的各层及其协议的集合/这个计算机网络及其构件所完成的功能的精确定义
- 计算机网络体系结构分层好处:各层之间是独立的、灵活性好、结构上可以分割开、易于实现和维护、能促进标准化工作
- 国际标准化组织ISO提出的开放系统互连基本参考模型OSI/RM(Open Systems Interconnection Reference Model)模型:法律上的国际标准(7层协议的体系结构)(了解)
- TCP/IP的体系结构:事实上的国际标准(5层协议的体系结构)
- 应用层(用户对用户):应用进程间的通信和交互规则(http、SMTP、FTP协议)使用报文作为数据单元
- 传输层(应用对应用、进程对进程):负责向两个主机进程之间的通信提供通用的数据传输服务(TCP/UDP协议)
- 网络层(主机对主机):负责为分组交换网上的不同主机提供通信服务,把运输层的报文封装成分组或包(IP数据报)
- 数据链路层:负责将网络层交下来的IP数据报组成帧
- 物理层:确定如何识别发送方的比特流和连接电缆的插头应该有多少引脚以及各条引脚应该如何连接。数据单位比特
1.6. 计算机网络性能指标
- 比特(bit):二进制数字中一个的1或0
- 速率/比特率:单位时间内传送的比特数,单位b/s、bit/s、kb/s。网络的额定速率.常用单位为Mbps
- 带宽(bandwidth):单位时间内从网络的某一点到另一点所能通过的最高数据率。单位b/s、kb/s。表示网络的通信线路传送数据的能力
- 吞吐量(throughput):单位时间内通过某个网络(或信道、接口)的实际数据量,有时吞吐量还可以用每秒传送的字节数或帧数表示。受网络的带宽或者网络的额定速率的限制
- 时延(delay/latency):数据(一个报文\分组\比特)从网络(或链路)的一端传送到另一端所需的时间,单位s,包括发送时延、传播时延、处理时延、排队时延
- 发送时延:发送时延 = 数据长度(bit)/发送速率(bit/s)(受限于网卡)
- 传播时延:传播时延 = 传输路径距离/传播速率(bit/s)(受限于传输介质)
- 排队时延:排队时延 = 数据包在网络设备中等待被处理的时间
- 处理时延:数据包到达设备或者目的机器被处理需要的时间
- 时延带宽积:传播时延乘以带宽(以比特为单位的链路长度)单位bit
- 往返时间RTT(Round-Trip Time):从发送方发送数据开始,到发送方收到来自接受方的立即发送的确认所需的时间。与发送的分组长度有关.ping命令查看RTT
- 信道利用率:某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道利用率为0
- 网络利用率:全网路的信道利用率的加权平均值,信道或网络利用率太高会产生很大时延
2. 物理层
2.1. 物理层的基本概念
- 物理层的主要任务:确定与传输媒体的接口有关的一些特性
- 机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等
- 电气特性:指明接口电缆的各条线上出现的电压的范围
- 功能特性:指明某条线上出现的某一电平的电压的意义
- 过程特性:指明不同功能的各种可能时间的出现顺序
- 物理层作用:考虑怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体媒体。屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到.连接不同的物理设备,传输比特流(高低电平、数字信号)
- 比特流:物理层的传输的单位(数字信号(高低电平))
2.2. 数据通信的基础知识(了解)
![42.PNG](https://290ff162.telegraph-image-eg9.pages.dev/file/1b2277e0e71f845df91ca.png)
- 数据通信系统模型
- 源系统/发送端/发送方
- 源点(source)/源站/信源:源点设备产生要输出的数字比特流
- 发送器/调制解调器:源点生成的数字比特流要通过发送器编码成模拟信号
- 传输系统/传输网络/信道:信号的传输媒质
- 目的系统/接收端/接收方
- 接收器/调制解调器:接收模拟信号进行解调还原成源点产生的数字比特流
- 终点(destination)/目的站/信宿:终点设备从接收器获取传送过来的数字比特流,然后输出信息
- 源系统/发送端/发送方
- 数据(data):传送消息的实体,通常是有意义的符号序列
- 码元:在使用时间域的波形表示数字信号时,则代表不同离散数值的基本波形就称为码元
- 信号(signal):数据的电气或电磁的表现。根据信号中代表消息的参数取值方式不同分为:
- 模拟/连续/宽带信号:代表消息的参数的取值是连续变化的;将基带信号调制后形成(用户的调制调节器到电话端局之间的用户线上传输的就是模拟信号)
- 数字/离散/基带信号:代表消息的参数的取值是有限离散的;将数据信号的0和1用不同的电压表示(PC到调制解调器之间,或在电话网中继线上传输的就是数字信号)
- 信道(channel):用来表示向某一个方向传送信息的媒体,一条通信电路通常包含一条发送信道和一条接收信道
- 基带信号:来自信源的信号(计算机输出的代表各种文字或图像文件的数据信号都属于基带信号
- 调制(modulation): 解决基带信号往往包含较多的低频成分,甚至有直流成分,而很多信道并不能传输这种低频分量或直流分量的问题
- 基带调制/编码(coding):仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号依然是基带信号;常用曼彻斯特(Manchester)编码方式:产生信号频率高,还具有同步能力,即能从波形本身提取信号时钟频率
- 带通调制:使用载波进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟/带通信号(仅在一段频率范围内能够通过信道)基本的带通调制方法如下
- 调幅(AM) 载波的振幅随基带数字信号而变化
- 调频(FM) 载波的频率随基带数字信号而变化
- 调相(PM) 载波的初始相位随基带数字信号而变化
- 为了达到更高的信息传输速率,必须采用多元制的振幅相位混合调制方法->正交振幅调制QAM(Quadrature Amplitude Modulation)
- 数据传输方式
- 串行传输:一个一个比特按照顺序传输(远距离传输)
- 并行传输:多个比特通过多条通信信道传输(近距离传输)
- 通信方式
- 同步通信:要求接收端的时钟频率和发送端的时钟频率相等,以便接收端对收到的比特流的采用判决时间是准确的
- 异步通信:发送数据以字节为单位,发送完一个字节后可以经过任意长的时间间隔再发送下一个字节
- 信息交互方式
- 单向通信/单工通信:只能有一个方向的通信而没有反方向的交互(无线电广播或有线电广播),1个信道
- 双向交替通信/半双工通信:双方都可以发送消息,但不能双方同时发送和同时接收,2个信道
- 双方同时通信/全双工通信:通信的双方都可以同时发送和接收消息,2个信道
- 数字通信的优点:在接收端只要能从失真的波形识别出原来的信号,那么这种失真对通信质量就没有影响。码元的传输速率越高,或者信号传输的距离越远,或噪声干扰越大,或传输媒体质量越差,在接收端的波形失真就越严重。
- 限制码元在信道上传输速率的因素:
- 信道能通过的频率范围:奈奎斯特(Nyquist奈氏)准则:在任何信道中,码元传输速率是有上限的,传输速率超过此上限,就会出现严重的码间串扰的问题,使接收端对码元的判别成为不可能。如果信道的频带越宽,也就是能够通过的信号高频分量越多,那么就可以用更高的速率传送码元而不出现码间串扰
- 信噪比:信号的平均功率和噪声的平均功率之比(S/N),单位分贝(dB):香农(Shannon)公式:信道的带宽或信道中的信噪比越大,信息的极限传输速率越高,只要信息传输速率低于信道的极限信息传输速率,就可以找到某种办法来实现无差错的传输。当码元传输速率达到上限时,可以通过编码的方式让每个码元携带更多比特的信息量来提高信息的传输速率
2.3. 传输媒体
- 传输媒体/传输介质/传输媒介,就是数据传输系统中在发送器和接收器中的物理通路
- 引导型传输媒体:电磁波沿着固体媒体传播:双绞线(网线,双绞为了抑制相邻导线噪声干扰)、同轴电缆(有线电视网)和光纤
- 非引导型传输媒体:电磁波在自由空间中传输(无线):无线电微波通信和红外通信、激光通信
2.4. 信道复用技术
![43.PNG](https://290ff162.telegraph-image-eg9.pages.dev/file/4917849a166e641a1cb00.png)
- 提高信道利用率
- 频分复用FDM(Frequency Division Multiplexing):按频率划分的不同信道,用户分到一定的频带后,在通信过程中自始至终都占用这个频带,所有用户在同样的时间占用不同的频率带宽
- 时分复用TDM(Time Division Multiplexing)/同步时分复用:按时间划分为一段段等长的时分复用帧(TMD帧),每一个时分复用的用户在每一个TDM帧中占用固定序列号的间隙,所有用户是在不同时间占用同样的频带宽度,每个用户占用的频带宽度固定
- 统计/异步时分复用STDM(Statistic TDM):所有用户是在不同时间占用同样的频带宽度,每个用户占用的频带宽度根据需要变化
- 波分复用WDM(Wavelength Division Multiplexing)/光的频分复用:光纤技术中由于光载波的频率很高,因此习惯上用波长而不用频率来表示所用的光载波,故称为波分复用
- 码分复用CDM(Code Division Multiplexing):所有用户可以在同样的时间使用同样的频带。各用户使用经过特殊处理的不同码型,因此各个用户之间不会造成干扰
2.5. 物理层设备
- 中继器:将已经衰减得不完整的信号经过整理,重新产生完整的信号在继续传送,放大的是数字信号
- 集线器:多个端口的中继器,收到消息后广播到其他计算机,其他计算机判断是否是发给自己的,是自己的就处理
2.6. 连接用户与互联网的接入网
- 所谓接入网,就是指连接互联网与家庭、公司网络的通信线路 。一般家用的接入网方式包括 ADSL 、FTTH 、CATV、电话线、ISDN 等,公司则还可能使用专线
- ADSL:Asymmetric Digital Subscriber Line,不对称数字用户线。它是一种利用架设在电线杆上的金属电话线来进行高速通信的技术,它的上行方向(用户到互联网)和下行方向(互联网到用户)的通信速率是不对称的
- FTTH:Fiber To The Home,光纤到户。指的是将光纤接入家庭的意思
- 用户端路由器 发出的网络包通过 ADSL Modem 和电话线到达电话局,然后到达 ADSL 的网络运营商(即 ISP,互联
网服务提供商)。在网络包从用户传输到运营商的过程中,会变换几种不同的形态, - BAS:Broadband Access Server,宽带接入服务器。它也是一种路由器。
- PPP:Point-to-Point Protocol,点到点协议。它是电话线、ISDN 等通信线路所使用的一种协议,集成了用户认证、配置下发、数据压缩、加密等各种功能。
- ADSL Modem 会把包拆分成很多小格子(图 4.3 ⑦),每一个小格子称为一个信元。信元是一个非常小的数据块,开头是有 5个字节的头部,后面是 48 个字节的数据,用于一种叫作 ATM 的通信技术。ADSL Modem 将包拆分成信元,并转换成电信号发送给分离器。
- ATM:Asynchronous Transfer Mode,异步传输。它是在以电话线为载体的传统电话技术基础上扩展出来的一种通信方式。它的数据传输是以“信元”为单位来进行的,这和以包为单位传输数据的 TCP/IP 很像,但这种方式并不适用于计算机通信
- 将数字信息转换成模拟信号,ADSL 采用的方法要复杂一些。其中有两个原因,一个原因是方波信号的波形容易失真,随着距离的延长错误率也会提高;另一个原因是方波信号覆盖了从低频到高频的宽广频段,信号频率越高,辐射出来的电
磁噪声就越强,因此信号频谱太宽就难以控制噪声。ADSL Modem 采用了一种用圆滑波形(正弦波)对信号进行合成来表示 0 和 1 的技术,这种技术称为调制。调制有很多方式,ADSL 采用的调制方式是振幅调制(ASK)和相位调制(PSK)相结合的正交振幅调制(QAM) 方式(振幅调制是用信号的强弱,也就是信号振幅的大小来对应 0 和 1 的方式。如图 4.4(b),振幅小的信号为0,振幅大的信号为 1,如果将振幅增加到 4 个级别,则振幅从小到大可分别对应
00、01、10 和 11,这样就可以表示两个比特了。不过,信号会在传输过程中发生衰减,也会受到噪声影响而失真,如果振幅级别太多,接收方对信号的识别就容易出错,因此振幅级别也不能太多。另一个组成要素是相位调制,这是一种根据信号的相位来对应 0 和 1 的方式。Modem 产生的信号是以一定周期振动的波,如图 4.5 所示,振动的起始位置不同,波的形状也就不同。如果将波的一个振动周期理解为一个圆,则起始位置就可以用 0 度到 360 度的角度来表示,这个角度就是相位,用角度来对应 0 和 1 的方式就叫作相位调制。例如,从 0 度开始的波为 0,从 180 度开始的波为 1,这是一种最简单的对应关系,ADSL 使用的正交振幅调制就是将前面这两种方式组合起来实现的。正交振幅调制就可以用一个波表示更多的比特,从而提高传输速率。正交振幅调制中,通过增加振幅和相位的级别,就可以增加能表示的比特数。例如,如果振幅和相位各自都有 4 个级别,那么组合起来就有 16 个级别,也就可以表示 4 个比特的值。当然,和单独使用振幅调制或相位调制的情况一样,级别过多就容易发生误判,因此这种方法提升的速率是有限度的。) - 信号是一个频率的波,不同频率的波可以合成,也可以用滤波器从合成的波中分离出某个特定频率的波。因此,我们可以使用多个频率合成的波来传输信号,这样一来,能够表示的比特数就可以成倍提高了。ADSL 使用间隔为 4.3125 kHz 的上百个不同频率的波进行合成,每个波都采用正交振幅调制,而且,根据噪声等条件的不同,每个波表示的比特数是可变的。也就是说,噪声小的频段可以给波分配更多的比特,噪声大的频段则给波分配较少的比特 ,每个频段表示的比特数加起来,就决定了整体的传输速率。ADSL 技术中,上行方向(用户到互联网)和下行方向(互联网到用户)的传输速率是不同的,原因也在这里。如果上行使用 26 个频段,下行则可以使用 95 个或者 223 个频段,波的数量不同,导致了上下行速率不同。当然,下行使用的频段较高,这些信号容易衰减而且更容易受到噪声的影响,因此这些频段可能只能表示较少的比特数,或者干脆无法传输信号。距离越远,频率越高,这种情况也就越显著,因此如果你家距离电话
局太远,速率就会下降。噪声和衰减等影响线路质量的因素在每条线路上都不同,而且会随着时间发生变化。因此,ADSL 会持续检查线路质量,动态判断使用的频段数量,以及每个频段分配到的比特数。具体来说,当 Modem 通电后,会发送测试信号,并根据信号的接收情况判断使用的频段数量和每个频段的比特数,这个过程称为训练(握
手),需要几秒到几十秒的时间。 - 要通过分离器将传入的信号分离,以确保 ADSL 信号不会传入电话机。具体来说,分离器的功能是将一定频率以上的信号过滤掉,也就是过滤掉了 ADSL 使用的高频信号,这样一来,只有电话信号才会传入电话机,但对于另一头的 ADSL Modem,则是传输原本的混合信号给它。ADSL Modem 内部已经具备将 ADSL 频率外的信号过滤掉的功能,因此不需要在分离器进行过滤,如果ADSL 通信过程中拿起话筒导致线路状态改变,就需要重新训练(握手),这就会导致几十秒的通信中断,分离器可以防止发生这样的问题。
- 信号通过电话线到达电话局之后,会经过配线盘、分离器到达 DSLAM (图 4.3 ⑨)。在这里,电信号会被还原成数字信息——信元(图 4.3 ⑩)。 DSLAM 通过读取信号波形,根据振幅和相位判断对应的比特值,将信号还原成数字信息,这一过程和用户端的 ADSL Modem 在接收数据时的过程是一样的。因此,如果在电话局里安装一大堆和用户端一样的 ADSL Modem,也可以完成这些工作,只不过安装这么多 Modem需要占用大量的空间,而且监控起来也非常困难。因此,电话局使用了 DSLAM 设备,它是一种将相当于很多个 ADSL Modem 的功能集中在一个外壳里的设备。
- DSLAM:DSL Access Multiplexer,数字用户线接入复用设备。它是一种电话局用的多路 ADSL Modem,可以理解为将多个 ADSL Modem 整合在一个外壳里的设备。DSLAM 具有 ATM 接口,和后方路由器收发数据时使用的是原始网络包拆分后的 ATM 信元形式
- BAS 负责将 ATM 信元还原成网络包并转发到互联网内部。
- 光纤接入网(FTTH)
- 光信号亮表示 1,暗表示 0.先将数字信息转换成电信号,然后再将电信号转换成光信号。这里的电信号非常简单,1 用高电压表示,0 用低电压表示。将这样的电信号输入 LED、激光二极管等光源后,这些光源就会根据信号电压的变化发光,高电压发光亮,低电压发光暗。这样的光信号在光纤中传导之后,就可以通过光纤到达接收端。接收端有可以感应光线的光敏元件,光敏元件可以根据光的亮度产生不同的电压。当光信号照射到上面时,光亮的时候就产生高电压,光暗的时候就产生低电压,这样就将光信号转换成了电信号。最后再将电信号转换成数字信息,我们就接收到数据了。
- 光源在所有方向上都会发光,因此会有各种角度的光线进入纤芯,但入射角度太大的光线会在纤芯和包层(纤芯外沿部分)的边界上折射出去,只有入射角较小的光线会被包层全反射,从而在纤芯中前进.光也是一种波,因此光也有如图 4.5 中那样的相位,当光线在纤芯和包层的边界上反射时,会由于反射角产生相位变化。当朝反射面前进的光线和被反射回来的光线交会时,如果两条光线的相位不一致,就会彼此发生干涉抵消,只有那些相位一致的光线才会继续在光纤中传导。光在被纤芯和包层的边界反射时,相位会发生变化。这个变化的量随光在反射面的反射角度不同而不同,大多数角度下,都会因为相位不同而被干涉抵消。不过,有几个特定的角度下,向反射面前进的光和反射回来的光的相位是一致的,只有以这些角度反射的光才能继续向前传导(图 4.13)。进入光纤的光线有各种角度,但其中,只有少数按照特定角度入射以保持相位一致的光线才会继续传导。
- 光纤可以划分成几种类型,大体上包括较细的单模光纤(8~10 μm)和较粗的多模光纤(50 μm 或 62.5 μm)。单模光纤的纤芯很细,只有入射角很小的光线才能进入,因此在能够保持相位一致的角度中,只有角度最小的光线能进入光纤。反过来可以说,单模光纤的纤芯直径就是按照只允许相位一致的最小角度的光进入而设计的。多模光纤的纤芯比较粗,入射角比较大的光也可以进入,这样一来,在相位一致的角度中,不仅角度最小的可以在光纤中传导,其他角度更大一些的也可以,也就是说,可以有多条光线在纤芯中同时传导。换句话说,单模和多模实际上表示相位一致的角度有一个还是多个
- 多模光纤中可以传导多条光线,这意味着能通过的光线较多,对光源和光敏元件的性能要求也就较低,从而可以降低光源和光敏元件的价格。相对地,单模光纤的纤芯中只能传导一条光线,能通过的光线较少,相应地对于光源和光敏元件的性能要求就较高,但信号的失真会比较小。
- 信号失真与光在纤芯传导时反射的次数相关。多模光纤中,多条反射角不同的光线同时传导,其中反射角越大的光线反射次数越多,走过的距离也就越长;相对地,反射角越小的光线走过的距离越短。光通过的距离会影响其到达接收端的时间,也就是说,通过的距离越长,到达接收端的时间越长。结果,多条光线到达的时间不同,信号的宽度就会被拉伸,这就造成了失真。因此,光纤越长,失真越大,当超过允许范围时,通信就会出错(图 4.15)。相对地,单模光纤则不会出现这样的问题。因为在纤芯传导的光线只有一条,不会因为行进距离的差异产生.时间差,所以即便光纤很长,也不会产生严重的失真。光纤的最大长度也是由上述性质决定的。单模光纤的失真小,可以比多模光纤更长,因此多模光纤主要用于一座建筑物里面的连接,单模光纤则用于距离较远的建筑物之间的连接。FTTH 属于后者,因此主要使用单模光纤。
- FTTH ,从形态上可大致分为两种.一种是用一根光纤直接从用户端连接到最近的电话局(图 4.16(a))。这种类型的 FTTH 中,用户和电话局之间通过光纤直接连接,网络包的传输方式如下。首先,用户端的光纤收发器(将以太网的电信号转换成光信号的设备,也叫“终端盒”) 将以太网的电信号转换成光信号。这一步只进行电信号到光信号的转换,而不会像 ADSL 一样还需要将包拆分成信元,大家可以认为是将以太网包原原本本地转换成了光信号。接下来,光信号通过连接到光纤收发器的光纤直接到达BAS 前面的多路光纤收发器。FTTH 一般使用单模光纤,因此其纤芯中只有特定角度的光信号能够反射并前进。然后,多路光纤收发器将光信号转换成电信号,BAS 的端口接收之后,将包转发到互联网内部。把网络包发送到互联网之后,服务器会收到响应,响应包的光信号也是沿着同一条光纤传输到用户端的。这里,前往互联网的上行光信号和前往用户的下行光信号在光纤中混合在一起,信号会变得无法识别,因此我们需要对它们进行区分,办法是上行和下行信号采用不同波长的光。波长不同的光混合后可通过棱镜原理进行分离,因此光纤中的上行和下行信号即便混合起来也可以识别。像这样在一条光纤中使用不同的波长传输多个光信号的方式叫作波分复用.另一种光纤的接入方式是在用户附近的电线杆上安装一个名为分光器的设备,通过这个设备让光纤分路,同时连接多个用户 (图 4.16(b))。在这种方式下,用户端不使用光纤收发器,而是使用一个叫作ONU 的设备,它将以太网的电信号转换成光信号之后,会到达 BAS 前面的一个叫作 OLT 的设备。光信号的传导方式和刚才介绍的直连方式是一样的,但有一点不同,因为多个用户同时收发网络包时信号会在分光器产生碰撞。因此, OLT 和 ONU 中具备通过调整信号收发时机来避免碰撞的功能。具体来说, OLT 会调整信号发送时机并向 ONU 下发指令,ONU 则根据 OLT 的指令来发送数据。反过来,当 BAS 端向用户发送数据时,分光器只需要将信号发给所有用户就可以了,这里并不会发生碰撞,但这样做会导致一个用户收到其他所有用户的信号,造成信息泄露的问题,因此需要在每个包前面加上用于识别 ONU 的信息,当ONU 收到信号后,会接收发给自己的信号并将其转换成以太网信号(通过光纤分路连接多个用户的光纤接入模式统称为 PON(Passive Optical Network,无源光网络),可分为 GE-PON、WDM-PON、B-PON、G-PON 等多种方式,现在大多使用最高速率为 1 Gbit/s 的 GE-PON 方式。ONU:Optical Network Unit,光网络单元。它和光纤收发器一样,可以将电信号转换成光信号,除此之外还具有和电话局的 OLT 相互配合避免信号碰撞的功能。这个设备有时也被叫作终端盒,因此终端盒这个词本身是对光纤收发器和 ONU 等光纤终端设备的统称。)
3. 数据链路层
3.1. 数据链路层概念
![44.PNG](https://290ff162.telegraph-image-eg9.pages.dev/file/c97b0b9b567e71323152a.png)
- 研究在同一个局域网中,分组怎样从一个主机传送到另一个主机(不经过路由器)
- 链路(link):从一个站点到相邻节点的一段物理线路(有线或者无线),而中间没有任何其他的交换结点。
- 数据链路(data link):物理线路和实现通信协议的硬件或者软件构成了数据链路
- 网络适配器:既有硬件,也有软件实现了数据链路协议,包括了数据链路层和物理层两个功能
- 帧:数据链路层的协议数据单元,数据链路层的数据的基本单位,物理层只传输比特流、不管"帧"
- 数据链路层使用的信道类型:
- 点对点信道:使用一对一的点对点通信方式
- 广播信道:使用一对多的广播通信方式
- 数据链路层把网络层交下来的IP数据报构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层
- 数据链路层协议的三个问题
- 封装成帧(framing):在网络层的IP数据报的前后分别添加首部和尾部,这样就构成了帧,接收端在收到物理层上交比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。一个帧的长度等于数据部分加上帧首部和帧尾部的长度。然后交给物理层传输
- 最大传送单元(MTU Maximum Transfer Unit):帧的数据部分长度上限;为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。过小:次数太多,会影响传输的效率,数据帧过大:时延太大。MTU一般为1500字节
- 帧定界:帧首部控制字符SOH(Start Of Header)放在帧的最前面表示帧开始,帧尾部控制字符EOT(End Of Transmission)表示帧的结束,接收方收到帧不完整时(只有开始无结束)必须丢弃
- 注意:当数据是由可打印的ASCII码组成的文本文件时,SOH二进制编码为00000001。EOT二进制编码为00000100
- 透明传输:无论什么样的比特组合的数据都能够通过这个数据链路层
- 本质:使数据中出现的控制字符"SOH"和"EOT"在接收端不被解释为控制字符
- 当传送的帧是文本文件(键盘上输入)组成的帧时不可能出现帧定界控制符,而二进制的计算机程序或图像可能
- 字节填充(byte stuffing)/字符填充(character stuffing):发送端的数据链路层在数据中出现控制字符“EOT”或”SOH“时没在其前面插入一个转义字符”ESC“(00011011),而在接收端的数据链路层再把数据送往网络层之前删除这个转义字符,如果转义字符也出现在数据中那么在转义字符前面再插入一个转义字符,当接收到两个转义字符的时候把前面的那个删除掉就行
- 差错检测:比特在传输过程中产生的错误(收到干扰产生)
- 传输差错:比特差错、帧丢失、帧重复、帧失序
- 比特差错:1可能变成0,0可能变成1
- 误码率BER(Bit Error Rate):在一段时间内,传输错误的比特所占的比特总数,信噪比越高,误码率越小
- 比特差错检测办法:循环冗余检验CRC,为进行检错添加冗余码称为帧检验序列FCS
- 在数据链路层使用CRC循环冗余检验(Cyclic Redundancy Check),能够实现的是无比特差错传输,而不是可靠传输(没有重传)
- 数据链路层只进行数据的检测,不进行纠正(错误直接丢弃)
- 封装成帧(framing):在网络层的IP数据报的前后分别添加首部和尾部,这样就构成了帧,接收端在收到物理层上交比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。一个帧的长度等于数据部分加上帧首部和帧尾部的长度。然后交给物理层传输
3.2. 广域网使用点对点信道的数据链路层
- 通信的主要步骤
- 结点A的数据链路层把网络层交下来的ip数据报添加首部和尾部封装成帧
- 结点A把封装好的帧发送给结点B的数据链路层
- 若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出ip数据报上交给上面的网络层;否则丢弃这个帧
- 点对点协议PPP(Point-to-Point Protocol)
- PPP协议组成
- 用户计算机和ISP进行通信时的数据链路层协议
- 一个将ip协议封装到串行链路的方法:PPP既支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路,ip数据报在PPP帧中就是信息部分,其的长度受最大传送单元的MTU限制
- 一个用来建立、配置和测试的数据链路连接的链路控制协议LCP(Link Control Protocol),通信的双方可以协商一些选项
- 一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议
- PPP协议的帧格式
- ppp帧首部
- 标志字段F(Flag):规定为0x7E(01111110),表示一个帧的开始,帧定界符
- 地址字段A:规定为0xFF(11111111)
- 控制字段C:规定为0x03(00000011)
- 协议字段:2字节,为0x0021时,PPP帧的信息字段就是IP数据报。0xC021时,PPP链路控制协议LCP;0x8021时,网络层的控制数据。
- 信息字段的长度是可变的,不超过1500字节
- PPP帧尾部
- 尾部中的第一字段(2字节)是使用CRC的帧检验序列FCS
- 标志字段F,规定为0x7E(01111110),表示一个帧的结束。
- ppp帧首部
- PPP协议透明传输实现方式
- 当PPP使用异步传输(逐个字符地传送)时,把转义符定义为0x7D(01111101),此时使用字节填充实现透明传输,转义算法为当 0x7d 出现在数据中时,紧接着的字符的第 6 个比特要取其补码,即与 0x20 做异或运算。RFC1662规定:
- 0x7E字节转成2字节序列(0x7D,0x5E)
- 0x7D字节(出现了和转义字符一样的比特组合)转变成2字节序列(0x7D,0x5D)
- ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面需要加入0x7D字节,同时将该字符的编码加以改变。例如出现0x03(在控制字符中是“传输结束”EXT)就要把它转变为2字节序列(0x7D,0x23)
- 当PPP协议在SONET/SDH链路使用同步传输(一连串的比特连续传送),采用零比特传输实现透明传输
- 在发送端,扫描整个信息字段,只要发现有5个连续的1,则立即填入一个0(硬件实现),接收端收到5个连续1时,把后面的0删除还原成原来的信息比特流
- 当PPP使用异步传输(逐个字符地传送)时,把转义符定义为0x7D(01111101),此时使用字节填充实现透明传输,转义算法为当 0x7d 出现在数据中时,紧接着的字符的第 6 个比特要取其补码,即与 0x20 做异或运算。RFC1662规定:
- PPP协议工作过程
- 当用户拨号接入ISP后,就建立了一条从用户PC到ISP的物理连接。用户PC向ISP发送一系列的链路控制协议LCP分组,以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数,然后进行网络层配置,网络控制协议NCP给新接入的用户PC分配一个临时的IP地址,DNS服务器地址以及默认网关的IP地址。这样PC用户就称为因特网上的一个有IP地址的主机了.当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。LCP释放数据链路层连接。最后释放的是物理层的连接。
- PPP链路的起始和终止状态永远是链路静止(Link Dead)状态,这时在用户PC和ISP的路由器之间并不存在物理层的连接
- 当用户PC通过调制调节器呼叫路由器(点击拨号)时,用户名和密码通过 RADIUS(远程用户拨号认证系统,包括pap和chap) 协议从 RAS 发送到认证服务器,路由器就能够检测到调制调解器发出的载波信号。在双方建立物理层连接后,PPP进入"链路建立"状态(Link Establish)。
- LCP开始协商一些配置选项,即发送LCP的配置请求帧(Configure-Request)(PPP帧,协议字段为LCP对应代码),包括链路上的最大帧长,所使用的的鉴别协议(authentication protocol)的规约(如果有的话),以及不适使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以忽略)
- 链路的另一端可以发送一下几种响应中的一种
- 配置确认帧(Configure-Ack):所有选项都接受
- 配置否认帧(Configure-Nak):所有选项都理解但不接受
- 配置拒绝帧(Configure-Reject):选项里面有的无法识别或不能接受,需要协商
- 协商结束后双方建立了LCP链路,接着进入"鉴别"(Authenticate)状态,只允许传送LCP协议的分组,鉴别协议的分组以及监测链路质量的分组。
- 若使用口令兼备协议PAP,则需要发起通信的一方发送身份标识符和口令,系统可允许用户重试若干次
- 如果需要有更好的安全性。则可使用握手鉴别协议CHAP。
- 若身份鉴别失败。则转到链路终止状态。若鉴别成功,则进入网络层协议状态(Network layer)(PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组)PPP协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信
- (了解)如果在PPP链路上运行的是IP协议,则对PPP链路的每一段配置IP协议模块(如分配IP地址)时就要使用NCP中支持IP的协议-IP控制协议IPCP。IPCP分组也封装成PPP帧(协议字段为0x8021)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数
- 网络层配置完毕后,链路进入可进行数据通信的"链路打开"状态。链路的两个PPP断点可以彼此向对方发送分组。两个PPP端点还可发送会送请求LCP分组和回送回答LCP分组,以检查链路的状态
- 数据传输结束后可以有链路的一段发出终止请求LCP分组)(Terminate-Request)请求终止链路连接,在收到对方发来的终止确认LCP分组(Terminate-Ack)后,转到LCP链路终止状态,如果链路出现故障,也会从链路打开状态转到链路终止状态,当调制调解器的载波停止后,回到链路静止状态
- PPPoE 是将 PPP 消息装入以太网包进行传输的方式
- 通过隧道将网络包发送给运营商.隧道有几种实现方式.TCP 连接就是其中一种实现方式(图 4.19(a))。这种方式中,首先需要在网络上的两台隧道路由器 之间建立 TCP 连接,然后将连接两端的套接字当作是路由器的端口,并从这个端口来收发数据。换句话说,在路由器收发包时,是基于隧道的规则向隧道中放入或取出网络包,这时,TCP 连接就好像变成了一根网线,包从这里穿过到达另一端.基于封装(encapsulation)的隧道实现方式,这种方式是将包含头部在内的整个包装入另一个包中传输到隧道的另一端。在这种方式中,包本身可以原封不动地到达另一端的出口
- 互联网接入路由器在转发包时需要进行地址转换
- PPP协议组成
3.3. 局域网
- 局域网最主要的特点:就是网络为一个单位所拥有,且地理范围和站点数目均有限。
- 局域网的主要优点
- 具有广播功能,从一个站点可方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活地调整和改变
- 提高系统的可靠性(reliability)、可用性(availibility)、生存性(survivability)
- 局域网可按网络拓扑进行分类
- 星形网:由于集线器(hub)的出现和双绞线大量用于局域网中,星形以太网和多级星形结构的以太网获得了非常广泛的应用
- 环形网: 最典型的就是令牌环形网(token ring),简称为令牌环。
- 总线网:各站直接连在总线上。总线两端的匹配电阻吸收在总线上传播的电磁波信号的能量,避免在总线上产生有害的电磁波反射
- 共享信道的方法
- 静态划分信道(代价高,不适合于局域网使用)用户只要分配到了信道就不会和其他用户发送冲突。如频分复用
- 动态媒体接入控制/多点接入(multiple access) (信道并非在用户通信时固定分配给用户)
- 随机接入:所有用户可随机地发送信息。但如果恰巧有两个或更多的用户在同一时刻发送信息,那么在共享媒体上就要发生碰撞(发生了冲突),使得这些用户的发送都失败。因此必须有解决碰撞的网络协议
- 受控接入:用户不能随机地发送信息而必须服从一定的控制。分为分散控制的令牌环局域网和集中控制的多点线路探询(polling)/轮询。
- 通信适配器的作用(网络接口卡NIC(Network Interface Card)或网卡,装有处理器和存储器RAM和ROM,)
- 插入主板时,需要把管理该适配的器的设备驱动程序安装在计算机操作系统中。这个驱动程序以后就会告诉适配器,应当从存储器什么位置上把多长的数据块发送到局域网,或者应当在存储器的什么位置上把局域网传送过来的数据块存储下来
- 进行数据串行传输和并行传输的转换:适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。
- 由于网络上的数据率和计算机总线上的数据率并不相同,所以在适配器中必须装有对数据进行缓存的存储芯片
- 实现以太网协议。适配器包含了数据链路层和物理层两层次的功能
- 适配器接收和发送各种帧时不使用计算机的CPU。这时CPU可以处理其他任务。当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。
- 计算机的硬件地址——MAC地址,就在适配器的ROM中,生产时已经写入。计算机的软件地址——IP地址,就在计算机的存储器中
- 网卡并不是通上电之后就可以马上开始工作的,而是和其他硬件一样,都需要进行初始化。也就是说,打开计算机启动操作系统的时候,网卡驱动程序会对硬件进行初始化操作,然后硬件才进入可以使用的状态。这些操作包括硬件错误检查、初始设置等步骤,这些步骤对于很多其他硬件也是共通的,但也有一些操作是以太网特有的,那就是在控制以太网收发操作的 MAC 模块中设置 MAC 地址。读取 MAC 地址的操作是由网卡驱动程序来完成的,因此网卡驱动程序也可以不从网卡 ROM 中读取地址,而是将配置文件中设定的 MAC 地址拿出来放到内存中并用于设定 MAC 头部,或者也可以通过命令输入 MAC 地址。网卡中保存的 MAC 地址会由网卡驱动程序读取并分配给MAC模块。
3.4. 局域网使用广播信道的数据链路层
- 使用原因:同一时间只允许一台计算机发送数据,否则各计算机会相互干扰,发送数据被破坏。随着交换式集线器(交换机)普及,信号已经不会发生碰撞了)
- 为了通信方便,以太网采取了以下两种措施
- 采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据,适配器对发送的数据帧不进行编号,也不要求对方发回确认。以太网提供的服务是尽最大努力的交付,即不可靠的交付;当目的站收到由差错的数据帧时就丢弃。对有差错帧是否需要重传则由高层来决定,以太网并不知道重传帧,而是当做新的数据帧来发送;总线上只要有一台计算机在发送数据,总线的传输资源就会被占用,在同一时间只能允许一台计算机发送数据;否则各计算机之间就会互相干扰,使得所发送数据被破坏,以太网使用最简单的随机接入,解决冲突的协议是:CSMA/CD,载波监听多点接入/碰撞检测(Carrier Sense Multiple Access with Conllsion Detection)
- 以太网发送的数据都是使用曼彻斯特编码的信号。二进制基带数字信号通常就是高,低电压交替出现的信号;这种信号最大的问题就是当出现一长串连1或0时,接收端无法从接收到的比特流中提取位同步(比特同步)信号;而曼彻斯特编码方法是把每一个码元分成两个相等的间隔,码元1是在前一个间隔为低电压,而后一个间隔为高电压,码元0刚好相反(1是“前高后低”,而0是“前第后高”),曼彻斯特编码的缺点是,它所占的频带宽度比原始的基带信号增加了一倍(因为每秒传送的码元加倍了)
- CSMA/CD协议的要点:
- “多点接入”:总线型网络,许多计算机以多点接入的方式连接在一根总线上。
- “载波监听”:每个站必须不停地用电子技术检测信道。发送前检测为了获得发送权,发送中检测为了发现有没有其他站的发送和本站发送的碰撞
- “碰撞检测”:边发送边监听;当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(相互叠加),当适配器检测到的信号电压变化幅度超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞;这时,总线上传输的信号产生严重的失真,无法从中恢复出有用的信息,此时其适配器就要立即停止发送,经过一段随机时间再发
- 虽然每一个站在发送数据之前已经监听到信道为"空闲",但电磁波在总线上总是以有限的速率传播,导致数据还会在总线上碰撞
- 总线上的单程端到端传播时延记为τ,发送数据后最迟要经过2τ(两倍的总线端到端的往返传播时延)才能知道自己发送的数据和其他站发送的数据有碰撞,因此,以太网端到端往返时间2r称为争用期contention period(碰撞窗口collision window);经过争用期还没有检测到碰撞,才能肯定这次发送不会发送碰撞;
- 在使用CSMA/CD协议时,一个站不可能同时进行发送和接收(但必须边发送边监听)。只能进行半双工通信
- 以太网采用截断二进制指数退避算法(truncated binary exponential backoff)来确定碰撞后重传的时机,避免空闲后各站重传时发生冲突的概率减小;基本退避时间为争用期2τ,具体的争用期时间51.2μs,也称为512比特时间,1比特时间为发送1比特所需时间。从离散的整数集合[0,1..(2^k-1)]中随机取出一个数,记为r。重传应推后的时间就是r倍的争用期,即r*2τ;K为碰撞次数时。K=Min[重传次数,10],当重传达16次仍不能成功时,则丢弃该帧,并向高层报告
- 适配器每发送一个新的帧,就要执行一次CSMA/CD算法,适配器对过去发送过的碰撞没有记忆功能;
- 为了避免在发送完毕之前没有检测出碰撞:以太网规定一个最短帧长64字节,即512bit,通过填充使帧长不小于64字节;凡是长度小于64字节的帧都是由于冲突而异常中止的无效帧,只要收到了这种无效帧,就应当立即将其丢弃;
- 强化碰撞:当发送数据的站发现碰撞时,除了立即停止发送数据外,还要再发送32或48比特的人为干扰信号(jamming signal),以便让所有用户都知道发生碰撞
- 以太网规定帧间最小间隔为9.6μs,相当于96比特时间,为了使刚刚接收到数据帧的站的接收缓存来得及清理
- CSMA/CD协议的要点归纳:
- 1.准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中,但在发送之前,必须先检测信道;
- 2.检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲,就发送这个帧;
- 3.在发送过程中仍不停地检测信道,即网络适配器要边发送边监听,这里只有两种可能性:
- 一是发送成功:在争用期内一直没有检测到碰撞,这个帧肯定能够发送成功;回到1
- 二是发送失败:在争用期内检测到碰撞,这是立即停止发送数据,并按照规定发送人为干扰信号;适配器接着就执行指数退避算法,等待r倍512比特时间后,返回步骤2,继续检测信道;但若重传16次还不能成功,则停止重传而向上报错;
- 以太网每发送完一帧同时已发送的帧暂时保留一下。如果在争用期内检测发生了碰撞,那么还要推迟一段时间后再把这个暂时保留的帧重传1次
- 集线器/中继式集线器:星型拓补的中心可靠性很高的设备(半双工,交换机全双工)
- 使用集线器的以太网在逻辑上仍然是一个总线网,各站共享逻辑上的总线,使用的依然是CSMA/CD协议
- 一个集线器上有许多接口。每个接口通过RJ-45插头与主机相连。很像多接口的转发器
- 集线器工作在物理层,接口的作用就是简单的转发比特,不进行碰撞检测,碰撞检测是主机的网卡进行的。
- 集线器采用专门的芯片进行自适应串音回波抵消
- 集线器连接的多个主机构成子网,多个集线器再与路由器连接构成大的网络
- 家用路由器可以包含集线器功能
- 集线器会将信号发往所有线路,如果同时输入多个信号就会发生碰撞,无法同时传输多路信号
3.5. 以太网的MAC层(媒体接入控制MAC层)
- 在局域网中,硬件地址又称为物理地址或者MAC地址,实际上是适配器地址或适配器标识符或接口标识符。
- IEEE 802标准规定了一种48位的全球地址,固化在网卡(适配器)的ROM中的地址。更换适配器就更换了mac地址,6字节,与地理位置无关。一个网卡一个MAC地址。使用十六进制表示 ipconfig /all
- 网卡具有过滤功能,当它收到一个MAC帧就开始用硬件检查MAC帧中的目的地址,如果是发往本站的就收下,不是就丢弃,不做其他处理。包括
- 单播(unicast)帧(一对一)。即收到的帧的MAC地址与本站的硬件地址相同
- 广播(broadcast)帧(一对全体)。即发送给本局域网上所有站点的帧(全1地址)
- 多播(multicast)帧(一对多)。即发送给本局域网上一部分站点的帧
- 网卡至少能识别单播和广播帧,网卡还有一个混杂方式工作模式,只要发现有帧在以太网上传播就会接收下来。可作为窃听方式和网络维护和管理人员改善网络的一种工具
- 只有在操作系统启动过程中对网卡进行初始化的时候才会读取 MAC 地址,读取出来之后会存放在内存中,每次执行收发操作时实际上使用的是内存中的值。此外,读取 MAC 地址的操作是由网卡驱动程序来完成的,因此网卡驱动程序也可以不从网卡 ROM 中读取地址,而是将配置文件中设定的 MAC 地址拿出来放到内存中并用于设定 MAC 头部,或者也可以通过命令输入 MAC 地址
- MAC帧的格式
- 前同步码:7个字节(1和0交替)用来使接收端的适配器在接收MAC帧时能够迅速调整时钟频率,使它和发送端的频率相同。在使用SONET/SDH进行同步传输时则不需要前同步码,因为同步传输时收发双方的位同步总是一直保持着
- 帧开始定界符:1个字节(10101011)
- MAC目的地址:6个字节,网卡只处理与当前适配器的物理地址相同的数据帧,不同则直接丢弃。
- 源MAC地址:6个字节
- 类型:用来标志上一层使用的是什么协议,决定把数据交付给上层的协议,该字段为0x0800时交付给IP协议,为0x0806交付给ARP,0X8035交付给RARP。0x86DD交付给IPv6
- 数据/有效载荷:46(最小长度64字节减去18字节首部,不够则在数据后面加入整数字节填充字段)-1500字节(MTU)
- 帧检验序列FCS(使用CRC循环冗余校验法):4个字节,检测该帧是否出现差错。不包括前同步码和帧开始定界符
- MAC帧中没有帧长度字段:因为曼彻斯特编码的每一个码元(不管码元是1或0)的正中间一定有一次电压的转换(从高到低或从低到高)。当发送方吧一个以太网帧发送完毕后,就不再发送其他码元了(1,0都不发送)。因此,发送方网络适配器的接口上的电压就不再变化了,这样接收方就可以很容易地找到以太网帧的结束位置。在这个位置往前数4个字节(FCS字段长度4字节)就能确定数据字段结束的位置了
- 当帧长度小于46字节时,mac就会在数据字段的后面加入一个整数字节的填充字段,保证不小于46字节,上层协议必须定义了数据长度保证知道数据长度,用以去掉填充字段
- 以太网上传送数据以帧为单位传送,各帧直接必须有间隙,因此接收端只要找到帧开始界定符,其后面到达的比特流就都属于同一个MAC帧,可见以太网不需要使用帧结束界定符,也不需要使用字节插入保证透明传输
- 无效的MAC帧
- 帧的长度不是整数个字节
- 用收到的帧检验序列FCS查出有差错。
- 帧长度数据字段不在46-1500之间。有效的MAC帧长度为64-1518字节之间(首部占18字节)
- MAC帧在不同网络上传送时,其mac帧首部中的源地址和目的地址要发生变化
3.6. 以太网的扩展(从网络层看来还是一个网络)
- 在物理层扩展以太网:扩展主机和集线器之间距离要使用一对光纤和一对光纤调制调解器(作用是进行电信号和光信号的转换)
- 在数据链路层扩展以太网(使用网桥)
- 网桥工作在数据链路层,它根据MAC帧的目的地址对收到的帧进行转发或过滤。网桥在转发帧时,不改变帧的源地址
- 当网桥收到一个帧时,先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口,或者是把它丢弃
- 网桥的内部结构
- 网桥有多个接口。以太网通过网桥连接起来后,就成为一个覆盖范围更大的以太网,而原来的每个以太网就可以称为一个网段(segment)
- 网桥通过转发表来转发帧。转发表也称为转发数据库或路由目录。每一项包括地址和接口
- 网桥的优点
- 过滤通信量,增大吞吐量,网桥工作在数据链路层的MAC子层,可以使以太网各网段成为隔离区的碰撞域。
- 扩大了物理范围,因而也增加了整个以太网上工作站的最大数目。
- 提高了可靠性,当网络出现了故障时,一般只影响个别网段。
- 可互连不同物理层、不同MAC子层和不同速率(如10Mb/s或100Mb/s)的以太网
- 网桥的缺点
- 增加了时延;由于网桥对接收的帧要先存储和查找转发表,然后才转发,而转发之前,还必须执行CSMA/CD算法(发生碰撞时要退避)
- 在MAC子层并没有流量控制功能。当网络上的负荷很重时,网桥中的缓存的存储空间可能不够而发生溢出,以致产生帧丢失的现象。
- 只适用于用户数不太多(不超过几百个)和通信量不太大的以太网,否则有时还会因传播过多的广播信息而产生网络拥塞(广播风暴)
- 透明网桥的工作原理
- 先按照自学习算法处理收到的帧,并且按照转发表转发出去,
- 记录所有接收到接口的帧的源地址记录为接口对应的地址的key、value格式,同时记录进入网桥的时间,过期就删除该地址记录
- 源路由网桥:由发送帧的源站负责路由选择的网桥,在发送帧时,把详细的路由信息放在帧的首部中
- 为了发现合适的路由,源站以广播的方式向欲通信的目的站发送一个发现帧为探测之用,发现帧将在整个以太网沿着所有可能的路由传送。在传送过程中,每个发现帧都记录所经过的路由。当这些发现帧到达目的站时,就沿着各自的路由返回源站。源站得知这些路由后,从所有可能的路由中选择出一个最佳路由。以后,凡从这个源站向该目的地发送的帧的首部,都必须携带源站所确定的这一路由信息。
- 发现帧还能帮助源站确定整个网络可以通过的帧的最大长度。
- 源路由网桥对主机不透明,主机必须知道网桥的表示以及连接到哪一个网段上,使用源路由网桥可以利用最佳路由,若在两个以太网之间使用并联的源路由网桥,则可使通信量较平均地分配给每个网桥,用透明网桥则只能使用生成树,而生成树一般并不能保证所使用的的路由是最佳的,也不能在不同的链路中负载均衡。
- 多接口网桥:以太网交换机(实质上就是有一个多接口的网桥)工作在数据链路层,每个接口都直接与一个单个主机或另一个集线器相连(普通网桥的接口往往连接到以太网的一个网段),并且一般都工作在全双工方式。当主机需要通信时,交换机能同时连通许多对的接口,使每一对互相通信的主机都能像独占传输媒体那个样,无碰撞地传输数据。也是一种即插即用设备,内部转发表也是通过自学习算法逐渐建立起来。不存在碰撞问题,因为交换机端口和网卡的PHY(MAU)模块以及MAC模块,其内部发送的和接收的电路是各自独立的,信号不会发生碰撞,只要不使用集线器,就可以避免信号碰撞了,根据MAC地址判断转发目标
- 交换机内部有一张MAC地址与网线端口的对应表。当收到包时,会将相应的端口号和发送方的MAC地址写入表中,这样就可以根据地址判断出该设备连接在哪个端口上了。交换机就是根据这些信息判断应该把包转发到哪里的
- 交换机端口的 MAC 模块不具有 MAC 地址。交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。
- MAC 地址表的维护:第一种是收到包时,将发送方 MAC 地址以及其输入端口的号码写入 MAC 地址表中。由于收到包的那个端口就连接着发送这个包的设备,所以只要将这个包的发送方 MAC 地址写入地址表,以后当收到发往这个地址的包时,交换机就可以将它转发到正确的端口了。交换机每次收到包时都会执行这个操作,另一种是删除地址表中某条记录的操作,这是为了防止设备移动时产生问题。地址表中的记录不能永久有效,而是要在一段时间不使用后就自动删除。
- 当交换机发现一个包要发回到原端口时,就会直接丢弃这个包。
- 是地址表中找不到指定的 MAC 地址。这可能是因为具有该地址的设备还没有向交换机发送过包,或者这个设备一段时间没有工作导致地址被从地址表中删除了。这种情况下,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。这样做不会产生什么问题,因为以太网的设计本来就是将包发送到整个网络的,然后只有相应的接收者才接收包,而其他设备则会忽略这个包。
- 如果接收方 MAC 地址是一个广播地址 ,那么交换机会将包发送到除源端口之外的所有端口
4. 网络层
4.1. IP体系的网络层提供的服务和虚拟互连网络
- 研究分组怎么从一个网络通过路由器转发到另外一个网络
- TCP/IP体系的网络层向上只提供简单灵活的、无连接的,尽量大努力交付的数据报服务。网络发送分组时不需要先建立连接。每一个分组(IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。所发送的分组可能出错,丢失,重复和失序,也不保证分组交付的时限。
- 互联网是可以由多种异构网络互连组成。参加互连的计算机网络都使用相同的网际协议IP,因此可以把互连以后的计算机网络看成一个虚拟互联网络,物理设备通过使用IP协议,屏蔽了物理网络之间的差异,将网络互相连接起来要使用一些中间设备
- 物理层使用的中间设备叫做转发器(同一个网络)
- 数据链路层使用的中间设备叫做网桥或桥接器(同一个网络)
- 网络层使用的中间设备叫做路由器(连接不同网络)
- 网络层以上使用的中间设备叫做网关。用网关连接两个不兼容的系统需要在高层进行协议的转换(连接不同网络)
- 路由器根据目标地址判断下一个路由器的位置(IP协议根据目标地址判断下一个IP转发设备的位置)
- 集线器再子网中将网络包传输到下一个路由(子网中的以太网协议将包传输到下一个转发设备)
4.2. IP地址及其编址方法三个阶段
- ip地址:因特网上的每个主机(或路由器)的每一个接口分配一个在全球唯一的32位标识符。由因特网名字和数字分配机构ICANN进行分配;ip地址不仅仅指明了主机,而且指明了主机所连接的网络(在整个因特网内唯一)
- ip地址的特点:
- 每一个IP地址都由网络号(因特网范围内唯一)和主机号(网络号所指明的网络范围内唯一)两部分组成。是一种分等级的地址结构,IP地址管理机构在分配IP地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了IP地址的管理。路由器仅根据目的主机所连接的网络号来转发分组,使路由表中的项目数大幅度减少,从而减少了路由表所占的存储空间及查找的时间
- IP地址是标志主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址
- 一个网络是指具有相同网络号的主机的集合。用转发器或网桥连接起来的若干个局域网具有同样的网络号.具有不同网络号的局域网必须使用路由器进行互连
- 物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的逻辑地址(ip地址由软件实现)
- ip地址放在ip数据报的首部,而硬件地址则放在mac帧的首部。在网络层以上使用的是ip地址,而数据链路层及以下使用的是硬件地址
- ip地址的编址方法共经历三个历史阶段:
- 分类的ip地址:由网络号和主机号组成,A、B、C类地址都是单播地址(一对一通信),一种分等级的地址结构
- A类地址:单播地址(2^31个地址)
- 网络号1个字节,(类别位)第一位为0,网络号数2^7-2。127作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。全0保留地址,表示本网络
- 主机号3个字节,主机数2^24-2。全0表示“本主机”所连接到的单个网络地址,而全1表示该网络上的所有主机(广播地址)
- B类地址:单播地址(2^30个地址)
- 网络号2个字节,前两位为10,网络号数2^14-1。128.0.0.0不指派
- 主机号2个字节,最大主机数是2^16-2(减去全0和全1的主机号)。
- C类地址:单播地址(2^29个地址)
- 网络号3个字节,前三位为110,网络号数(2^21-1)。192.0.0.0不指派
- 主机号1个字节,最大主机数是2^8-2。(减去全0和全1的主机号)。
- D类地址:多播地址:网络号栈4个字节,前四位为1110
- E类地址:前4位1111,保留以后用
- A类地址:单播地址(2^31个地址)
- 划分子网
- 两级IP地址弊端:IP地址空间的利用率有时很低、不灵活,不能随时灵活增加某单位网络,给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 划分子网:IP地址中增加了一个“子网号字段”。使两级IP地址变成三级IP地址。
- 物理网络划分为若干个子网后对外仍然表现为一个没有划分子网的网络。
- 网络的主机号减少了若干位作为子网号。 IP地址={<网络号>,<子网号>,<主机号>}
- 凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。本单位网络上的路由器接收了数据报之后,按照目的网络号和子网号找到目的网络的子网,将IP数据报交付给目的主机。
- 子网掩码
- 子网掩码,32位,一般是由全1和全0组成,全1部分包括了网络号和子网号,全0部分包括了主机号。子网掩码和IP地址的二进制数字逐位相“与”(全1得1,其他为0)。就可以得到子网网络地址。A类地址255.0.0.0、B类地址255.255.0.0、c类地址255.255.255.0,子网掩码为了更便于查找路由表,区分ip地址种类
- 主机号部分全为0代表整个子网,全1代表向子网上所有设备发送包(广播)
- 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码
- 使用子网分组的转发
- 使用子网划分后,路由表必须包含目的网络地址,子网掩码和下一跳地址。路由器转发分组的算法(流程)如下:
- 1)从收到的数据报首部提取目的IP地址D
- 2)先判断是否为直接交付。对路由器直接相连的网络进行逐个检查:用各网络的子网掩码和D逐位相与,看结果是否和相对应的目的网络地址匹配。若匹配,则把分组进行直接交付,转发任务结束。否则就是间接交付,执行(3)。
- 3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由:否则执行(4)。
- 4)对路由表的每一行,用其中的子网掩码和D逐位相与,其结果为N与该行的目的网络地址匹配,则把数据报传送给下一跳路由器;否则执行(5)。
- 5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行(6)。
- 6)报告转发分组出错。
- 使用子网划分后,路由表必须包含目的网络地址,子网掩码和下一跳地址。路由器转发分组的算法(流程)如下:
- 无分类域间路由选择CIDR(Classless Inter-Domain Routing)构成超网(IPV4地址耗尽)
- 32位的IP地址分为网络前缀和主机好两部分:CIDR使用CIDR计法, 在ip地址后面加上/ 写上网络前缀的位数
- CIDR把网络前缀相同的连续ip地址组成一个CIDR地址块/超网.只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(主机全0)和最大地址(主机全1),以及地址块中的地址数。由于一个CIDR地址中有很多地址,所有在路由表中就利用CIDR地址来查找目的网络。这种地址的聚合常称为路由聚合,使得路由表中的一个项目可以表示原来传统分类地址的多个,路由聚合也称为构成超网
- 32位子网掩码:斜线计法中,斜线后面的数字就是地址掩码中1的个数,后面全部是0,
- 前缀最长匹配:在CIDR中路由表中每一个项目包括了网络前缀和下一条的地址.路由选择网络前缀最长的路由.
- 二叉线索查找路由表:在前缀最长匹配算法中,用二叉树的数据结构进行组织提高查找速度,先从IP地址中找出各个IP地址中唯一的前缀, 然后通过唯一的前缀构成二叉树, 其中二叉树的左孩子是对应的值为0, 右孩子值为1
- 分类的ip地址:由网络号和主机号组成,A、B、C类地址都是单播地址(一对一通信),一种分等级的地址结构
4.3. ip数据报(网络层协议数据单元)
![13.png](https://290ff162.telegraph-image-eg9.pages.dev/file/7db126fcc82bce692b2e6.png)
- IP数据报:32位(4字节)。一个IP数据报由固定长度20字节的首部和长度可变数据两部分组成。
- 版本:占4位,IP协议版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为IPv4。
- 首部长度:占4位,表示5-15,单位32位字(4字节),20-60字节。如果IP数据报的数据部分不是4字节的整数倍时,必须利用最后的填充字段加以填充
- 区分服务。占8位,用来获得更好的服务。这个字段原来叫做服务类型,但实际一直没人用。
- 总长度。首部和数据之和的长度,16位,单位字节。最大总长度2^16-1。IP数据报的总长度如果大于数据链路层的MTU(最大传送单元1500字节) 需要进行分片处理。IP协议规定,因特网中所有主机和路由器,必须能够接受长度不超过576字节的数据报。在分片时,数据报首部中的总长度字段是指分片后的每一个分片的首部长度与该分片的数据长度总和
- 标识(identification):占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,标识的计数器就会加1,相同的标识字段值使分片后的各数据报片最后能正确得重装成原来的数据报
- 标志(flag):占3位,但目前只有两位有意义。最低位记为MF(More Fragment)MF=1表示后面“还有分片”的数据报。MF=0表示为最后一位。中间一位记为DF(Don't Flagment)记为不能分片。只有当DF=0时才允许分片。
- 片偏移:占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。以8字节为单位,也就是每个分片的长度一定是8字节的整数倍。标识=字节序号除以8。
- 生存时间TTL:占8位,单位跳数,0-255,数据报在因特网中至多可以经过多少个路由器,由发出数据报源点设置这个字段。防止无法交付的数据在网络中兜圈子。每经过一个路由器就减1。当TTL为0时就丢掉这个数据报。
- 协议 占8位。指出此数据报携带的数据是使用哪种协议,以便目的主机IP层知道将数据上交给那个处理过程,TCP
06,UDP17,ICMP01 - 首部检验和 占16位。只检验数据报的首部。数据报每经过一个路由,路由器都要从新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。在发送方,先把IP数据报首部划分为许多16位字的序列,并把校验和字段设置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,将首部的所有16位字再用反码算术运算相加一次。将得到的和取反码,即得出接收方校验和的计算结果,若首部未发生任何变化,结果必为0,否则丢弃数据报
- 源地址 占32位
- 目的地址 占32位
- IP数据报首部的可变部分(很少使用):一个选项字段,用来支持排错、测量以及安全等措施,内容丰富,此字段的长度可变,从1-40字节不等,取决于所选择的项目
- ip层分组转发的流程
- 路由表按主机的网络地址来制作,在路由表中每一条路由最主要的是一下两个信息:目的网络地址,下一跳地址。(可以用route print查看路由表。Interface 列,表示网卡等网络接口,这些网络接口可以将包发送给通信对象,Gateway 列表示下一个路由器的 IP 地址,将包发给这个 IP 地址,该地址对应的路由器 就会将包转发到目标地址。如果 Gateway 和 Interface 列的 IP 地址相同,就表示不需要路由器进行转发,可以直接将包发给接收方的 IP 地址。Metric表示通过这条路由传输包的成本,越小说明距离越近。路由表的第 1 行中,目标地址和子网掩码 都是 0.0.0.0,这表示默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行)。路由表的子网掩码列值表示在匹配网络目标地址时需要对比的比特数量(路由聚合)
- 因特网所有的分组转发都是基于目的主机所在的网络。IP数据报最终可以找到目的主机所在的网络上的路由器(可能要通过多次间接交付)。只有到达最后一个路由器时,才试图向目的主机对数据报的直接交付
- 特定主机路由:对特定的目的主机指明一个路由。有利于对网络的连接或路由表进行排错
- 默认路由(0.0.0.0):减少路由表所占用的空间和搜索路由表所用的时间。找不到匹配路由时选择默认路由。只要将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了
- 待转发的数据报怎么找到下一跳的路由器?
- 当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的IP地址后交送数据链路层的网络接口软件。把下一跳的路由器的IP地址转换成硬件地址(ARP),并放在链路层的MAC帧的首部并根据这个硬件地址找到下一跳路由器。当发送一连串数据报时,上述的这种查找路由表、计算硬件地址、写入MAC帧的首部等过程,将不断重复进行,造成一定开销
- 分组转发算法
- 1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
- 2)若N就是于此路由直接相连的某个网络地址,则进行直接交付,不需要在经过其他的路由器,直接把数据报交付目的主机。
- 3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行(4)
- 4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由;否则,执行5)
- 5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由;否则,执行6)
- 6)报告转发分组出错。
- 路由表按主机的网络地址来制作,在路由表中每一条路由最主要的是一下两个信息:目的网络地址,下一跳地址。(可以用route print查看路由表。Interface 列,表示网卡等网络接口,这些网络接口可以将包发送给通信对象,Gateway 列表示下一个路由器的 IP 地址,将包发给这个 IP 地址,该地址对应的路由器 就会将包转发到目标地址。如果 Gateway 和 Interface 列的 IP 地址相同,就表示不需要路由器进行转发,可以直接将包发给接收方的 IP 地址。Metric表示通过这条路由传输包的成本,越小说明距离越近。路由表的第 1 行中,目标地址和子网掩码 都是 0.0.0.0,这表示默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行)。路由表的子网掩码列值表示在匹配网络目标地址时需要对比的比特数量(路由聚合)
4.4. 地址解析协议ARP(Address Resolution Protocol 同一个局域网,跨网络由路由器完成转发)
- ARP协议就是为了从网络层使用的ip解析出在数据链路层使用的硬件地址。cmd查看命令 arp -a
- ARP协议是在ARP高速缓存中存放从ip地址到硬件地址的映射表,并且这个映射表经常动态更新(新增或者超时删除)
- ARP协议工作原理
- 每个主机都设有一个ARP缓存表,里面有本局域网上各主机和路由器的IP地址到硬件地址的映射表
- 当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查找有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把其硬件地址写入到MAC帧,然后通过局域网把该MAC帧发往此硬件地址
- 如果主机高速缓存中没有则运行ARP,按照以下步骤查找出主机B的硬件地址。
- ARP进程在本局域网广播发送一个ARP请求分组。同时把自己的ip地址到硬件地址的映射写入ARP请求分组。本局域网上所有的主机上运行的ARP进程都收到此ARP请求分组
- 主机B在ARP请求分组中见到自己的IP地址,记录A的地址映射并向A发送ARP响应分组(单播),同时写入自己的硬件地址。
- 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
- 由于其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组
- 委托ARP或ARP代理(ARP Proxy):当发送主机和目的主机不在同一个局域网中时,发送主机通过ARP协议获得的是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。
- ARP缓存表每一项都设置生存时间,凡超过生存时间的项目就从高速缓存中删除掉
- arp -a命令查看ARP缓存内容,arp -d [ip] 删除ARP缓存条目
4.5. 网络控制报文协议 ICMP(Internet Control Message Protocol)(为了更有效地转发ip数据报和提交交付成功的机会)
- ICMP网络控制报文协议:允许主机或路由器报告差错情况和提供有关异常情况的报告,ICMP报文作为IP数据报的数据部分。所有的ICMP差错报文中的数据字段都有同样的格式,把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节(运输层端口号TCP和UDP,发送序号TCP)提取出来,作为ICMP报文的数据字段,再加上相应的ICMP差错报文的前8个字节构成ICMP的差错报告报文。
- ICMP报文种类->检验和字段用来检验整个ICMP报文
- 差错报告报文
- 类型值3:终点不可达,当路由器或主机不能交付数据报时就向源点发送终点不可达报文
- 类型值4:源点抑制,当路由器或主机由于阻塞而丢弃数据报时,就向源点发送源点抑制报文,使源点把数据报的发送速率减慢
- 类型值5:改变路由(Redirect),路由器把改变路由报文发给主机,让主机知道下次应将数据报发送给另外的路由器
- 类型值11:超时,当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据碎片时,就把数据报片都丢弃,并向源点发送超时报文
- 类型值12:参数问题,当路由器或目的主机收到的数据报首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文
- 以下几种情况都不会导致产生ICMP差错报文(防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴)
- ICMP差错报文
- 第一个分片的数据报片的所有后续数据报片
- 具有多播地址的数据报
- 具有特殊地址(127.0.0.0或0.0.0.0)的数据报
- 询问报告报文
- 类型值8或者0:回送(Echo)请求或应答,主机或路由器向特定的目的主机发出的询问。用来测试目的站是否可达以及了解有关状态,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
- 类型值13或14:时间戳(Timestamp)请求或应答。请某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,写入从1900年1月1日到当前时刻共多少秒,用来进行时钟同步和测量时间
- ICMP的应用举例
- PING(Packet InterNet Groper)分组网间探测,用于测试两个主机之间的连通性。ping使用了ICMP回送请求与回送回答报文。 应用层直接使用网络层ICMP的一个例子
- TraceRoute/tracert用来跟踪一个分组从源点到终点的路径。使用了ICMP时间超过差错报告报文
- TraceRoute从源主机向目的主机发送一连串的IP数据包,数据报中封装的是无法交付的UDP用户数据报。第一个P1的生存时间TTL设置为1。当P1达到路径上的第一个路由器R1时,R1先收下它,接着把TTL的值减1。由于TTL的值等于零了,R1就把P1丢弃了,并向源主机发送一个ICMP时间超过差错报告报文。接着发送第二个数据报P2,并把TTL设置为2。P2先到达路由器R1,R1收下,把TTL减1再转发给路由器R2。R2收到P2时TTL为1,但减1后TTL变为零了。R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文......TraceRoute每次将送出的报文的TTL加1来发现另一个路由器,这样一直继续下去,当最后一个数据报刚刚到达目的主机的时候,数据报的TTL是1。主机不转发数据包也不把TTL值减1。目的主机要向主机发送ICMP终点不可达差错报告报文。这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的ICMP报文正好给出了源主机想知道的路由信息——到达目的主机所经过的路由器的IP地址,以及到达其中的每一个路由器的往返时间。
- 差错报告报文
- 因特网的路由选择协议
- 根据算法是否随网络的通信量或拓补自适应地调整变化划分:
- 静态路由选择策略——非自适应路由选择,简单和开销较小,不能及时适应网络状态的变化。小网络
- 动态路由选择策略——自适应路由选择,能较好地适应网络状态的变化,实现起来复杂,开销也比较大。大网络
- 因特网采用的路由选择协议主要是自适应的、分布式路由选择协议
- 因特网的规模非常大。如果让所有的路由器知道所有的网络怎样到达。则这种路由表将非常大,处理起来也太花时间,而所有这些路由器之间交换路由信息所需的带宽会使因特网的通信链路饱和
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门采用的路由选择协议,但同时还希望连接到因特网上,为此,因特网将整个互联网划分为许多较小的自治系统
- 自治系统AS(AutonomousSystem):一个管理机构下的网络设备群。尽管AS使用了多种内部路由选择协议,但AS对其他AS表现出的是一个单一的和一致的路由选择策略。一个大的ISP就是一个自治系统,自治系统之间的路由选择称为域间路由选择,自治系统内部的路由选择叫做域内路由选择
- 因特网有两大类路由选择协议
- 内部网关协议IGP(Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议。与互联网中其他自治系统选用什么路由选择协议无关。如RIP和OSPF协议
- 外部网关协议EGP(External Gateway Protocol) 源站和目的站处在不同的自治系统使用的路由选择协议。如BGP协议
- 根据算法是否随网络的通信量或拓补自适应地调整变化划分:
- 互联网的实体并不是由一个组织运营管理的单一网络,而是由多个运营商网络相互连接组成的(图 4.23)。
ADSL、FTTH 等接入网是与用户签约的运营商设备相连的,这些设备称为 POP - NOC:Network Operation Center,网络运行中心。NOC 是运营商的核心设备,从 POP 传来的网络包都会集中到这里,并从这里被转发到离目的地更近的POP,或者是转发到其他的运营商。这里也需要配备高性能的路由器
- IX:互联网交换中心。设置一个中心设备,将所有的运营商都用通信线路连接起来。通过连接到中心设备的方式来减少线路数量,这个中心设备就称为IX,IX 的核心是具有大量高速以太网 端口的二层交换机。二层交换机的基本原理和一般交换机相同,大家可以认为 IX 的核心就是大型的、高速的交换机。
4.6. 内部网关协议-路由信息协议RIP(Routing Information Protocol)
- RIP是一种分布式的基于距离向量的路由选择协议。要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
- 距离/跳数:从一路由器到直接连接的网络的距离定义为1。从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加1。加“1”是因为到达目的网络后就进行直接交付,而到直接的网络的距离已经定义为1。RIP允许一条路径最多只能包含15个路由器。“距离”为16时即相当于不可达。可见RIP只适用于小型互联网。RIP不能在两个网络之间同时使用多条路由。RIP选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
- 按固定的时间间隔(30s)仅和相邻路由器交换本路由器的路由表(到某个网络N、到N的距离,下一跳地址,更新原则是到每个网络的最短距离)。当网络拓补发生变化时,路由器也及时向相邻路由器通告拓补变化后的路由信息。使得每一个路由器到每一个目的网络的路由是最短的
- RIP协议和OSPF协议都是分布式路由选择协议,每个路由器都要不断地和其他一些路由器交换路由信息
- 路由表的建立:路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。RIP协议的收敛(convergence)过程较快,即在自治系统中所有的结点都得到正确的路由选择信息的过程。
- 距离向量算法(Bellman-Ford算法)
- 收到相邻路由器(其地址为X)的一个RIP报文:
- 先修改此RIP报文中的所有项目:下一跳地址都改为X,距离+1。对修改后的RIP报文中的每一个项目(到目的网络N。距离d,下一跳地址X)
- 若项目中的目的网络不在路由表中,则把该项目加到路由表中;
- 若项目中的目的网络在路由表中且下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目;
- 若项目中的目的网络在路由表中且下一跳字段给出的路由器地址是不同的,收到项目中的距离小于路由表中的距离,则进行更新;
- 若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(表示不可达)
- RIP2协议的报文格式(使用运输层的用户数据报UDP进行传送,端口520)
- 首部:4个字节,命令字段指出报文的意义。1表示请求路由信息,2表示对请求路由信息的响应或未被请求而发出的路由更新报文。“必须为0”是为了4字节的对齐
- 路由部分:20个字节 地址族标识符(地址类别)字段用来标志所使用的地址协议(IP地址时为2)。路由标记填入自治系统号ASN,考虑使RIP有可能收到本自治系统以外的路由选择信息
- RIP2还具有简单的鉴别功能,若使用鉴别功能,则将原来写入第一个路由信息(20字节)的位置用作鉴别。并将地址族标识符置为全1(0xFFFF),路由标记吸入鉴别类型,剩下16字节为鉴别数据。在鉴别数据之后才写入路由信息,此时最多能放入24个路由信息
- 最多可以包括25个路由,最大长度是4+20X25=504字节
- RIP协议的优缺点:
- 当网络出现故障时,原因只能相信相邻路由器。要经过比较长的时间才能将此信息传送到所有的路由器。“坏消息传的慢”,更新收敛时间过长。(可以通过让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送)
- 实现简单,开销较小。
- 限制了网络的规模,使用的最大距离为15(16表示不可达)。路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。对于较大的网络应该使用OSPF协议
4.7. 内部网关协议OSPF(OpenShortest Path First)
- OSPF “开放最短路径优先” 使用了Dijkstra提出的最短路径算法SPF 分布式的链路状态协议
- OSPF只有当链路状态发生变化时,使用洪泛法,本自治系统中所有路由器通过所有输出端口发送与本路由器相邻的所有路由器的链路状态信息。“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)(费用、距离、时延、带宽等)
- 链路状态数据库/全网的拓扑结构图(link-statedatabase):由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。它在全网范围内是一致的(这称为链路状态数据库的同步)。因此,每一个路由器都知道全网一共有多少路由器,以及哪些路由器时相连的,代价是多少。每个路由器使用链路状态数据库中的数据,构造出自己的路由表。OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF的更新过程收敛得快是其重要优点。
- 为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫作区域。每一个区域都有一个32位的区域标识符(用点分十进制表示)。在一个区域内的路由器最好不超过200个。将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。为了使每一个区域能够和本区域以外的区域进行通信。OSPF使用层次结构的区域划分。在上层的区域叫作主干区域(backbonearea)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器进行概括,每个区域至少一个区域边界路由器,在主干区域内的路由器叫做主干路由器,一个路由器既可以是区域边界路由器也可以是主干路由器,在主干区域内还要有一个路由器专门和自治系统外的其他自治系统交换路由信息,这样的路由叫做自治系统边界路由器
- OSPF分组:使用IP数据报传送,IP数据报首部的协议字段为89,使用24字节的固定首部长度
- 版本号--当前版本号2。
- 类型--OSPF分组5种类型中的哪一种。
- 分组长度--包括OSPF头在内的分组的长度。以字节为单位
- 路由器标识符--标志发送该分组的路由器的接口的IP地址
- 区域标识符--分组所属的区域标识符
- 校验和--包含有除了对数据损坏的认证部分之外的整个OSPF分组的校验。检验分组中的差错
- 鉴别类型--包含有认证的类型码:0没有认证(null authentication)。1为普通文本(口令)。2为MD5
- 鉴别:鉴别类型为0就填入0,鉴别类型为1则填入8个字符的口令
- OSPF共有以下五种分组类型:
- 类型1,问候(Hello)分组,用来发现和维持邻站的可达性。
- 类型2,数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 类型3,链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项曰的详细信息。
- 类型4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。路由器使用这种分组将其链路状态通知给邻站
- 类型5,链路状态确认(Link State Acknowledgment)分组,对链路更新分组的确认。
- OSPF的其他特点
- OSPF允许管理员给每条路由指派不同的代价。对于不同类型的业务可计算出不同的路由。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡(load balancing)。
- 所有在OSPF路由器之间交换的分组(例如,链路状态更新分组)都具有鉴别的功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。
- OSPF支持可变长度的子网划分和无分类的编址CIDR。
- 由于网络中的链路状态可能经常发生变化,OSPF让每一个链路状态都带上一个32位的序号,序号越大状态就越新。
- OSPF的基本操作
- OSPF规定,每两个相邻路由器每隔10秒钟要交换一次问候分组确知邻站是可达的。因为只有可达邻站的链路状态信息才存入链路状态数据库(路由表就是根据链路状态数据库计算出来的)。若有40秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。
- 其他的四种分组都是用来进行链路状态数据库的同步。同步就是指不同路由器的链路状态数据库的内容是一样的。两个同步的路由器叫做“完全邻接的”(fully adjacent)路由器。
- 当一个路由器刚开始工作时,为了减少开销,OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息(主要就是指出有哪些路由器的链路状态信息(以及其序号)已经写入了数据库)。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了
- 在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用可靠的洪泛法向全网更新链路状态。
- 为了确保链路状态数据库与全网保持一致,OSPF还规定每隔一段时间(如30分钟)就要刷新一次数据库中的链路状态
- OSPF协议对多点接入的局域网采用了指定的路由器的方法,使广播的信息量大大减少。指定的路由器代表该局域网上所有的链路向连接到该网络的各路由器发送的状态信息
4.8. 外部网关协议BGP
- BGP使用原因:因特网规模太大,使得AS之间路由选择非常困难,AS之间的路由选择必须考虑有关策略
- BGP是不同自治系统的路由器之间交换路由信息的协议。采用路径向量路由选择协议
- BGP发言人(BGPspeaker)
- 每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器,一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。当BGP发言人互相交换了网络可达性的信息(到达某个网络(使用网络前缀表示)所要经过的一系列自治系统)后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
- BGP报文(端口号179)
- 四种类型的BGP报文具有同样的通用首部,其长度为19字节。通用首部分为三个字段。
- 标记(marker)字段为16字节长,用来鉴别收到的BGP报文。当不使用鉴别时,标记字段要置为全1。
- 长度字段指出包括通用首部在内的整个BGP报文以字节为单位的长度,最小值是19,最大值是4096。
- 类型字段的值为l到4,分别对应于上述四种BGP撮文中的一种。
- OPEN报文:共有6个字段,即版本(1字节,值是4)、本自治系统号(2字节,使用全球唯一的16位自治系统号,由ICANN地区登记机构分配)、保持时间(2字节,以秒计算的保持为邻站关系的时间)、BGP标识符(4字节,该路由器的IP地址)、可选参数长度(1字节)和可选参数。用来与相邻的另一个BGP发言人建立关系。使通信初始化
- UPDATE报文共有5个字段,即不可行路由长度(2字节,指明下一个字段的长度)、撤消的路由(列出所有要撤消的路由)、路径属性总长度(2字节,指明F一个字段的长度)、路径属性(定义在这个报文中增加的路径的属性)和网络层可达性信息NLRI(Network Layer Reachability Information)。最后这个字段定义发出此报文的网络,包括网络前缀的位数、IP地址前缀。用来发送某一路由的信息,以及列出要撤消的多条路由。
- KEEPALIVE报文只有BGP的19字节长的通用首部。用来确认打开报文和周期性地证实邻站关系。
- NOTIFICATION报文有3个字段,即差错代码(1字节)、差错子代码(1字节)和差错数据(给出有关差错的诊断信息),用来发送检测到的差错
- ROUTE-REFRESH报文,只有4字节长,不采用BGP报文格式,请求对等端重新通告
- 四种类型的BGP报文具有同样的通用首部,其长度为19字节。通用首部分为三个字段。
- BGP协议的特点
- BGP协议交换路由信息的结点数量级是自治系统个数的量级,这要比这些自治系统中的网络数少很多。 每一个自治系统中BGP发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
- BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。由于使用了路径向量信息。就可以很容易地避免产生兜圈子的路由。如果一个BGP发言人收到了其他BGP发言人发来的路径通知,它要检查一下本自治系统是否在此通知的路径中,如果在这条路径中,就不能采用这条路径
- 在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。节省网络带宽和路由器的处理开销。
- 两个不同AS定期地交换路由信息,有一个商谈的过程(因为很可能对方路由器的负荷已很重,因而不愿意再加重负担)。因此,一开始向邻站进行商谈时就必须发送OPEN报文。如果邻站接受这种邻站关系,就用KEEPALIVE撮文响应。这样,两个BGP发言人的邻站关系就建立,一旦邻站关系建立了,就要继续维持这种关系。双方中的每一方都需要确信对方是存在的,且一直在保持这种邻站关系。为此,这两个BGP发言人彼此要周期性地交换KEEPALIVE报文(一般每隔30秒)。KEEPALIVE报文只有19字节长(只用BGP报文的通用首部)因此不会造成网络上太大的开销。
- BGP发言人可以用UPDATE报文撤消它以前曾经通知过的路由,也可以宣布增加新的路由。撤消路由可以一次撤消许多条,但增加新路由时,每个更新报文只能增加一条
- BGP可以很容易地解决距离向量路由选择算法中"坏消息传播得慢"的问题。当某个路由器或链路出现故障时,由于BGP发言人可以从不止一个邻站获得路由信息,因此很容易选择出新的路由。距离向量算法往往不能给出正确选择,因为这些算法不能支持哪些邻站到目的站的路由是独立的
4.9. 路由器的构成
- 路由只有网络层和网络接口层
- mac地址表:mac地址映射到硬件接口
- 路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。路由器的转发分组正是网络层的主要工作
- 路由器结构可以分为路由选择(控制)部分和分组转发部分
- 分组转发部分可以支持多种通信技术,ADSL、FTTH,以及各种宽带专线等,只要端口模块安装了支持这些技术的硬件即可。
- 路由器在转发包时,首先会通过端口将发过来的包接收进来,这一步的工作过程取决于端口对应的通信技术。对于以太网端口来说,就是按照以太网规范进行工作,而无线局域网端口则按照无线局域网的规范工作,总之就是委托端口的硬件将包接收进来。接下来,分组转发部分会根据接收到的包的 IP 头部中记录的接收方 IP 地址,在路由表中进行查询,以此判断转发目标。然后,分组转发部分将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去,也就
是分组转发部分委托端口模块将包发送出去的意思 - 路由器的端口有IP地址和MAC地址,能够成为以太网的发送方或者接收方,而交换机只负责转发,不能成为发送方或者接收方。只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。
- 路由器根据IP地址转发。路由器会忽略主机号,只匹配网络号。
- 对路由表进行维护。根据路由协议机制,通过路由器之间的信息交换由路由器自行维护路由表的记录
- 通过路由器转发的网络包,其接收方 MAC 地址为路由器端口的 MAC 地址。
- 如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMP 消息告知发送方 。
- 我们需要知道输出端口的 MTU ,看看这个包能不能不分片直接发送。最大包长度是由端口类型决定的,用这个最大长度减掉头部的长度就是 MTU,将 MTU 与要转发的包长度进行比较。如果输出端口的 MTU 足够大,那么就可以不分片直接发送;如果输出端口的 MTU 太小,那么就需要将包按照这个 MTU 进行分片,但在此之前还需要看一下 IP 头部中的标志字段,确认是否可以分片。一般来说都是可以分片的,但下面两种情况不能分片:1)发送方应用程序等设置了不允许分片;2)这个包已经是经过分片后的包。如果查询标志字段发现不能分片,那么就只能丢弃这个包,并通过 ICMP 消息通知发送方。否则,就可以按照输出端口 MTU 对数据进行依次拆分了。在分片中,TCP 头部及其后面的部分都是可分片的数据,尽管TCP 头部不属于用户数据,但从 IP 来看也是 TCP 请求传输的数据的一部分。数据被拆分后,每一份数据前面会加上 IP 头部,其大部分内容都和原本的 IP 头部一模一样,但其中有部分字段需要更新,这些字段用于
记录分片相关的信息。 - IP(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以
太网(交换机)来负责的。 - 包过滤就是在对包进行转发时,根据 MAC 头部、IP 头部、TCP 头部的内容,按照事先设置好的规则决定是转发这个包,还是丢弃这个包。我们通常说的防火墙设备或软件,大多数都是利用这一机制来防止非法入侵的 。
4.10. 虚拟专用网VPN
- 因特网中的所有路由器,对目的地址是专用地址(可重用地址)的数据报一律不进行转发,采用专用IP地址的互联网络称为专用互联网或者本地互联网/专用网,仅机构内部使用。内网地址:
- 10.0.0.0到10.255.255.255(或记为10.0.0.0/8 称为24位块)
- 172.16.0.0到172.31.255.255(或记为172.16.0.0/12 称为20位块)
- 192.168.0.0到192.168.255.255(或记为192.168.0.0/16 称为16位块)
- VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。
- 让外地员工访问到内网资源,利用VPN的解决方法就是在内网中架设一台VPN服务器。外地员工在当地连上互联网后,通过互联网连接VPN服务器,然后通过VPN服务器进入企业内网。为了保证数据安全,VPN服务器和客户机之间的通讯数据都进行了加密处理。有了数据加密,就可以认为数据是在一条专用的数据链路上进行安全传输,就如同专门架设了一个专用网络一样,但实际上VPN使用的是互联网上的公用链路,因此VPN称为虚拟专用网络,其实质上就是利用加密技术在公网上封装出一个数据通讯隧道。
4.11. 网络地址转换NAT (Network Address Translation)
- 需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接(其实相当于交给NAT代理访问网络上的其他主机)
- 为了更加有效利用NAT路由器上的全球IP地址,常用的NAT把运输层的端口号拥塞,称为网络地址与端口号转换NAPT
- 通过NAT路由器的通信必须由专用网内的主机发起,因为NAT路由器不知道应当把目的IP地址转换成专用网内的哪个本地IP地址
- 包收发过程中,地址转换设备需要根据对应表查找私有地址和公有地址的对应关系,再改写地址和端口号之后进行转发。当数据收发结束,进入断开阶段,访问互联网的操作全部完成后,对应表中的记录就会被删除。
5. 运输层
5.1. 运输层概述
- 运输层有两个很重要的功能
- 复用:发送方不同的应用进程都可以使用同一个运输层协议传送数据
- 分用:接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程
- 运输层属于面向通信部分的最高层,同时也是用户功能中的最底层。网络的边缘部分的两个主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而路由器在转发分组时都只用到下三层的功能
- 协议端口号(protocol port number)/端口(port)。16位、标识TCP/IP体系中不同操作系统的应用进程。分为两种:服务端使用的端口号:系统端口号[0~1023]、登记端口号[1024~49151];客户端使用的短暂端口号:[49152~65535]
5.2. 用户数据报协议UDP(User Datagram Protocol)
UDP特点
- UDP支持一对一、一对多、多对一和多对多的交互通信
- UDP使用尽最大努力交付,即不保证可靠交付。因此主机不需要维持复杂的连接状态表
- UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就直接交付IP层;若报文太长,IP层在传送时可能要进行分片,若报文太短,会使IP数据报的首部的相对长度太大,都会降低了IP层的效率。
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短
- UDP是无连接的,发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延
- UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。
- UDP用于视频音频等
UDP报文格式
- 首部字段:8个字节,由四个字段组成,每个字段的长度都是两个字节
- 源端口: 2字节 源端口号,在需要对方回信时选用,不需要时可全0
- 目的端口:2字节 目的端口号。这在终点交付报文时必须要使用到
- 长度:2字节 UDP用户数据报的长度,其最小值是8(仅有首部)
- 检验和:2字节 检测UDP用户数据报在传输中是否有错。有错就丢弃
- 数据字段
- 首部字段:8个字节,由四个字段组成,每个字段的长度都是两个字节
UDP计算检验和——把首部和数据部分一起都检验
- 在发送方的UDP用户数据报之前临时增加12个字节的伪首部(不参与传输),并把全零放入检验和字段。然后把伪首部以及UDP用户数据报看成是由许多16位的字串接起来。若UDP用户数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。最后按二进制反码计算出这些16位字的和。将此和的二进制反码作为检验和字段,就发送这样的UDP用户数据报
- 在接收方,把收到的UDP用户数据报连同伪首部(以及可能的填充全零字节)一起,按二进制反码求这些16位字的和。当无差错时其结果应为全1。否则就表明有差错出现,接收方就应丢弃这个UDP用户数据报(也可以上交给应用层,但附上出现了差错的警告)
5.3. 传输控制协议TCP(Transmission Control Protocol)
TCP特点
- TCP是面向连接的。发送数据之前,必须先建立TCP连接。在发送数据结束时,必须释放已经建立的TCP连接
- 每一条TCP连接只能有一对一的两个端点(endpoint)。TCP连接的端点叫做套接字(socket)。套接字Socket = IP地址:端口号,同一个IP地址或者端口号都有多个TCP连接,套接字本质是通信操作的各种控制信息,可用netstat -and查看,a显示所有套接字,n IP地址和端口号,o显示使用该套接字的程序PID。0.0.0.0表示无通信,不绑定IP地址。*:*表示UDP
- TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达
- TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。两端都设有发送缓存和接收缓存用来临时存放双向通信的数据。在发送或接收时,应用程序在把数据传送或放入给TCP的缓存后,在合适的时候把数据发送出去或者读取出来
- TCP是面向字节流的。TCP把应用程序交下来的数据看成仅仅是一连串的无结构无意义的字节流。TCP保证接收方应用程序所收到的字节流和发送方应用程序所发出的字节流完全一样。接收方应用程序必须有能力识别收到的字节流,把他还原成有意义的应用层数据
TCP报文段的首部格式(首部长度[20-60]字节->固定20字节+【0-40】字节的选项)
- 源端口和目的端口:各占2个字节,源端口号和目的端口号。
- 序号/报文段序号seq:4字节。本报文段数据的第一个字节的序号,[0, 2^32-1],使用mod2^32运算。TCP连接中传送的字节流中的每一个字节都按顺序编号。一个字节一个序号,字节流的起始序号必须在连接建立时设置。(为了安全,初始值是随机的)
- 确认号ack:4字节,期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已正确收到
- 数据偏移:4位,TCP报文段的首部长度。0-15 单位是32位字/4字节
- 保留:占6位,保留为今后使用,但目前置为0
- 控制位->紧急URG(URGent):当URG=1时,发送方TCP就把紧急数据插入到本报文段数据的最前面,表示有紧急数据要传输,而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针(Urgent Pointer)字段配合使用。(Control + C)
- 控制位->确认ACK(ACKnowlegment)ACK=1确认号有效。ACK=0确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
- 控制位->推送PSH(PuSH)当PSH=l时,就尽快交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
- 控制位->复位RST(ReSeT)RST=1表明TCP连接中出现严重差错,必须释放连接然后再重新建立连接。还用来拒绝非法报文段或拒绝打开连接
- 控制位->同步SYN (SYNchronization) 在连接建立时用来同步序号。
- 控制位->终止FIN (FINis) 当FIN=l时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接
- 窗口rwnd:2字节。[0, 2^16-1] 从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(因为接收方的数据缓存空间有限)窗口字段明确指出了现在允许对方发送的数据量
- 检验和:2字节。检验的范围包括首部和教据这两部分。和UDP一样计算检验和,但应把伪首部第4个字段中的17改为6(TCP的协议号是6),把第5字段中的UDP长度改为TCP长度
- 紧急指针:2字节。URG=1时才有意义,指出了紧急数据的末尾在报文段中的位置(紧急数据结束后就是普通数据)。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。即使窗口为零时也可发送紧急数据。
- 选项:长度可变,最长40字节
- 最大报文段长度MSS (Maximum Segment Size):每一个TCP报文段中的数据字段的最大长度。若选择较小的MSS长度,网络的利用率就降低。若TCP报文段非常长,lP层传输时要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传。也会使开销增大。因此,MSS应尽可能大些,只要在IP层传输时不需要分片就行。在连接建立的过程中,双方能把自己能够支持的MSS写入这一字段,以后就按照这个数值传输数据,两个传送方向可以有不同的MSS值。MSS的默认值是536字节长。故所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节。(?由MAC帧最大传输单元MTU决定,减去TCP和IP头部得到)
- 窗口扩大选项:为了扩大窗口。占3字节,其中有一个字节表示移位值S(最大值是14)。新的窗口值等于TCP首部中的窗口位数从16增大到(16+S),相当于窗口最大值增大到 2^(16+14)-1=2^30-1)。窗口扩大选项可以在双方初始建立TCP连接时进行协商。
- 时间戳选项:10字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)。
- 计算往返时间RTT。发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方在确认该报文段时把时间戳字段值复制到时间戳回送回答字段。发送方在收到确认报文后,可以准确地计算出RTT
- 处理TCP序号超过2^32/防止序号绕回PAWS (ProtectAgainst Wrapped Sequence numbers)。高速网络在一次TCP连接的数据传送中序号很可能会被重复使用。为了使接收方能够把新的报文段和其他的报文段区分开,可以加上这种时间戳
- 选择确认SACK:只传送缺少的数据而不重传已经正确到达接收方的数据。接收方告诉发送方没收到的连续的字节块边界,字节块左边界是第一个字节的序号,而右边减1才是字节块中的最后一个序号。选项中最多能指明4个字节块的占4个字节的边界信息(即最多32字节)。另外还包括一个字节指明是SACK选项,另一个字节指明这个选项要占用多少字节
TCP的运输连接管理
- TCP连接建立(三次握手)需要客户端再发送确认的目的是防止已失效的连接请求报文(滞留)突然又传到服务端,产生错误,同时确认两边的发送和接收功能正常
- TCP服务器进程先创建传输控制块TCB,然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,即作出响应
- TCP客户进程也是先创建传输控制模块TCB,然后向TCP服务端发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。TCP客户进程进入SYN-SENT(同步已发送)状态(TCP规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号)
- TCP服务器收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+l,同时也为自己选择一个初始序号seq=y。这个报文段也不能携带数据,但同样要消耗掉一个序号。TCP服务器进程进入SYN-RCVD(同步收到)状态。
- TCP客户进程收到服务器的确认后,还要向服务器给出确认,确认报文ACK=1,确认号ack=y+1,序号seq=x+1,客户端进入连接状态(TCP的标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号)
- TCP服务端收到客户端的确认后,也进入ESTABLISHED状态
- TCP连接释放(四次挥手)
- TCP客户端先向其TCP服务端发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。把连接释放报文段首部的终止控制位FIN置1,其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加l。进入FIN-WAIT-1(终止等待1)状态,等待服务器的确认。TCP规定,FIN报文段即使不携带数据,它也消耗掉一个序号。
- TCP服务端收到连接释放报文段后即发出确认,确认号是ack=u+l,而这个报文段自己的序号是v,等于前面已传送过的数据的最后一个字节的序号加1。然后就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从客户端到服务端这个方向的连接就释放了,这时的TCP连接处于半关闭(half-close)状态,即客户端已经没有数据要发送了,但服务端若发送数据,客户端仍要接收。从服务端到客户端这个方向的连接并未关闭,这个状态可能会持续一些时间。
- TCP客户端收到服务段的确认后,进入FIN-WAIT-2(终止等待2)状态,等待服务端发出的连接释放报文段,若服务端已经没有要想要发送的数据,则通知TCP释放连接,服务端发出释放报文FIN=1,假定服务端的序号为w(在半关闭状态下服务端又可能发送了一些数据),服务端必须重复上次已发送过的确认号ack=u+1,此时服务端进入LAST-ACK(最后确认)状态,等待客户端的确认
- TCP客户端收到服务端的连接释放报文后,必须发出确认,把ACK=1,确认号为ack=w+1,序号seq=u+1(前面发送过的FIN报文段也要消耗一个序号),进入TIME-WAIT(时间等待)状态。经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,客户端进入CLOSED状态;时间MSL叫做最长报文段寿命(建议设置为2分钟)
- 等待计时器:为什么客户端段在TIME-WAIT状态必须等待2MSL时间?
- 为了保证客户端发送的最后一个ACK报文能到达服务端。这个ACK报文有可能丢失,因而处在LAST-ACK状态的服务端收不到对已发送的FIN+ACK报文段的确认。服务端就会超时重传FIN+ACK报文段,而客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务端都正常进入CLOSED状态
- 为了防止已失效的连接请求报文段出现在本连接中,客户端在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。服务端只要收到了客户端发出的确认,就进入CLOSED状态。同样,服务端在撤销相应的传输控制块之后,就结束了这次的TCP连接,服务端结束TCP连接的时间要比客户端早
- 保活计时器(Keepalive timer)
- 服务器每收到一次客户端的数据,就重新设置保活计时器,通常是2小时,若2小时候没有收到客户的数据,服务器就发送一个探测报文段,以后每隔75分钟就发送一次,若一连发送10个探测报文段后仍无客户的响应,服务器就认为客户端出现故障,接着关闭连接
- TCP连接建立(三次握手)需要客户端再发送确认的目的是防止已失效的连接请求报文(滞留)突然又传到服务端,产生错误,同时确认两边的发送和接收功能正常
TCP的有限状态机
传输控制协议TCP可靠传输
- 可靠传输:当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度。这样一来,本来是不可靠的传输信道就能够实现可靠传输了。
- 可靠传输协议:自动重传请求(Automatic Repeat reQuest,ARQ)协议包括停止等待ARQ协议、连续ARQ协议
- 自动重传请求(Automatic Repeat reQuest,ARQ)协议,停止等待协议(简单但是信道利用率低)
- 停止等待:每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发下一个分组
- 超时重传:发送方只要超过了一段时间没有收到确认,就认为刚才发送的分组丢失,重传前面发送过的分组。要实现超时重传,就要在每发送完一个分组设置一个超时计时器。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。(如果重传时间设定太长,通信效率低,太短,产生不必要的重传,浪费网络资源)TCP 会在发送数据的过程中持续测量 ACK 号的返回时间,如果ACK号返回变慢,则相应延长等待时间;相对地,如果ACK号马上就能返回,则相应缩短等待时间
- 发送方在发送完一个分组后,必须暂时保留已发送的分组的副本(为发生超时重传时使用)。只有在收到相应的确认后才能清除暂时保留的分组副本
- 分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。
- 确认丢失(接收方发送的确认丢失了):接收方又收到了重传的分组。丢弃这个重复的分组。并向发送方发送确认。
- 确认迟到(接收方发送的确认迟到了)发送方收到接收方重复的确认时,收下就丢弃,接收方收到重复的分组时,同样丢弃重复的分组,并重传确认分组
- 连续ARQ协议(以字节为单位的滑动窗口协议)
- 发送方维持的发送窗口,位于发送窗口内的分组都可按照分组序号从小到大连续发送出去,而不需要等待对方的确认。信道利用率提高了
- 连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般采用累积确认的方式。接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,表示到这个分组为止的所有分组都己正确收到。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上(接收方不应过分推迟发送确认,否则会导致发送方不必要的冲转,反而浪费网络资源,TCP规定,确认推迟的时间不应该超过0.5秒。若收到一连串具有最大长度的报文段,则必须每个一段报文段就要发送一个确认,捎带确认不经常发生,因为大多数应用程序不同时在两个方向上发送数据),
- 累积确认容易实现,即使确认丢失也不必重传。但不能向发送方反映出接收方已经正确收到的所有分组的信息。当通信线路质量不好时,会发生回退N问题,如果发送方发送前5个分组,而中间的第三个分组丢失了,这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次,叫做回退N,表示需要再退回来重传已发送过的N个分组。
- 对不按序到达的数据先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层应用
传输控制协议TCP流量控制(flow control)
- 流量控制:让发送方的速率不要太快,要让接收方来得及接收
- 滑动窗口机制:连接建立后,发送方的发送窗口rwnd不能超过接收方给出的接收窗口数值(单位字节)通过窗口大小控制对方发送速率
- 发送方收到零窗口通知后不久,接收方的接收缓存又有一些存储空间,但接收方的发送窗口信息丢失,发送方一直等待非零窗口导致死锁:只要TCP连接的一方收到对方的零窗口通知,启动持续计时器,若时间到期,则发送一个零窗口探测报文段,对方就在确认这个字段时给出现在的窗口值。如果窗口仍然是零,重新设置持续计时器。如果窗口不是零,那么死锁局面打破
TCP的拥塞(congestion)控制
- 拥塞:某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏的情况。
- 拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
- 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关所有因素。但TCP连接的端点只要迟迟不能收到对方的确认信息,就猜想在当前网络中的某处很可能发生了拥塞,但这时却无法知道拥塞到底发生在网络的何处,也无法知道发生拥塞的具体原因。
- 相反,流量控制往往指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
- 发送方维持一个叫做拥塞窗口CWND的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态地变化,发送方让自己的发送窗口等于拥塞窗口,如果再考虑到接收方的接收能力,那么发送窗口还可能小于拥塞窗口
- 只要发送方没有按时收到应当到达的确认报文,就猜想网络可能出现拥塞。
- TCP拥塞控制方法
- 慢开始和拥塞避免算法
- 慢开始:先把拥塞窗口cwnd设置为一个最大报文段MSS的数值。每收到一个对新的报文段确认就把发送方的拥塞窗口增加至多一个MSS的数值,每经过一个传输轮次,拥塞窗口cwnd就加倍
- 拥塞避免算法:每经过一个往返时间就把发送方的拥塞窗口cwnd加1
- 慢开始门限ssthresh:防止拥塞窗口增长过大引起网络拥塞,拥塞窗口cwnd小于慢开始门限使用慢开始算法,否则使用拥塞避免算法
- 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为l,执行慢开始算法
- 快重传和快恢复
- 快重传:接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不用等待自己发送数据时才进行捎带确认,发送方一连收到三个重复确认就立即重传对方尚未收到的下一个报文段。而不必继续等待为收到报文段设置的重传计时器到期
- 快恢复:当发送方连续收到三个重复确认时,慢开始门限减半,把cwnd值设置为慢开始门限的数值,执行拥塞避免算法
- 慢开始和拥塞避免算法
- 发送窗口的上限值 = Min[rwnd,cwnd],当rwnd<cwnd时,是接收方的接收能力限制发送方窗口的最大值,当rwnd>cwnd时,是网络拥塞限制发送方窗口的最大值
4个定时器: 超时定时器,持续计时器,等待计时器,保活计时器
6. 应用层
6.1. 概述
- 运输层为应用进程提供了端到端的通信服务,但不同的网络应用进程之间,还需要有不同的通信规则,因此需要有应用层协议
6.2. 域名系统DNS
域名系统DNS(Domain Name System)是因特网使用的命名系统,完成域名(主机名字)到IP地址的解析,也可以将邮件地址与邮件服务器进行关联,域名到IP地址的解析由分布在互联网上的许多域名服务器程序共同完成的,因特网的域名系统DNS被设计成为一个联机分布式数据库系统。
域名与IP并用原因:1.域名比IP方便记忆理解,2.IP长度固定运行效率高
域名到IP地址的解析过程
- 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(包含在操作系统的Socket库中,用于调用网络功能的程序组件集合),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报的方式发送给本地域名服务器(减少开支)。本地域名服务器再查找域名后,把对应的IP地址放在回答报文中返回,应用进程获得目的主机的IP地址后即可进行通信。
- 若本地域名服务器不能回答该请求,则此时域名服务器就暂时成为DNS中的另一个客户,然后再向根域名服务器发送信息,得到顶级域名服务器IP地址,然后继续向顶级域名服务器发出查询请求。这种过程直到找到该请求的域名服务器为止
- 来自客户端查询消息包括:域名(服务器,邮件服务器(@后面的部分)的名称),Class(IN标识互联网,识别除互联网外的应用),记录类型(表示域名对应何种类型的记录。A:域名对应的是IP地址,MX:域名对应邮件服务器和优先级(数值小的优先),PTR:根据IP地址查域名,CNAME:查询域名相关别名,NS:查询DNS服务器IP地址,SOA:查询域名属性信息)
域名的层次结构
- 互联网采用层次树状结构的命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的域名,
- 域是名字空间中一个可被管理的划分,域还可以划分子域,子域还可以划分为子域的子域,形成了顶级域、二级域、三级域等。
- 每个域名由标号序列组成,各标号用点“.”隔开,域名中的标号都由英文字母和数字组成,每一个标号都不超过63个字符,不区分大小写字母,除了-不能使用其他标点服务号,级别最低的域名写左边,级别最高的域名写最右边,完整域名不能超过255个字符;mail.cctv.com mail三级域名,cctv二级域名,com一级域名,各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理,mail.cctv.com域的DNS服务器注册到cctv.com域的DNS服务器中,cctv.com域的DNS服务器注册到com域DNS服务器中
域名服务器
- DNS服务器管辖范围以区为单位,区小于等于域。域名服务器所负责管辖的范围叫区,一个区中的所有节点必须是能够连通的,每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射,
- 根域名服务器:最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址,因特网共有13个不同IP地址的域名服务器,根域名服务器采用任播技术,当DNS客户向某个根域名服务器的IP地址发出查询报文时,互联网上的路由器就能找到离这个DNS客户最近的一个根域名服务器,根域名服务器不把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应该找哪个顶级域名服务器
- 顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名,当收到DNS查询请求时,就给出最后的结果或者下一步域名服务器地址
- 权限域名服务器:负责一个区的域名服务器,当不能给出查询答案时,会给出下一步权限服务器地址
- 本地域名服务器:当一台主机发出DNS查询请求时,请求报文发给本地域名服务器,每一个ISP都有本地域名服务器
- 所有DNS服务器都保存了根域的DNS服务器信息
域名解析过程
- 本机向本地域名服务器查询一般都是采用递归查询:如果本机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(替该主机继续查询),而不是让该主机自己进行下一步查询。因此,递归查询的返回结果是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址
- 本地域名服务器向根域名服务器查询通常采用迭代查询:当本地域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出IP地址,要么给出下一步要查询的域名服务器地址,让本地域名服务器进行后续的查询,本地域名服务器也可以采用递归查询,取决于最初查询的请求报文设置要求使用哪一种查询方式
- 为了提高域名服务的可靠性,DNS域名服务器把数据复制到几个域名服务器来保存,其中一个是主域名服务器,其他的是辅助域名服务器,主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行,保证数据的一致性
- 为了提高DNS查询效率,减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛使用高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录(不存在也会缓存)
- 为了保证高速缓存中的内容正确,域名服务器应为每项内容设计计时器并处理超过合理时间的项。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器获取绑定信息,当权限域名回答一个查询请求时,在响应中都指明绑定有效存在的时间值,增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性
6.3. FTP(File Transfer Protocol文件传送协议)
- FTP概述:FTP提供交互式访问,允许客户指明文件的类型和格式,并允许文件具有存取权限;FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任一计算机之间传送文件
- 文件共享协议
- 复制整个文件:若要存取一个文件必须先获得一个本地的文件副本。要修改文件,只能对文件副本修改,然后将修改后的文件副本传回到原节点
- 基于TCP的FTP:减少或消除在不同操作系统下处理文件的不兼容性
- 使用客户服务器方式:一个FTP服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由主进程(接收新请求)和若干和从属进程(负责处理单个请求)(控制进程和数据传送进程)组成
- 主进程工作步骤
- 打开端口21,使客户进程能够连上
- 等待客户进程发出连接请求
- 启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
- 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行
- 在进行文件传输时,FTP的客户机和服务器之间要建立两个TCP连接,一个用于传输控制命令和响应,称为控制连接,一个用于实际的文件内容传输,称为数据连接。控制连接在整个会话期间一直打开,FTP客户端发出请求,通过控制连接发送给服务端的控制进程。服务端的控制进程在收到FTP客户端发来的文件传输请求后就创建数据传送进程,用来连接客户端和服务器短的数据传送进程。完成实际文件的传送,传送完毕后关闭数据传送连接并结束运行
- 基于UDP的TFTP(简单文件传送协议)
- 采用客户服务器方式,TFTP只支持文件传输而不支持交互,而且需要有自己的差错修改措施
- TFTP优点
- TFTP可用于UDP环境,当需要将程序或文件同时向许多机器下载时就往往需要使用TFTP
- TFTP代码所占内存较小。这对较小的计算机或者某些特殊用途的设备很重要,这些设备不需要硬盘,只需要固化了TFTP和UDP以及IP的小容量只读存储器即可,当接通电源后,设备执行只读存储器中的代码,在网络上广播一个TFTP请求,网络上的TFTP服务器发送响应,其中包括可执行二进制程序。设备收到此文件后将其放入内存,然后开始运行程序。这种方式增加了灵活性,较少开销
- TFTP的主要特点
- 每次传送的数据报文中有512字节的数据,但最后一次可不足512字节
- 数据报文按序编号,从1开始
- 支持ASCII码或者二进制传送
- 可对文件进行读写
- 使用简单的首部
- 发送完一个文件块后就等待对方的确认, 确认应指明所确认的块编号,发送数据后的规定时间内收不到确认就要重发数据PDU。发送确认PDU的一方,若在规定时间内收不到下一个文件块,也要重发确认PDU,可保证文件的传送不至因某一个数据报的丢失而告失败
- TFTP客户进程发送一个读请求报文或者写请求报文给TFTP服务进程,端口号69,TFTP服务器进程选择一个新的端口和TFTP进程进行通信。若文件的长度恰好为512字节整数倍,则在文件传送完毕后,还必须在最后发送一个含首部而无数据的数据报文,若文件长度不是512字节的整数倍,则最后传送报文中的数据字段一定不满512字节,正好作为文件结束的标志
- 基于TCP的FTP:减少或消除在不同操作系统下处理文件的不兼容性
- 联机访问:允许多个程序同时对一个文件进行存取。由操作系统提供对远地共享文件进行访问的服务,用户可以用远地文件作为输入和输出来运行任何应用程序,操作系统中的文件系统则提供对共享文件的透明存取(将原来用于处理本地文件的应用程序用来处理远地文件时,不需要对应用程序作明显的改动,属于文件共享协议的网络文件系统NFS)
- NFS允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。这样NFS可使用户只复制一个大文件中的很小的片段,把要添加的数据和在文件后面写数据的请求一起发送到远地NFS服务器,NFS服务器更新文件后返回应答信息。在网络上传送的只是少量的修改数据
- 复制整个文件:若要存取一个文件必须先获得一个本地的文件副本。要修改文件,只能对文件副本修改,然后将修改后的文件副本传回到原节点
6.4. 远程终端协议TELNET
- TELNET通过TCP连接注册到远地的另一台主机上,将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连接到远地主机上
- TELNET也使用客户-服务器方式,服务器中的主进程等待新请求,并产生从属进程处理每一个连接
- TELNET能适应许多计算机和操作系统差异,它定义了数据和命令怎么通过因特网。就是所谓的网络虚拟终端NVT。客户软件和服务器软件完成了NVT格式转换为远地和本地系统格式的转换
- TELNET格式定义简单。所有通信使用8位一个字节。在运转时,NVT使用7位ASCII码传送数据,高位置为1用作控制命令。ASCII码,共有95个可打印字符(如字母、数字、标点符号)和33个控制字符 。所有可打印字符在NVT中的意义和在ASCII码中一样。但NVT只使用了ASCII码的控制字符中的几个。NVT还定义了两字符的CR-LF为标准的行结束控制符。当用户键入回车按键时,TELNET客户端把它转换为CR-LF再进行传输,而TELNET要把CR-LF转换为远地机器的行结束符
- TELNET的选项协商使TELNET客户和TELNET服务器可商定使用更多终端功能,协商双方是平等的
6.5. 万维网
- 万维网是一个分布式的超媒体系统,是超文本(包含指向其他文档的链接的文本)系统的扩充。万维网以客户端服务器方式工作,用户主机上运行客户端程序,万维网文档所驻留的主机则运行服务器程序。客户程序向服务器程序发请求,服务器程序向客户程序送回客户所要的万维网文档。在客户端程序主窗口上显示的万维网文档称为页面
- 万维网使用在整个互联网中唯一的统一资源定位符url标志万维网上的各种文档,使用超文本传送协议http。http使用tcp进行可靠传送,使用超文本标记语言html,使得万维网文档在各种主机上显示和查找信息
- URL(Uniform Resource Locator)(统一资源定位符,不区分大小写):<协议>://<主机>:<端口>/<路径> .表示互联网上得到的资源位置和访问这些资源的方法,是与互联网相连的机器上的任何可访问对象的一个指针,互联网上的所有资源都有一个唯一确定的url,资源指在互联网上可以被访问的任何对象,包括文件目录、文件、文档、图像、声音以及与互联网相连的任何形式的数据。资源还包括电子邮件地址和USENET新闻组及其报文。
- http的url默认端口号80:可忽略
6.6. 超文本传送协议http(HyperText Transfer Protocol)
- http的操作过程
- http规定客户端与服务端每次交互,都由一个ASCII码串构成的请求和一个类似通用因特网邮件的扩充,即类MIME的相应组成,HTTP报文通常都用TCP连接传送
- http是面向事务的应用层协议,传送完成超文本跳转所必须的信息,而且传送任何可从互联网上得到的信息
- http是无连接的,虽然使用了TCP连接,但通信双方在交换HTTP报文之前不需要先建立http连接
- http是无状态的,服务器不记得曾经访问过的用户,也不记得为该用户曾经服务过多少次
- 请求一个万维网文档所需的时间是该文档的传输时间加上两倍往返时间RTT(一个RTT用于建立TCP,另一个RTT用于请求和接收万维网文档)。TCP建立连接的三报文握手的第三个报文段中的数据,就是客户对万维网的请求报文
- http1.1使用持续连接:万维网服务器器再发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的http请求报文和响应报文,不局限于传送同一个页面链接的文档,只要是同一个服务器就可以
- http1.1协议的持续连接工作方式
- 非流水线方式:客户端收到前一个响应后才能发出下一个请求。在TCP连接建立后,客户每访问一次对象都要用去一个往返时间RTT、服务器发送完一个对象后,其TCP连接处于空闲状态,浪费了服务器资源
- 流水线方式:客户端收到响应报文前能够接着发送新的请求报文。服务器可以连续发回响应报文,客户访问的所有对象只需花费一个RTT时间。流水线工作方式使TCP连接中的空闲时间减少,提高了效率
- 代理服务器/万维网高速缓存
- 代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求和暂存的请求相同,就返回暂存的响应,而不需要按URL的地址再去互联网访问该资源,代理服务器既是服务器也是客户端
- http的报文结构:http是面向文本的,报文中的每一个字段都是ASCII码串,各字段的长度都是不固定的
- 开始行:用于区分是请求报文还是响应报文,在请求报文中的开始行叫做请求行,响应报文中叫状态行,在开始行的三个字段间都以空格分隔开,CR和LF分别代表回车和换行
- 首部行:说明浏览器、服务器或报文主体的一些信息,在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有回车和换行,首部行结束时,还有一空行将首部行和后面的实体主题分开
- Authorization 身份认证数据
- Connection 设置发送响应之后 TCP 连接是否继续保持的通信选项
- Referer 当通过点击超级链接进入下一个页面时,在这里会记录下上一个页面的 URI
- User-Agent 客户端软件的名称和版本号等相关信息
- Accept 客户端可支持的数据类型(Content-Type),以 MIME 类型来表示
- Accept-Charset 客户端可支持的字符集
- Accept-Encoding 客户端可支持的编码格式(Content-Encoding),一般来说表示数据的压缩格式
- Accept-Language 客户端可支持的语言,汉语为 zh,英语为 en
- Accept-Language 客户端可支持的语言,汉语为 zh,英语为 en
- AcceptLanguage 客户端可支持的语言,汉语为 zh,英语为 en
- If-ModifiedSince 如果希望仅当数据在某个日期之后有更新时才执行请求,可以在这个字段指定希望的日期。用于判断客户端缓存的数据是否已经过期,如果已经过期则获取新的数据
- Allow 表示指定的 URI 支持的方法
- Content-Encoding 当消息体经过压缩等编码处理时,表示其编码格式
- Content-Length 表示消息体的长度
- Content-Type 表示消息体的数据类型,以 MIME 规格定义的数据类型来表示
- Content-Language 表示消息体的语言。汉语为 zh,英语为 en
- 实体主体:请求报文中一般不要,响应报文中也可能没有这个字段。格式由content-type定义
- http请求报文特点
- 请求行:方法、请求资源URL,以及HTTP版本
- OPTION:请求一些选项信息
- GET:请求读出URL所标志的信息(只能发送几百字节的数据,超过用POST提交)
- HEAD 请求读出由URL所标志的信息的首部
- POST:给服务器添加信息
- PUT:指明URL下存储一个文档,不存在则创建
- DELETE 删除指明的URL所标志的资源
- TRACE:将服务器收到的请求行和头部返回给客户端。用于使用代理的环境中检查改写请求的情况。进行环回测试的请求报文
- CONNET:用于代理服务器传输加密消息
- 请求行:方法、请求资源URL,以及HTTP版本
- http响应报文特点
- 状态行:HTTP版本,状态码,以及解释状态码的简单短语
- 1xx表示通知信息(请求的处理进度和情况)的,如请求收到了正在进行处理
- 2xx表示成功了,如接受或知道了
- 3xx表示重定向,如要完成请求还必须采取进一步行动
- 4xx表示客户的差错,如请求中有错误的语法或不能完成
- 5xx表示服务器差错,如服务器失效无法完成请求
- 状态行:HTTP版本,状态码,以及解释状态码的简单短语
- Cookie:http服务器和客户直接传递的状态信息
- 当用户浏览某个使用Cookie的网站时,服务器就为用户产生一个唯一的识别码,并以此作为索引在服务器的后端数据库产生一个项目,接着在给用户的响应报文中添加字段名为"Set-Cookie:xxx"的首部行,值就是赋予用户的"识别码",用户收到响应时,浏览器会在它管理的特定Cookie文件中添加一行,包括这个服务器的主机名和"Set-Cookie"后面给出的识别码。当用户继续访问该网站时,没发出一个http请求,浏览器就从Cookie文件中取出这个网站的识别码,并放到http请求报文的Cookie首部行中"Cookie":xxx
6.7. 动态主机配置协议DHCP(Dynamic Host Configuration Protocol)
- 为了把协议软件做成通用的和便于移植,需要把软件参数化,在协议中给这些参数赋值的动作称为协议配置
- 动态主机配置协议DHCP提供即插即用联网机制,允许一台计算机加入新的网络和获取IP地址而不用手工参与
- 每个网络至少有一个DHCP中继代理(路由器),配置了DHCP服务器的IP地址信息。当DHCP中继收到主机以广播形式发送的发现报文后,就以单播方式向DHCP服务器转发此报文,并等待其回答。收到DHCP服务器回答的提供报文后,DHCP中继代理再把此提供报文发回给主机
- DHCP报文是局域网协议,使用UDP用户数据报数据,DHCP就是自动获得IP地址和自动获得DNS服务器地址的原理,表示自动使用DHCP协议
- DHCP服务器分配给DHCP客户的IP地址是临时的,只能在一段有限时间(租用期)内使用这个分配到的IP地址
- DHCP工作过程
- DHCP服务器被动打开UDP端口67,等待客户端发来的报文
- DHCP客户从UDP端口68发送DHCP发现报文
- 凡收到DHCP发现报文的DHCP服务器发出DHCP提供报文,DHCP客户可能收到多个DHCP提供报文
- DHCP客户从几个DHCP服务器中选择其中一个,并向所选择的DHCP服务器发送DHCP请求报文
- 被选择的DHCP服务器发送确认报文DHCPACK并提供IP地址,从这时起,DHCP客户可以使用这个IP地址,这种状态称为已绑定状态,因为在DHCP的IP地址和硬件地址已经完成绑定,并且可以开始使用得到的临时IP地址。DHCP客户要根据服务器提供的租用期T设置两个计时器T1(0.5T)和T2(0.785T)
- T1时间到, DHCP发送请求报文DHCPREQUEST要求更新租用期
- DHCP服务器若同意,则发回确认报文DHCPACK,DHCP客户得到了新的租用期,重新设置计时器
- DHCP服务器若不同意,则发回否认报文DHCPNACK。DHCP客户必须立即停止使用原来的IP地址,重新申请
- 若DHCP服务器不响应请求报文DHCPREQUEST,T2时间到,DHCP客户必须重新发送请求报文DHCPREUEST,继续后面步骤
- DHCP客户端可以随时提前终止服务器所提供的租用期,这时只需向DHCP服务器发送释放报文DHCPREKEASE即可
6.8. HTTPS协议详解
- HTTP是明文传输的,HTTPS(Secure)是安全的HTTP协议,http(s)😕/<主机>:<端口>/<路径> 443
- 加密模型
- A、B是拥有一定数学关系的一组秘钥
- 私钥 私钥自己使用,不对外公开
- 公钥 公钥给大家使用,对外公开
- 数字证书
- 数字证书是可信任组织颁发给特定对象的认证
- 证书格式、版本号 证书序列号 签名算法 有效期 对象名称 对象公开秘钥
- SSL(Secure Sockets Layer: 安全套接层)
- 数据安全和数据完整
- 对传输层数据进行加密后传输
- 根据随机数1、2、3和相同的算法生成对称秘钥
- 双方使用对称秘钥进行加密通信
- 综合使用对称加密、非对称加密
- 双方分别生成秘钥,没有经过传输