本来不打算为这门课写专门的笔记了,但奈何这门课要考试,我就在这里记一些基础会用到的内容吧。计网的专业术语较多(尤其是英文缩写),需要计算的较少。
相关教材:《计算机网络(第8版)》谢希仁 电子工业出版社
第一章 概述
互联网概述
网络、互连网、互联网(因特网)
- 网络(network):由节点(node)和链路(link)构成。
- 互连网(internet或internetwork):多个网络由路由器连接起来,构成了覆盖范围更大的计算机网络。
- 互联网、因特网(Internet):覆盖全球的数量极大的计算机网络,全世界就一个。
- 主机(host):与网络相连的计算机,请注意:路由器也是计算机,但不能称为主机。
| 互联网(Internet) | 互连网(internet) |
|---|---|
| 遵从TCP/IP标准,覆盖全球 | 不同类型计算机网络互连而成 |
| 专有名词 | 通用名词 |
- ISP(Internet Service Provider):互联网服务提供商(运营商)。在中国有三大ISP,分别为:中国电信、中国联通和中国移动。
- 互联网的RFC(Request For Comments)技术文档:任何人都可以从互联网上下载,也可以通过电子邮件的形式提出对每个文档的意见或建议。
- ISOC:互联网协会,是一个国际性组织,对互联网进行全面的管理。
- IAB:互联网体系结构委员会,负责管理互联网的有关协议的开发。
- IETF:互联网工程部,协议的开发和标准化。
- IRTF:互联网研究部,理论方面的研究,开发一些需要长期考虑的问题。
- 客户-服务器方式(C/S):即Client/Server方式。
- 对等连接(P2P):即peer-to-peer方式。
三种交换方式
- 路由器(router):是实现分组交换的关键构件,是网络核心部分最重要的组成。
- 电路交换(Circuit Switching):电话交换机接通电话线的方式。
- 报文:某消息的整块数据。
- 分组交换(Packet Switching):将报文切割成更小的等长数据段,每个前面加上包头,组成一个包依次发送。
- 报文交换(Message Switching):与分组交换不同的是发送的是整个报文,现在很少使用。
计算机网络的类别
- WAN(Wide Area Network):广域网,有时称为远程网,是互联网的核心部分,任务是长距离运送主机所发送的数据。
- MAN(Metropolitan Area Network):城域网,作用范围是一个城市。
- LAN(Local Area Network):局域网,许多学校和企业拥有许多相连的局域网,称为校园网或企业网。
- PAN(Personal Area Network):个人区域网。
- 接入网(AN):Access Network,称为本地接入网或居民接入网,用户与互联网连接的桥梁。
计算机网络的性能指标
速率
数据的传送速率,单位为比特每秒(bit/s),数据率较高时,可以在前面加上字母。
带宽
某信道能通过的最高数据率,单位和速率相同。
吞吐量
单位时间内通过某个网络的实际数据量。
时延
数据从网络的一端传送到另一端所需要的时间,可以成为延迟和迟延。
- 发送时延:从发送数据帧的第一个比特算起,到该帧最后一个比特发送完毕所需要的时间。
- 传播时延:电磁波在信道中传播一定距离需要花费的时间。
- 处理时延:主机或路由器在收到分组时要花费一定的时间进行处理。
- 排队时延:分组在经过路由器前要先在输入队列中排队等待处理。
时延带宽积
时延带宽积=传播时延\times带宽。
往返时间 RTT
双向交互一次所需的时间。
利用率
- 信道利用率:某信道有百分之几的时间是被利用的。
- 网络利用率:全网络的信道利用率的加权平均。
丢包率
传输过程中丢失的分组数是与总分组数量的比率。
计算机网络体系结构
如今使用最多的体系结构是TCP/IP体系结构。除此之外,还有OSI体系结构。
符合TCP/IP的协议族:用户主机,用于互联的路由器。
一般的路由器只包含网络接口层和网际层。
体系结构中的专业术语
下面介绍计算机网络体系结构中的专业术语:
- 实体:任何可发送或接收信息的硬件或软件进程。
- 协议:控制两个对等实体进行逻辑通信的集合。
- 服务。
TCP/IP的网络结构
网络接口层:并没有规定具体内容,这样做的目的是可以互连全世界各种不同的网络接口,例如:有线的以太网接口,无线局域网的WIFI接口等。
网际层:它的核心协议是IP协议。
运输层:TCP和UDP是这层的两个重要协议。
应用层:这层包含了大量的应用层协议,如 HTTP , DNS 等。
教学时把TCP/IP体系结构的网络接口层分成了物理层和数据链路层
OSI的网络结构
OSI(Open Systems Interconnection)模型是国际标准化组织(ISO)制定的用于计算机网络体系结构的参考模型。该模型将计算机网络通信的过程分解为七个不同的抽象层,每个层都负责特定的功能,这样可以使不同厂商的计算机在网络中进行通信。以下是对每个层的简要介绍:
-
物理层(Physical Layer):这一层负责在物理媒介上传输原始比特流,包括电压、光脉冲等。它定义了数据传输的物理特性,如电压、频率和传输介质。
-
数据链路层(Data Link Layer):负责通过物理连接的方式来传输数据,处理帧(Frame)的传输,错误检测和纠正等功能。它定义了数据的帧结构,以及在通信信道中的访问和管理。
-
网络层(Network Layer):负责在不同网络之间传输数据包,并且处理路由和流量控制。它定义了数据包在网络中的传输和路由。
-
传输层(Transport Layer):负责端到端的通信和数据传输,提供可靠的数据传输服务,处理数据的分段和重组,以及错误检测和纠正。
-
会话层(Session Layer):管理和协调会话(Session)的建立、维护和终止,提供数据交换的机制。
-
表示层(Presentation Layer):处理数据的表示和编码,确保数据的格式和语法正确,以便不同系统之间能够相互理解。
-
应用层(Application Layer):为用户提供应用服务,包括文件传输、电子邮件、远程登录等,是最接近用户的一层。
每一层都为上层提供服务,并利用下层的服务,这种分层结构有利于网络协议的设计、实现和维护。
各个结构的作用
发送方发送
第一步:
- 应用层按照HTTP协议的规定构建一个HTTP请求报文
- 应用层将HTTP请求报文交付给运输层处理
第二步:
- 运输层给HTTP请求报文添加一个TCP首部,使之成为TCP报文段
- TCP报文段的首部格式作用是区分应用进程以及实现可靠传输
- 运输层将TCP报文段交付给网络层处理
第三步:
- 网络层给TCP报文段添加一个IP首部,使之成为IP数据报
- IP数据报的首部格式作用是使IP数据报可以在互联网传输,也就是被路由器转发
- 网络层将IP数据报交付给数据链路层处理
第四步:
- 数据链路层给IP数据报添加一个首部和一个尾部,使之成为帧 (图示右边为首部,左边为尾部)
- 该首部的作用主要是为了让帧能够在一段链路上或一个网络上传输,能够被相应的目的主机接收
- 该尾部的作用是让目的主机检查所接收到的帧是否有误码
- 数据链路层将帧交付给物理层
第五步:
- 物理层先将帧看做是比特流,这里的网络N1假设是以太网,所以物理层还会给该比特流前面添加前导码
- 前导码的作用是为了让目的主机做好接收帧的准备
- 物理层将装有前导码的比特流变换成相应的信号发送给传输媒体
第六步:
- 信号通过传输媒体到达路由器
路由器转发
- 物理层将信号变为比特流,然后去掉前导码后,将其交付给数据链路层
- 数据链路层将帧的首部和尾部去掉后,将其交付给网络层,这实际交付的是IP数据报
- 网络层解析IP数据报的首部,从中提取目的网络地址
- 提取目的网络地址后查找自身路由表。确定转发端口, 以便进行转发
- 网络层将IP数据报交付给数据链路层
- 数据链路层给IP数据报添加一个首部和一个尾部,使之成为帧
- 数据链路层将帧交付给物理层
- 物理层先将帧看成比特流,这里的网络N2假设是以太网,所以物理层还会给该比特流前面添加前导码
- 物理层将装有前导码的比特流变换成相应的信号发送给传输媒体,信号通过传输媒体到达Web服务器
接收方接收
和发送方(主机)发送过程的封装正好是反着来。
在Web 服务器上:
- 物理层将信号变换为比特流,然后去掉前导码后成为帧,交付给数据链路层
- 数据链路层将帧的首部和尾部去掉后成为IP数据报,将其交付给网络层
- 网络层将IP数据报的首部去掉后成为TCP报文段,将其交付给运输层
- 运输层将TCP报文段的首部去掉后成为HTTP请求报文,将其交付给应用层
- 应用层对HTTP请求报文进行解析,然后给主机发回响应报文
第二章 物理层
2.1 物理层的基本概念
计算机网络的物理层是OSI(开放系统互连)模型中的第一层,负责通过物理媒介传输原始的比特流。这一层的主要任务是确保数据能够在各种物理媒介(如电缆、光纤、无线电波等)上进行传输。物理层并不关心传输的内容,它只负责传输数据,并确保数据能够到达目的地。
物理层的协议也被称为物理层规程。
数据在通信链路上的传输一般是串行传输。
2.2 数据通信的基本知识
通信系统的模型
- 源系统:发送端、发送方;
- 传输系统:传输网络;
- 目的系统:接收端、接收方。
信道
信道的信息交互方式分以下三种:
- 单向通信(单工通信)
- 双向交替通信(半双工通信)
- 双向同时通信(全双工通信)
香农公式
香农公式,也称为香农-哈特利定理或者信道容量定理,由克劳德·香农提出,用于确定在给定的物理信道上,信息传输的最大数据速率(信道容量),同时确保传输的信息可以被接收端准确无误地接收。香农公式表达式如下:
其中:
- C 是信道容量,单位是比特每秒(bps);
- B 是信道的带宽,单位是赫兹(Hz);
- S/N 是信号功率与噪声功率的比值,即信噪比(Signal-to-Noise Ratio, SNR),无单位;
- \log_2 表示以2为底的对数。
香农公式表明,信道容量与信道带宽和信噪比有关,带宽越大或信噪比越高,信道的信息传输速率就越大。
带通调制方法
- 调幅(Amplitude Modulation, AM):是一种调制技术,通过改变载波信号的振幅来表示信息,而载波的频率和相位保持不变。
- 调频(Frequency Modulation, FM):是另一种调制方法,它通过改变载波的频率来传输信息,而载波的振幅和相位保持不变。
- 调相(Phase Modulation, PM):这种调制方式通过改变载波的相位来编码信息,载波的振幅和频率保持不变。
为了达到更高的信息传输速率,需要更为复杂的振幅相位混合调制方法,例如正交振幅调制。
正交振幅调制(Quadrature Amplitude Modulation,简称 QAM)是一种调制方法,它结合了调幅(AM)和调相(PM)两种技术,以在相同的频带宽度内提供比单纯的AM或PM更高的数据传输率。
在QAM中,信号的振幅和相位都被改变,这样可以在二维信号空间内创建多个独特的点,每个点被称为一个符号。每个符号可以携带多个比特信息,例如,在64-QAM中,每个符号代表6个比特(因为2^6 = 64)。这是因为有64个独特的振幅和相位的组合,每个组合对应一个特定的6位二进制数。
正交振幅调制的“正交”一词意味着使用两个载波信号进行调制,它们的频率相同但相位相差90度(即一个是正弦波,另一个是余弦波)。这种相位差允许它们在同一频段上同时传输而不会互相干扰,因此可以更有效地利用带宽。
QAM广泛应用于数字电视、调制解调器、无线通信和其他形式的数据通信中。随着所使用的符号数的增加,QAM可以传输更多的数据,但同时也会对信噪比的要求更高,因此对信道质量的要求也更高。
信道极限容量
奈奎斯特准则:用于确定无噪声情况下,一个理想低通(或带通)信道的最大数据传输速率。这个准则说明,在理想的低通信道中,最大的数据传输速率,即奈奎斯特速率,是信道带宽的两倍。这个速率通常用比特每秒(bps)来表示。
奈奎斯特准则的数学表达式为:
其中:
- C 是信道的最大数据传输速率(bps)。
- B 是信道的带宽(Hz)。
- M 是每个符号的离散电平数(例如,在二进制调制中,M=2;在四进制调制中,M=4)。
- \log_2(M) 表示每个符号携带的比特数(比如,如果M=2,则每个符号携带1个比特;如果M=4,则每个符号携带2个比特)。
奈奎斯特准则通常应用于数字信号的处理和传输,特别是在设计和分析通信系统的性能时。它为理想信道条件下的最大数据速率设定了理论上限,而实际应用中由于各种噪声和干扰的存在,实际数据速率通常低于奈奎斯特速率。
信噪比
信噪比(Signal-to-Noise Ratio, SNR)是一个衡量信号强度相对于背景噪声强度的指标,常用于描述通信系统中信号的质量。信噪比的高低直接影响到通信系统的性能,包括数据传输速率和错误率。
信噪比通常用分贝(dB)来表示,计算公式为:
其中 P_{\text{signal}} 是信号功率,P_{\text{noise}} 是噪声功率。
举例来说:
- 如果信号功率是噪声功率的10倍,那么信噪比为10 dB。
- 如果信号功率是噪声功率的100倍,那么信噪比为20 dB。
信噪比越高,表示信号强度越大,或者噪声水平越低,通常意味着传输的质量越好,能够实现更高的数据传输速率和更低的错误率。在数字通信中,信噪比也与可以实现的最大比特错误率(Bit Error Rate, BER)有关,通常信噪比越高,比特错误率越低。
2.3 物理层下面的传输媒体
传输媒体可分为三大类,导引型传输媒体和非导引型传输媒体。
导引型传输媒体
双绞线
双绞线(Twisted Pair Cable)是一种电缆类型,由一对绝缘电线按照一定规则紧密地绕在一起。这种设计最初是为了减少电磁干扰(EMI)和射频干扰(RFI)对电缆的影响,同时也减少了电缆对外界的电磁干扰。
双绞线有两种基本类型:
- 非屏蔽双绞线(Unshielded Twisted Pair, UTP):是最常见的双绞线类型,用于各种通信和网络应用,如以太网。UTP没有额外的屏蔽层,因此更加灵活和易于安装,但对电磁干扰的抵抗能力相对较弱。
- 屏蔽双绞线(Shielded Twisted Pair, STP):在双绞线周围有一层屏蔽材料,通常是金属箔层。这种设计提供了更好的电磁干扰保护,使其适用于环境噪声较大或需要更高数据传输速率的环境。
RJ-45是一种常见的网线接口标准,通常用于以太网网络中连接计算机、路由器、交换机和其他网络设备。RJ-45接口通常用于连接网线,它是一种八针插座,可以容纳八芯网线的连接。RJ-45插座通常用于以太网网络中,支持多种传输速率,包括10Mbps、100Mbps和1Gbps等。
RJ-45插头是一种八针插头,通常使用双绞线电缆(如Cat5、Cat5e、Cat6等)连接到RJ-45插座上。连接时,插头的八根导线按照特定的顺序连接到RJ-45插座的八个引脚上,以确保正确的信号传输。
RJ-45插头和插座通常用于标准的以太网连接,包括家庭网络、办公室网络和数据中心网络等。它们的普及和标准化使得网络设备之间的连接变得简单并且可靠。
RJ-45插头的各线顺序通常遵循T568A或T568B标准。这两种标准定义了八根导线在RJ-45插头中的连接顺序,以确保在以太网网络中正确传输数据。以下是T568B标准下的连接顺序:
- Pin 1 - 白橙色(White/Orange)
- Pin 2 - 橙色(Orange)
- Pin 3 - 白绿色(White/Green)
- Pin 4 - 蓝色(Blue)
- Pin 5 - 白蓝色(White/Blue)
- Pin 6 - 绿色(Green)
- Pin 7 - 白棕色(White/Brown)
- Pin 8 - 棕色(Brown)
这种连接顺序确保了在使用T568B标准的网络中,不同设备上的RJ-45插头可以正确地连接并传输数据。值得注意的是,还有另一种标准T568A,它的线序与T568B有所不同,但在实际应用中,T568B标准更为常见。
同轴电缆
同轴电缆(Coaxial Cable)是一种电缆类型,它由四层构成:中心导体、绝缘材料、金属屏蔽和外层保护套。它的设计使得它能够传输高频信号,同时减少外部电磁干扰和信号损耗。
非导引型传输媒体
非导引型传输媒体,又称为无线传输媒体,是指不通过物理导体(如电缆)传播信号的媒体。无线传输媒体利用电磁波在空气或真空中传播信号。以下是一些常见的非导引型传输媒体:
- 无线电波(Radio Waves):
用于AM和FM广播、电视广播、移动电话、无线网络(如Wi-Fi)和远距离通信。
频率范围从几千赫兹到几百吉赫兹。
- 微波(Microwaves):
用于点对点通信链接、卫星通信和一些无线网络。
频率范围在几百兆赫兹到几十吉赫兹。
有两种类型:地面微波(使用地面塔传输)和卫星微波(通过空间中的卫星传输)。
多径效应(Multipath Propagation)是指无线信号在传播过程中会遇到反射、折射、绕射等现象,导致同一个信号的多个副本通过不同的路径到达接收器。这些不同的路径可能因为路径长度不同而导致信号到达时间的差异,从而在接收端产生信号的相位差异。
微波接力(Microwave Relay)是一种点对点通信方式,它使用高频的微波信号在地面上的一系列微波站之间传递信息。每个微波站都装有一个或多个抛物面天线,用来发送和接收沿直线路径传播的微波。这些站点通常建在高处,例如山顶或高塔上,以保持视线传播(Line of Sight, LOS)。
2.4 信道复用技术
频分复用、时分复用、统计时分复用
频分复用(Frequency Division Multiplexing, FDM)是一种将可用的传输频带宽度分成若干个频率带,每个带宽分配给一个用户或信道的技术。每个信道占据一定的频率范围,并且相邻的信道之间会有一定的频率间隔(称为保护带),以防止相互干扰。这种技术广泛应用于无线电和电视广播中,每个广播站都被分配一个特定的频率带来传输其信号。
时分复用(Time Division Multiplexing, TDM)是将时间分割成多个时隙,每个用户或信道轮流在其分配的时隙内使用整个带宽进行通信的技术。在其分配的时隙内,用户可以发送一段信号,接着轮到下一个用户在下一个时隙发送信号,依此类推。TDM可以确保信道的均等分配,每个用户或信道都可以在其分配的时间内享有全部的信道容量。TDM是数字传输系统(如T1和E1)中的标准技术。
时分多址(TDMA,Time Division Multiple Access)是一种数字传输技术,它属于时分复用(TDM)的一种形式,主要用于多个用户或设备共享相同的通信信道。在TDMA系统中,整个频带被分割成多个时间槽,每个用户在通信过程中被分配到特定的时间槽,在这个时间槽内可以发送和接收信号。
统计时分复用(Statistical Time Division Multiplexing, STDM)是在TDM的基础上发展起来的一种技术,它更加高效地使用时间时隙。在STDM中,并非为每个用户分配固定的时隙,而是根据实际的数据流量需求动态地分配时隙。这意味着如果某个用户没有数据要发送,其时隙可以分配给其他有数据发送需求的用户。这种方法可以更好地利用带宽,因为它基于用户的通信需求分配时间资源,而不是均等分配时间,从而提高了信道的利用率。
波分复用 WDM
波分复用(WDM)是一种在光纤中同时传输多个波长(频率)的光信号的技术。每个波长的光信号相当于在光纤中的一个独立通道,可以承载独立的数据流。WDM通常分为两种类型:
- 粗波分复用(Coarse Wavelength Division Multiplexing, CWDM):在CWDM中,波长之间的间隔较大(通常为20纳米),因此系统的复杂性较低,成本相对较低,但是可用于传输的波长数量有限。
- 密集波分复用(Dense Wavelength Division Multiplexing, DWDM):DWDM是WDM的一种形式,波长之间的间隔更小(0.8纳米、0.4纳米或更小),因此在同一根光纤中可以传输更多的波长。
码分复用 CDM
码分多址(Code Division Multiple Access,CDMA)是一种多址接入方式,它允许多个用户使用相同的频率范围同时进行通信。不同于时分多址(TDMA)和频分多址(FDMA),在CDMA中,每个用户都分配到一个唯一的编码。
码分多址(CDMA)的工作原理是将每个用户的通信信号“扩频”到一个较宽的频带上。这是通过将每个数据位与一个高速的、唯一的伪随机数序列(称为扩频码或码片序列)相乘来实现的。在CDMA中,每个用户都有一个唯一的扩频码,这个码与其他用户的码正交,即它们的交叉相关性很低。
CDMA工作原理示例:
假设我们有两个用户,Alice和Bob,他们想要同时使用相同的频率范围进行通信。在CDMA系统中,Alice和Bob都会被分配一个唯一的伪随机码。
- Alice的码:+1, -1, -1, +1
- Bob的码:+1, +1, -1, -1
现在,Alice想发送比特“1”,而Bob想发送比特“0”。在CDMA中,发送的数据首先会被转换成二进制形式,其中“1”保持为“1”,而“0”会被转换为“-1”。
Alice发送“1”,她的数据与她的码相乘:
Bob发送“0”,他的数据转换为“-1”,然后与他的码相乘:
然后,这两个信号在空气中叠加,形成了一个复合信号。在接收端,为了提取Alice的原始数据,接收器将收到的复合信号与Alice的唯一码相乘。
复合信号(在信道中):
接收器提取Alice的信号:
接下来,接收器将结果相加:
最后,接收器查看结果的符号。如果是正数,那么发送的数据是“1”;如果是负数,那么发送的数据是“-1”,即原始的“0”。在这个例子中,结果是4,所以接收器正确地解码出Alice发送的是“1”。
类似地,为了提取Bob的信号,接收器会用Bob的码对复合信号进行解码。由于CDMA码的正交特性,即使多个用户同时发送数据,接收器也能够区分并提取出每个用户的原始数据。这种方法的优势是提高了频谱的使用效率,同时增加了通信的隐私和安全性。
2.5 数字传输系统
同步数字系列(Synchronous Digital Hierarchy,SDH)是一种标准化的数字通信协议,用于传输大量电话和数据通信。它被设计为能够在光纤网络上工作,并用于电信运营商的长距离通信网络。在北美,相应的标准称为同步光网络(Synchronous Optical Networking,SONET)。
SDH的目的是为了提高数字通信网络的效率,并允许不同网络设备之间的互操作性。SDH使用时间分复用(TDM)技术来组织和同步数据传输,使得多个数字数据流可以在同一物理媒体上共享,而不会互相干扰。
2.6 宽带接入技术
ADSL技术
ADSL(Asymmetric Digital Subscriber Line)非对称用户数字线是一种使用现有的铜质电话线提供高速互联网接入的技术。它被称为“非对称”的,因为其下载速度(从互联网到用户)和上传速度(从用户到互联网)是不对称的,通常下载速度远高于上传速度。
ADSL连接通常涉及以下几个组件:
- ADSL调制解调器(Modem):用户端和ISP端都有调制解调器,用于调制和解调通过电话线传输的信号。
- 分离器(Splitter):在用户家中安装,用于将高频的ADSL信号和低频的电话信号分离,以便同时使用电话和互联网服务。
- 数字用户线接入复用器(DSLAM):位于互联网服务提供商(ISP)的接入点,用于将多个用户的ADSL连接汇集到一个高速互联网连接上。
光纤同轴混合网
光纤同轴混合网(Hybrid Fiber-Coaxial,HFC)是一种广泛用于电视和互联网服务的电信网络架构。它结合了光纤和同轴电缆的技术,利用各自的优势来传输大量数据。HFC网络通常用于有线电视和宽带互联网服务,它们能够提供高速数据传输和大量的视频内容。
HFC网络的工作原理
- 光纤部分:在HFC网络中,光纤从服务提供商的设施(如头端或数据中心)延伸到分配节点。光纤传输能够提供高带宽,低衰减和高速率的数据传输,适合长距离传输。
- 同轴电缆部分:从分配节点到用户家中,通常使用同轴电缆。同轴电缆具有较好的电磁屏蔽性能,能够有效抵抗干扰,但带宽和传输距离相对光纤较低。
- 节点:在光纤和同轴电缆的交接处,存在一个节点,它负责将光信号转换为电信号,或者将电信号转换为光信号。这个过程通常涉及到光电转换器(如光电接收器和电光发射器)。
FTTx技术
FTTx(Fiber to the x)技术是一种光纤通信技术,其中"x"可以代表不同的终端点,例如家庭、建筑物、路边或其他任何地方。FTTx是一种宽带网络架构,使用光纤直接连接中心局和各种端点,以提供高速互联网接入。这种技术能够提供比传统铜线或同轴电缆更高的速度和更可靠的网络连接。
EPON(Ethernet Passive Optical Network)和GPON(Gigabit Passive Optical Network)是两种流行的光纤到户(FTTx)技术,它们都利用了被动光网络(PON)的架构来提供宽带网络服务。EPON和GPON都是利用光纤将高速互联网、电视和电话服务传输到用户家中或办公地点,但它们在技术细节和性能方面有所不同。
EPON
EPON基于以太网技术,它遵循IEEE 802.3标准。EPON使用点对多点(P2MP)的架构,通过一个单一的光纤网络来服务多个用户。EPON的标准传输速率为1 Gbps的对称速度,即上行和下行速度都是1 Gbps。
GPON
GPON是由国际电信联盟(ITU-T)标准化的,遵循ITU-T G.984.x系列标准。GPON相比于EPON提供更高的带宽和更高的效率,它支持不对称的数据传输速率,通常提供高达2.5 Gbps的下行速率和高达1.25 Gbps的上行速率。
第三章 数据链路层
数据链路层使用的信道类型
- 点对点信道:这种信道使用一对一的点对点通信方式。
- 广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道链接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的发送。
3.1 数据链路层的几个共同问题
数据链路层的协议数据单元(PDU)具体称为“帧”(Frame)。帧是数据链路层的主要数据封装单元,它包含了控制信息和用户数据信息。控制信息通常包括帧同步、寻址、错误检测和纠正等功能。
帧的结构通常包括以下几个部分:
- 帧开始和结束标识符:用于标识一个帧的开始和结束,便于接收方识别帧的边界。
- 地址:包含发送者和接收者的地址信息,通常是物理地址,如以太网中的MAC地址。
- 类型或长度字段:指示帧中数据字段的类型或大小。
- 数据负载:即从网络层传下来的包,是需要传输的实际信息。
- 错误检测和校正码(通常是循环冗余检查CRC):用于检测帧在传输过程中是否出现错误。
三个基本问题
- 封装成帧;
封装成帧是指在数据链路层将上层(通常是网络层)传来的数据包装入帧中的过程。这涉及到确定帧的界限,即在一串比特流中标识出帧的开始和结束。为了实现这一点,通常会在帧的开始和结束处加入特殊的比特序列,称为帧定界符。这样,接收设备可以通过寻找这些定界符来确定帧的边界。封装成帧的过程还包括添加必要的控制信息,如校验和、源地址和目标地址等。
最大传输单元 (Maximum Transmission Unit, MTU)指的是网络中任何给定层次上可以传输的最大数据包大小。在数据链路层,MTU是指一个帧能够承载的最大数据量。不同的物理介质和数据链路层协议可能有不同的MTU值。例如,以太网的标准MTU大小是1500字节。如果网络层的数据包超过了数据链路层的MTU,那么这个数据包需要被分片传输,然后在接收端重新组装。 - 透明传输
透明传输是指数据链路层在传输数据时,数据中可以包含任何比特序列,不会被误解为控制信息(如帧定界符)。为了确保数据的透明性,数据链路层采用了特定的编码技术,如字节填充(Byte Stuffing)或比特填充(Bit Stuffing)。例如,在HDLC协议中,如果数据中出现和帧定界符相同的比特模式,就会在这个比特模式中插入一个额外的比特,以防止接收方错误地将这些数据认为是帧定界符。
具体来说,HDLC协议中的比特填充规则如下:起始标志和结束标志:数据帧的开始和结束由特定的标志位来标识,通常是01111110(7个连续的1),这样的序列在数据中是不会出现的,因此可以用来作为数据帧的起始和结束标志。在数据部分中,如果出现了连续的5个1,根据比特填充规则,发送端会自动在第5个1后面插入一个0,而接收端在接收数据时,如果发现连续的5个1后面紧跟一个0,就会自动将这个填充的0删除,从而还原原始的数据。 - 差错检测
差错检测是指在数据链路层检测传输过程中帧是否出现错误的机制。最常用的差错检测方法是循环冗余检测(CRC),它通过对数据帧添加校验序列(CRC码)来实现。发送方在帧中包含这个校验序列,而接收方在收到帧后执行同样的计算,以检测是否有错误发生。如果计算结果不匹配,则说明在传输过程中帧已经损坏。
3.2 点对点协议PPP
高级数据链路控制(High-Level Data Link Control,简称HDLC)是一种广泛使用的数据链路层通信协议,它提供了一种用于同步串行通信的通用框架。现在已经逐渐被PPP取代。点对点协议(Point-to-Point Protocol,简称PPP)是一个用于在两个节点间建立直接连接并传输数据的数据链路层通信协议。它最初设计用于电话线和串行线路上的互联网连接,尤其是用于拨号连接和DSL服务。
PPP满足的需求
封装成帧
PP定义了一个封装机制,用于在一个串行连接上创建帧。PPP帧具有明确的开始和结束标志,使用特殊的字节序列(0x7E)作为帧定界符。
透明性
PPP 使用了一种称为字节填充(byte stuffing)或透明传输的机制,类似于HDLC的比特填充(bit stuffing)机制。在PPP中,这个过程通常涉及以下步骤:
- 帧定界符:PPP帧以一个特殊的字节序列作为帧定界符(通常是0x7E)来标识帧的开始和结束。
- 字节填充:为了保证数据传输的透明性,PPP协议规定如果数据部分出现了与帧定界符相同的字节(0x7E),发送端必须在这个字节之前插入一个转义字符(0x7D),然后将原字节的值进行转换(通常是对字节的值进行异或操作,异或值为0x20)。这样,原始的定界符字节就被转换成了一个不同的字节,避免了与帧定界符冲突。
- 转义字符:同样,如果数据部分出现了与转义字符相同的字节(0x7D),发送端也必须插入一个转义字符,并将原字节进行转换。
- 解码:在接收端,当检测到一个转义字符(0x7D),PPP实现知道下一个字节已被转换。接收端将对该字节进行相反的转换操作(再次异或0x20),恢复原始字节的值。
多种网络层协议
对于每一种网络层协议,PPP都有一个对应的NCP。例如,对于IP协议,PPP使用IP控制协议(IPCP)来配置IP相关的参数,比如IP地址。
差错检测
PPP帧包括一个用于错误检测的帧检验序列(FCS),通常是一个CRC检验,它可以检测帧在传输过程中是否发生了错误。
最大传输单元
点对点协议(PPP)的最大传输单元(MTU)是指在PPP连接上可以传输的最大数据包大小,不包括PPP帧的开销(如帧定界符、地址、控制字段、协议标识和帧检验序列)。PPP的标准MTU大小是1500字节,这与以太网的标准MTU大小相同。
在某些特定的网络环境中,如VPN(虚拟私人网络)或PPPoE(PPP over Ethernet)连接,MTU可能会被设定得更小,以适应额外的封装开销。例如,在PPPoE环境中,MTU通常被设定为1492字节,以适应额外的8字节PPPoE头部。
PPP协议的组成
PPP协议的主要组成部分包括以下两个协议:
- 链路控制协议(Link Control Protocol, LCP):
LCP用于建立、配置、测试和管理数据链路连接。它负责协商链路参数,比如最大接收单元(Maximum Receive Unit, MRU)的大小、认证协议的选择、链路质量监测以及帧的多路复用。
LCP还提供了一种机制,使得两个PPP端点能够学习对方的能力,选择可接受的配置选项,并在链路建立和维护期间对链路进行测试。
通过发送配置请求(Configure-Request)和配置确认(Configure-Ack)等控制报文,LCP可以启动和关闭链路连接。 - 网络控制协议(Network Control Protocol, NCP):
NCP是一组协议的总称,每个网络层协议(如IP、IPX等)都有对应的NCP,用以协商和配置网络层协议特定的选项。
例如,IP网络控制协议(IPCP)是用于配置IP层参数的NCP,它可以协商IP地址、压缩选项等。
NCP确保了PPP能够支持多种网络层协议,并允许每种协议独立地进行配置和操作。
PPP协议的帧格式
各字段的意义
PPP帧包括多个字段,每个字段都有特定的功能和意义。以下是PPP帧的标准格式:
+----------+----------+----------+----------+---------//----------+----------+----------+
| Flag | Address | Control | Protocol | Information | FCS | Flag |
| 8 bits | 8 bits | 8 bits | 8/16 bits | variable | 16/32 bits | 8 bits |
+----------+----------+----------+----------+---------//----------+----------+----------+
各个字段的作用如下:
- Flag(标志位):标志位是一个8位的序列,通常是
0x7E(二进制的01111110)。它标记了帧的开始和结束。由于帧之间可能存在一段时间的间隔,因此标志位也用来区分连续的帧。 - Address(地址):这个字段在标准的PPP实现中并没有使用,一般设置为
0xFF。这是因为PPP是点对点的协议,所以不需要地址信息。 - Control(控制):这个字段也是固定的,通常设置为
0x03,表示无编号帧(Unnumbered Information)。 - Protocol(协议):这个字段指示了载荷(即Information字段)中的数据包属于哪种协议(比如IPv4、IPv6、LCP等)。它可以是8位或16位长,尽管最常见的是16位。
- Information(信息):这个字段包含上层协议的数据。它的长度是可变的,但总长度(包括所有PPP帧字段)通常受到最大传输单元(MTU)的限制。
- FCS(帧检验序列):FCS是一个16位或32位的字段,用于错误检测。它通常是一个CRC(循环冗余检查)值,用于检测帧在传输过程中是否出现了错误。
每个PPP帧以一个标志位开始,紧接着是地址和控制字段,然后是协议字段,接着是实际的数据(如果有的话),然后是FCS,最后以标志位结束。如果信息字段中的数据包含与标志位相同的比特模式,PPP使用一种叫做字节填充(Byte Stuffing)或转义字符(Escape Character)的机制来确保数据传输的透明性。
字节填充
字节填充的工作原理如下:
- 转义字符(Escape Character):PPP定义了一个特殊的转义字符0x7D(称为Control Escape或ESC字符),用于修改紧随其后的字节。
- 转义过程:当数据中出现一个与标志位0x7E相同的字节,或者出现转义字符0x7D本身时,发送端将在该字节前插入一个转义字符0x7D。然后,将原始字节的每个比特与0x20进行异或操作(即,将原始字节的第5位取反)。这种转义方法称为“控制字符转义”(Control Character Stuffing)。
- 如果原始数据中有0x7E(标志位),它会被转换成两个字节:0x7D 0x5E。
- 如果原始数据中有0x7D(转义字符),它会被转换成两个字节:0x7D 0x5D。
- 解除转义:在接收端,当收到一个转义字符0x7D时,它知道要将下一个字节与0x20进行异或操作以恢复原始字节。如果接收到的是0x7D 0x5E,它会被转换回0x7E;如果是0x7D 0x5D,它会被转换回0x7D。
零比特填充
PPP(Point-to-Point Protocol)的另一种确保帧边界的技术是“零比特填充”(Zero Bit Stuffing),它是在高速同步链路上使用的一种替代字节填充的方法,如高级数据链路控制(HDLC)和帧中继。然而,标准的PPP在异步串行链路上使用的是字节填充,不使用零比特填充。为了说明这一点,以下是HDLC和PPP中使用的零比特填充方法:
在HDLC和某些PPP实现中,零比特填充的工作原理如下:
- 标志序列:帧的开始和结束使用一个特定的比特序列,通常是
01111110。 - 填充规则:发送端的数据链路层在数据的比特流中每次遇到连续五个
1时,就自动在这五个1之后插入一个0比特。这样做是为了防止数据中的比特模式与帧边界标志序列混淆。 - 解除填充:接收端在解码比特流时,每当检测到连续五个
1后面跟着一个0时,就会自动删除这个0比特,恢复原始数据流。 - 帧边界:由于数据中不会出现超过五个连续的
1,所以当接收端检测到01111110序列时,它可以确定这是帧的边界。
需要注意的是,在标准的异步串行PPP链路中,通常使用字节填充(也称为字符填充),而不是零比特填充。字节填充涉及到特殊字符的插入(如前面所述的 0x7D转义字符),而不是在比特层面上的操作。零比特填充通常用于同步链路,如HDLC协议,这是因为同步链路可以更容易地处理比特流,而不是字节流。
PPP协议的工作状态
3.3 使用广播信道的数据链路层
局域网的拓扑:星型网、环形网、总线网。
共享信道的解决方法:静态划分信道、动态媒体接入控制。
静态信道划分(Static Channel Division)
静态信道划分方法将信道资源固定分配给网络中的节点,无论节点是否有数据要发送。这些方法包括:
- 频分多址(FDMA, Frequency Division Multiple Access)
- 时分多址(TDMA, Time Division Multiple Access)
- 码分多址(CDMA, Code Division Multiple Access)
- 波分多址(WDM, Wavelength Division Multiplexing)
动态媒体接入控制(Dynamic Media Access Control)
动态媒体接入控制方法允许节点根据网络条件和流量需求动态地占用信道。这些方法更加灵活,可以提高信道的利用率。主要的动态接入控制方法包括:
- 载波侦听多址/碰撞检测(CSMA/CD, Carrier Sense Multiple Access with Collision Detection):
- 载波侦听多址/碰撞避免(CSMA/CA, Carrier Sense Multiple Access with Collision Avoidance):
- 令牌传递(Token Passing):
- 轮询(Polling):
静态方法因为划分明确,管理简单,但在负载不均匀时会造成资源浪费。动态方法更加高效,能够根据实际需求调整资源分配,但需要更复杂的协调机制以避免碰撞和确保服务质量。在实际应用中,这两种方法有时会结合使用,以适应不同的网络需求和条件。
CSMA/CD协议
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)是一种用于局域网(LAN)中的媒体接入控制方法,尤其是在早期的以太网技术中广泛使用。CSMA/CD 使得多个网络设备能够共享同一通信媒介(如同轴电缆或双绞线)进行数据传输,同时能够检测和处理数据传输过程中可能发生的冲突(碰撞)。CSMA/CD只能进行半双工通信。
以太网采取以下两种措施:
- 采用较为灵活的无连接的工作方式。
- 以太网发送的数据搜使用曼彻斯特编码的信号。
CSMA/CD协议的要点
多点接入
CSMA/CD允许多个网络设备使用同一条物理媒介(比如同轴电缆、双绞线或光纤)进行通信。在多点接入环境中,所有设备都必须共享媒体带宽,CSMA/CD 协议规定了设备在发送数据前和发送数据过程中应遵循的一系列规则,以减少数据包的冲突和确保网络通信的有效性。
载波监听
载波监听的主要步骤包括:
- 检测信道状态:
在发送数据之前,设备会检测信道是否空闲。这意味着它会侦听是否有其他设备正在发送信号(即载波)。 - 空闲信道时发送:
如果检测到信道是空闲的,设备会认为是发送数据的合适时机。在这种情况下,设备开始传输数据。 - 忙碌信道时等待:
如果信道忙碌,即设备侦听到其他设备的载波,那么它会等待直到信道变为空闲。在某些情况下,设备可能会使用一个退避算法来决定等待多长时间。
碰撞检测
碰撞检测的工作原理:
- 发送数据:
设备在通过载波监听确定信道空闲后开始发送数据。 - 监测信号:
设备在发送数据的同时,继续监测信道上的电压或信号强度。在正常传输中,设备知道它应该在信道上看到什么样的信号模式。 - 检测异常:
如果设备检测到信道上的电压或信号强度与预期的模式不符,这通常意味着发生了碰撞,因为其他设备也在同时尝试发送数据。 - 发送干扰信号:
一旦检测到碰撞,设备会立即停止发送数据,并发送一个特殊的干扰信号(jam signal),以确保所有设备都意识到发生了碰撞。 - 随机退避:
碰撞后,设备会使用退避算法等待一个随机的时间间隔,然后再次尝试发送数据。这个随机时间间隔有助于减少设备再次发生碰撞的可能性。
截断二进制指数退避算法
截断二进制指数退避算法(Truncated Binary Exponential Backoff)是一种冲突解决机制,用于确定在检测到碰撞后设备应该等待多长时间再次尝试发送数据。这个算法旨在随机化重传的时间间隔,以减少再次发生碰撞的可能性。以下是其工作原理的简要概述:
- 碰撞计数器:
每个设备都维护一个碰撞计数器,该计数器记录了当前数据包尝试发送并发生碰撞的次数。 - 定义退避时间:
退避时间是在0到(2^{\text{碰撞计数器}} - 1)范围内随机选择的时间段乘以一个固定的时间单位,称为时间槽(slot time)。时间槽的长度通常由网络的物理特性决定。 - 退避时间的计算:
设备使用随机数生成器选取上述范围内的一个随机数,并将其乘以时间槽的长度,得到总的退避时间。 - 碰撞计数器的限制:
为了避免无限制增长的退避时间,碰撞计数器的值被限制在一个最大值,通常是10。这意味着退避时间将不会超过(2^{10} - 1)个时间槽。一旦计数器达到这个最大值,即使发生更多的碰撞,退避时间也不会增加。 - 重置计数器:
如果设备在退避后成功发送了数据,碰撞计数器会被重置为0。如果数据包在达到最大重传次数后仍未成功发送,数据包将被丢弃,并且碰撞计数器也会被重置。
集线器Hub
在以太网的早期版本中,集线器(Hub)是一种常见的网络设备,它用于连接多个网络设备,使它们能够在同一个网络段上通信。集线器工作在OSI模型的物理层,简单地说,它接收到从一个端口传入的信号后,会复制该信号并将其广播到所有其他端口。由于这种工作方式,集线器创建了一个单一的碰撞域,其中所有的设备共享同一通信媒介。
在使用集线器的网络中,CSMA/CD(Carrier Sense Multiple Access with Collision Detection)是一种用来管理数据传输和避免冲突的协议。
以太网的信道利用率
定义了参数a = \frac{\tau}{T_0},即单程端到端时延和帧的发送时间之比。
极限信道利用率:
只有当参数a远小于1才能得到尽可能高的极限信道利用率。
以太网的MAC层
在以太网中,MAC(媒体访问控制)地址是网络设备在物理层进行通信时使用的唯一标识符。MAC地址通常是固化在网络接口卡(NIC)上的,它是一个48位长的数字,通常以十六进制形式表示,例如:00:1A:2B:3C:4D:5E。
MAC地址由两个主要部分组成:
- 组织唯一标识符(OUI):前24位由IEEE注册管理局分配给设备制造商,用于标识制造商。每个制造商都有唯一的OUI。
- 扩展唯一标识符(EUI):后24位由制造商分配给其生产的每个网络接口,确保每个设备的MAC地址全球唯一。
以太网中的数据帧可以通过不同的方法发送,主要包括单播、广播和多播。这三种类型的帧根据目的地的不同而使用不同的MAC地址格式:
-
单播帧:
- MAC地址:单播帧的目的MAC地址是网络上某个特定设备的唯一MAC地址。
- 目的:单播帧仅由网络上的一个特定接收者接收。
- 使用场景:大部分网络通信都是单播,例如,一台计算机向另一台计算机发送数据。
-
广播帧:
- MAC地址:广播帧的目的MAC地址是一个特殊的地址,
FF:FF:FF:FF:FF:FF,表示局域网上所有的设备。 - 目的:广播帧被网络上所有设备接收。
- 使用场景:广播通常用于地址解析(如ARP请求)或者当发送者需要与局域网上的所有设备通信时。
- MAC地址:广播帧的目的MAC地址是一个特殊的地址,
-
多播帧:
- MAC地址:多播帧的目的MAC地址是特定的多播组地址,这个地址对应于一组设备,而不是单个设备。多播MAC地址的范围从
01:00:5E:00:00:00到01:00:5E:7F:FF:FF(IPv4多播)或者33:33:xx:xx:xx:xx(IPv6多播),其中xx:xx:xx:xx是从多播IP地址派生出来的。 - 目的:多播帧被属于特定多播组的设备接收。
- 使用场景:多播用于如视频会议和实时数据传输等场景,其中多个接收者需要同时接收相同的数据。
- MAC地址:多播帧的目的MAC地址是特定的多播组地址,这个地址对应于一组设备,而不是单个设备。多播MAC地址的范围从
3.4 拓展的以太网
以太网交换机
以太网交换机(通常简称为交换机)是网络设备,用于连接多个设备,如计算机、打印机、无线接入点等,形成一个局域网(LAN)。与集线器不同,交换机能够智能地处理和转发数据,提供更高效的网络通信方式。
交换机支持全双工通信,即数据可以同时在两个方向上传输,而不会发生冲突。
MAC地址表:交换机使用MAC地址表来记录每个端口连接的设备的MAC地址,以便知道向哪个端口转发数据帧。
以太网交换机的自学习
以太网交换机的自学习功能是其核心特性之一,使得交换机能够动态地学习和存储网络上设备的MAC地址,从而能够智能地决定如何转发数据帧。以下是自学习过程的基本步骤:
-
初始化:
- 当交换机启动时,它的MAC地址表是空的。
-
监听进入的帧:
- 交换机监控所有接收到的以太网帧。
- 对于每个收到的帧,交换机检查源MAC地址和接收帧的端口。
-
更新MAC地址表:
- 如果源MAC地址不在交换机的MAC地址表中,交换机会将这个地址和接收到帧的端口号记录在表中。
- 如果地址已经在表中,交换机会更新记录,确认该设备仍然连接在同一个端口上,或者如果设备移动到了另一个端口,则更新端口号。
-
转发或过滤帧:
- 当交换机需要转发一个帧时,它会查找目的MAC地址在MAC地址表中对应的端口。
- 如果目的地址在表中,并且与接收帧的端口不同,交换机将帧转发到正确的端口。
- 如果目的地址不在表中,交换机则将帧广播到除了接收帧的端口之外的所有端口,因为它不知道目的设备在哪里。
- 如果目的地址在表中,但与接收帧的端口相同,交换机将不会转发帧,因为目的设备就在发送帧的设备同一端口上。
-
地址老化:
- MAC地址表的条目不是永久的;它们会在一定时间后“老化”并从表中删除,如果在这个时间内没有收到来自该MAC地址的新的帧。
- 这种老化机制确保了表的更新,以反映网络上设备的变化,比如设备的移动或替换。
-
生成树协议
- 防止帧的兜圈子情况(广播风暴)。
虚拟局域网VLAN
虚拟局域网(Virtual Local Area Network,VLAN)是一种在一个物理网络设施上创建独立广播域的技术。VLAN 允许网络管理员将一个交换机的端口分组,使得它们处于不同的逻辑分段中,即便物理上它们是连接到同一个交换机上。这样做的主要目的是提高网络的安全性、减少广播流量和更好地管理网络流量。
3.5 高速以太网
高速以太网技术随着时间的推移已经经历了多个发展阶段,以适应不断增长的数据传输需求。以下是一些常见的高速以太网标准:
100BASE-T以太网(Fast Ethernet)
- 速度:100 Mbps(百兆比特每秒)
- 标准:IEEE 802.3u
- 介质:可以使用双绞线(如Cat5、Cat5e、Cat6)和光纤来传输数据。
- 应用:曾经是家庭和小型企业网络的标准。
在“100BASE-T”中,每部分代表了特定的含义:
- 100: 代表了传输速率,即100 Mbps(兆比特每秒)。这表示网络的最大传输速率为每秒100兆比特。
- BASE: 表示基带传输。在基带传输中,整个带宽都被单个信号所占用,而不是通过调制来利用频谱。因此,“BASE”表示数据通过基带传输方式在网络媒体上传输。
- T: 代表双绞线(Twisted Pair)。因此,“100BASE-T”指的是基于双绞线的以太网标准,其传输速率为100 Mbps。
100BASE-T以太网采用CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议来协调多个设备在共享介质上的数据传输。在CSMA/CD中,设备在发送数据之前会先监听信道,如果信道空闲,设备就可以发送数据;如果信道被占用,设备就需要等待一段随机的时间后再次尝试发送。
最短帧长:
在100BASE-T以太网中,最短的数据帧长度是64字节(512比特)。这包括了46字节的数据字段、4字节的帧起始定界符、6字节的目的地址、6字节的源地址以及4字节的CRC校验序列。
退避算法:
当设备在发送数据时检测到信道被占用(即检测到碰撞),它会执行退避算法,这是CSMA/CD的一部分。退避算法的步骤如下:
- 当设备检测到碰撞后,它会立即停止发送,并发送一个48比特的干扰信号来确保所有设备都意识到碰撞的发生。
- 设备会选择一个随机的退避时间,这个时间是以插槽时间为单位的,插槽时间是512比特时间。设备会在0到2^{k-1} 个插槽时间之后再次尝试发送数据,其中 k 是设备在发生碰撞时已经尝试发送的次数。换句话说,设备在第一次碰撞后会随机选择0到1个插槽时间,第二次碰撞后会选择0到3个插槽时间,第三次碰撞后会选择0到7个插槽时间,以此类推。
- 如果设备在等待的退避时间内检测到信道空闲,它就会开始发送数据。如果在退避时间内再次检测到碰撞,设备会继续执行退避算法,选择新的退避时间。
通过这种退避算法,设备在发送数据时会避免在碰撞发生后立即再次发送,从而减少碰撞的概率,提高网络的效率。
吉比特以太网(Gigabit Ethernet)
- 速度:1 Gbps(千兆比特每秒)
- 标准:IEEE 802.3z(光纤)和802.3ab(双绞线)
- 介质:
- 1000BASE-T使用Cat5e或Cat6双绞线。
- 1000BASE-SX和1000BASE-LX使用光纤,分别用于短距离和长距离通信。
- 应用:现在是大多数现代家庭和企业网络的基本标准。
10吉比特以太网(10 Gigabit Ethernet)
- 速度:10 Gbps
- 标准:IEEE 802.3ae
- 介质:
- 10GBASE-T可以使用Cat6a或Cat7双绞线。
- 10GBASE-SR、10GBASE-LR和10GBASE-ER等多种标准使用不同类型的光纤来适应不同的传输距离。
- 应用:用于数据中心、大型企业网络和高带宽应用。
以太网宽带接入互联网
PPPoE(Point-to-Point Protocol over Ethernet)是一种网络协议,它允许通过以太网来模拟点到点连接。这种协议常用于家庭和小型企业用户接入互联网,尤其是通过DSL或光纤到户(FTTH)等宽带连接。PPPoE结合了PPP的功能和以太网的广泛可用性。
第四章 网络层
4.1 网络层的几个概念
网络层提供的两种服务
虚电路服务
虚电路服务是一种网络通信服务,在发送数据之前,需要在发送端和接收端之间建立一个预先定义的路径,这个路径被称为虚电路。一旦建立,所有的数据包都沿着这条虚电路传输。这种服务通常保证了数据包的顺序性和可靠性,因为数据包按照建立的路由顺序传递。典型的虚电路协议包括帧中继和ATM。
数据报服务
数据报服务是另一种网络通信服务,它不要求在数据传输之前建立连接。每个数据包(称为数据报)独立发送,可能通过网络中的不同路径到达目的地。因此,数据报服务不保证数据包的顺序或可靠性,但通常提供更快的数据传输,因为它避免了建立和维护连接的开销。互联网的IP协议就是一个数据报服务的例子。
网络层的两个层面
数据层面,也称为转发平面或数据平面,是网络层中负责处理通过网络设备(如路由器和交换机)传输的数据包的部分。在数据层面,主要操作包括检查收到的数据包的头部信息,决定数据包应该从哪个接口转发出去,以及执行实际的转发动作。这个过程通常是由硬件快速完成的,以确保数据包能够高效地穿过网络。
控制层面,也称为控制平面,是网络层中负责管理和维护网络中的路由协议和策略的部分。它包括生成路由表、处理路由更新、维护网络拓扑信息等功能。控制层面的操作通常涉及到软件处理,并且可能相对较慢,因为它们涉及到复杂的算法和决策过程。控制平面确保数据层面能够根据最新的网络状态信息进行正确的数据包转发。
软件定义网络(Software-Defined Networking, SDN)是一种网络架构,其核心思想是将网络的控制层面(控制平面)与数据层面(数据平面)分离,并通过软件进行集中管理。SDN旨在使网络更加灵活和可编程,以更好地适应不断变化的应用需求和流量模式。
4.2 网际协议IP
IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是用于在网络上进行通信的两个版本的互联网协议(IP)。
配套使用的三个协议:
- 地址解析协议
- 网际控制报文协议
- 网际组管理协议
在TCP/IP体系中,网络层常常被称为网际层。
虚拟互联网络
虚拟互联网络通常指的是通过软件和配置在物理网络基础设施之上创造出的逻辑分隔的网络。这些网络可以是完全隔离的,就像它们在完全独立的物理设备上运行一样。
网络相互连接起来需要一些中间设备,如以下四种:
- 物理层使用的中间设备称为转发器。
- 数据链路层使用的中间设备称为网桥或桥接器,以及交换机。
- 网络层使用的中间设备称为路由器。
- 网络层以上使用的中间设备叫作网关。
互联网由多种异构网络互连组成。分组在传送途中的每一次转发都成为一跳(hop)。
IP地址
整个互联网就是一个单一、抽象的网络。IP地址就是互联网上的每一台设备的接口。IP地址现在由互联网名字和数字分配机构ICANN进行分配。
对于主机和路由器来说,IP地址(IPv4)由32位二进制数构成,通常分为4个8位的字节(称为八位组或octets),每个八位组转换为十进制形式,并通过点(.)分隔开来,形成我们熟知的点分十进制表示法。
IP地址及其表示方法
- 点分十进制表示:每个八位组(字节)表示为0到255之间的数字,例如
192.168.1.1。 - 二进制表示:每个八位组用二进制数表示,例如
11000000.10101000.00000001.00000001。
IPv4地址通常分为两部分:网络部分和主机部分。
- 网络部分:用于标识特定的网络。在一个网络中,所有设备的网络部分都是相同的。
- 主机部分:用于标识网络内的特定设备。在同一个网络中,每个设备的主机部分必须是唯一的。
分类的IP地址
IPv4地址被分为五个类别:A、B、C、D和E类。这些类别可以通过IP地址的第一个八位组(即第一个字节)的前几位来区分。
A类地址:
- 起始位:
0xxxxxxx(二进制格式) - 范围:
1.0.0.0到126.255.255.255 - 示例:
10.23.45.67
B类地址
- 起始位:
10xxxxxx(二进制格式) - 范围:
128.0.0.0到191.255.255.255 - 示例:
172.16.0.1
C类地址
- 起始位:
110xxxxx(二进制格式) - 范围:
192.0.0.0到223.255.255.255 - 示例:
192.168.1.1
D类地址(多播)
- 起始位:
1110xxxx(二进制格式) - 范围:
224.0.0.0到239.255.255.255 - 示例:
224.0.0.1
E类地址(保留用途)
起始位:1111xxxx(二进制格式)
范围:240.0.0.0到255.255.255.254
示例:240.0.0.1
请注意,有些特定的地址在实际应用中有特殊用途,例如127.0.0.1是环回地址,用于指向本机。而整个A类网络中的127.x.x.x都被保留用于环回功能,不会被分配给实际网络。此外,某些地址段被保留用于私有网络(如10.x.x.x, 172.16.x.x到172.31.x.x, 192.168.x.x),不会在互联网上路由。
无分类编址CIDR
无分类域间路由选择(Classless Inter-Domain Routing,CIDR)是一种用于分配IP地址和路由寻址的方法。它在1993年被引入,旨在替代旧的基于类的IP地址分配方法,以此来延缓IPv4地址耗尽的速度,并且使路由更加高效。CIDR允许对IP地址进行更加灵活的划分,不再局限于传统的A类、B类或C类网络。
CIDR使用一种简写形式来表示IP地址和它们的子网掩码,这种形式通常被称为“斜线记法”(slash notation),格式如下:
IP地址/子网掩码位数
这里的子网掩码位数(也称为前缀长度)指的是网络部分的位数。例如,IPv4地址 192.168.1.0 搭配 24位子网掩码可以表示为:
192.168.1.0/24
这表示前24位是网络地址,剩下的8位用于主机地址。这种表示方式等同于使用子网掩码 255.255.255.0。
CIDR的优点包括:
- 更加高效的IP地址分配:通过消除传统的A、B、C类地址限制,CIDR允许地址空间根据需要分配,大大减少了IP地址的浪费。
- 路由聚合(路由汇总):CIDR允许将多个网络合并为一个CIDR块,以减少全球路由表的大小。
- 灵活的子网划分:网络管理员可以根据实际需要划分子网,而不是受限于固定的子网掩码。
例如,一个ISP可能被分配一个如下的CIDR块:
203.0.113.0/24
然后,ISP可以将这个块细分为更小的块,比如分配给客户:
203.0.113.0/25
203.0.113.128/25
或者更小:
203.0.113.0/26
203.0.113.64/26
203.0.113.128/26
203.0.113.192/26
每个更小的块包含更少的IP地址,适用于不同大小的网络。CIDR提高了IP地址的分配效率,并减少了路由表项的数量,从而提高了互联网的可扩展性。
IP地址的特点
IP地址有一些重要的特点,包括但不限于:
-
唯一性:每个设备在网络上都有唯一的IP地址,确保在网络通信中能够准确定位到每个设备。
-
分层结构:IP地址采用分层结构,通常分为网络号和主机号两部分,这种结构有助于在大型网络中进行路由和定位。
-
版本:目前主要有两个版本的IP地址,IPv4和IPv6。IPv4采用32位地址,而IPv6采用128位地址,以应对互联网设备数量的增长。
-
地址分类:IPv4地址根据网络规模的不同分为A、B、C、D、E五类,每类地址范围不同,用于满足不同规模网络的需求。
-
公网和私网地址:IP地址分为公网地址和私网地址。公网地址用于互联网通信,私网地址用于局域网内部通信,可在网络内部重复使用。
-
静态和动态:IP地址可以是静态或动态分配。静态IP地址是固定的,动态IP地址则由网络服务提供商动态分配给设备。
-
子网掩码:用于划分网络和主机部分,帮助确定网络中的主机数量和范围。
-
网络控制:IP地址可以用于网络流量控制、安全策略、路由选择等网络管理功能。
-
地址转换:NAT(Network Address Translation)技术允许多个设备共享单个公网IP地址,这在家庭或企业网络中非常常见。
-
逻辑位置:IP地址不仅仅是设备的物理位置,还可以用于确定设备在网络拓扑结构中的逻辑位置。
IP地址和MAC地址
MAC地址(Media Access Control Address)是网络设备(如计算机、网络适配器、路由器等)网卡上的唯一标识符。它是由网络设备的制造商在生产时分配的,通常以十六进制数表示,由12个字符组成,中间用冒号或破折号分隔。
MAC地址的特点包括:
-
唯一性:每个网络设备的网卡都有唯一的MAC地址,这确保了在局域网内每个设备都有独特的标识符。
-
全球唯一:MAC地址是全球唯一的,这意味着即使在不同的网络中,设备的MAC地址也是唯一的。
-
硬件地址:MAC地址是与网络设备的网卡硬件密切相关的,通常无法被修改。
-
数据链路层标识符:MAC地址是在OSI模型的数据链路层使用的,用于在局域网内寻址和识别设备。
-
不同类型:有两种类型的MAC地址,一种是全球唯一的MAC地址(通常用于以太网设备),另一种是本地管理员分配的本地MAC地址。
地址解析协议ARP
地址解析协议(Address Resolution Protocol,ARP)是一种用于将IP地址转换为对应的MAC地址的通信协议。它在局域网内部使用,通过将IP地址映射到MAC地址,使得数据包能够正确地在局域网内转发。
当设备A需要向设备B发送数据包时,设备A首先会检查自己的ARP缓存表,看是否已经有设备B的IP地址对应的MAC地址。如果ARP缓存表中没有这个映射关系,设备A将执行以下步骤:
-
ARP请求:设备A创建一个ARP请求数据包,其中包含它想要访问的目标设备B的IP地址。设备A将ARP请求广播到局域网内的所有设备,因为此时设备A并不知道设备B的MAC地址,无法直接向设备B发送数据包。
-
ARP响应:设备B收到ARP请求后,会检查请求中的IP地址是否与自己的IP地址匹配。如果匹配,设备B会发送一个ARP响应数据包给设备A。同时也会更新自己的ARP缓存表。ARP响应中包含设备B的MAC地址,这样设备A就能够将设备B的IP地址和MAC地址进行映射。
-
更新ARP缓存:设备A收到设备B的ARP响应后,将更新自己的ARP缓存表,将设备B的IP地址和MAC地址的映射关系存储起来,以便在未来的通信中使用。
-
发送数据包:现在设备A知道了设备B的MAC地址,它可以使用这个地址来封装数据包,并将数据包发送到局域网上,确保它能够准确地到达设备B。
这样,通过ARP协议,设备A成功地获取了设备B的MAC地址,并能够将数据包准确地发送到设备B,实现了局域网内部设备之间的通信。
IP数据报的格式
IP数据报是互联网协议(IP)用于在网络上发送数据的基本单位。它包含了源和目标设备的IP地址以及其他控制信息。IP数据报的格式如下:
-
版本:4位,指示IP协议的版本,通常为4。
-
头部长度:4位,指示IP头部的长度,以32位字为单位,最小值为5,最大值为15。
-
区分服务:8位,用于指示数据报的优先级、服务质量和特定服务要求。
-
总长度:16位,指示整个IP数据报的长度,包括头部和数据部分。
-
标识:16位,用于标识数据报的唯一性。
-
标志:3位,包括标志位和偏移量,用于分片和重组数据报。
-
DF(Don't Fragment):如果DF标志被设置为1,表示数据报不允许被分片。如果路由器或者网络发现数据报长度超过了网络链路的MTU,而DF标志被设置为1,那么它就会丢弃这个数据报并发送一个“ICMP报文太大”错误消息给源主机。这样的设置可以确保数据报不会被分片,但也可能导致数据报无法成功传输。
-
MF(More Fragments):如果MF标志被设置为1,表示还有更多的分片。当数据报需要被分片时,除了最后一个片段外,所有的片段都会将MF位置为1,以指示还有更多的分片。最后一个片段的MF标志会被设置为0,表示这是最后一个片段。
-
-
片偏移:13位,片偏移字段指示了数据报片在原始数据报中的位置,以8字节为单位。它表示了当前片段相对于原始数据报开头的偏移量。这个字段的值会根据数据报的分片情况而改变,以确保接收端能够正确地重组分片后的数据报。
-
生存时间TTL:8位,指示数据报在网络中的最大寿命,通常以跳数(路由器经过的次数)表示。
-
协议:8位,指示数据报携带的上层协议类型,例如TCP、UDP或ICMP。
-
头部校验和:16位,用于检查IP头部在传输过程中是否出现错误。
IPv4数据报的头部检验和(Header Checksum)是一种用于错误检测的简单形式,它用于检查数据报的头部在传输过程中是否发生了变化。如果在传输过程中头部数据发生了变化(比如由于网络噪声),接收端可以通过检验和来检测到这些错误。头部检验和不提供错误纠正功能,只能用于错误检测。
IPv4头部检验和的计算方法如下:
- 将检验和字段(Checksum field)置为0。
- 将整个IPv4头部(不包括任何数据)分为16位(2字节)的段。
- 将所有的16位段进行二进制求和(如果最后一个段不足16位,则在其后补零以形成16位段)。
- 如果求和的结果产生了进位,则将进位加到结果的最低16位上。
- 重复第4步,直到不再产生进位为止。
- 将最终的求和结果进行按位求反(即1变为0,0变为1),得到的结果即为头部检验和。
在接收端,接收方会对整个头部(包括检验和字段)重复上述步骤。如果数据报在传输过程中未发生错误,那么接收端计算的结果应该是全1(即二进制的1111111111111111)。如果结果不是全1,那么接收端会假定在传输过程中发生了错误,并丢弃该数据报。
假设有一个IPv4头部的部分16位字如下(以十六进制表示):
4500
001C
0001
0000
0411
0000(检验和字段)
0A0C
0E05
0C06
0709
这里,第五行0000是原始检验和字段的位置,现在设为0以便计算新的检验和。
步骤1-3:将以上16位字进行二进制求和。
744E
步骤6:将最终的和进行按位求反。
744E
反码
8BB1 (检验和)
因此,计算出的头部检验和为8BB1。这个值会被放到IPv4头部的检验和字段中。
在实际应用中,计算这个检验和通常由发送数据的设备的网络层完成,而检查检验和通常由接收数据的设备完成。如果检验和不匹配,接收设备通常会丢弃该数据报,并可以选择发送一个ICMP错误报文回发送设备。
- 源IP地址:32位,指示数据报的源IP地址。
- 目标IP地址:32位,指示数据报的目标IP地址。
- 选项:可选,用于指定一些特殊的功能,如记录路由、时间戳等。
- 数据:可变长度,包含上层协议的数据,如TCP或UDP数据。
这些字段组合在一起构成了一个完整的IP数据报,它是在互联网上进行数据交换的基本单位。
例子
假设有两台设备,A和B,它们要在网络上相互发送信息。我们来看看在这个过程中IP数据报中哪些位可能会发生改变以及改变的原因。假如说数据部分为3800(1400+1400+1000)字节长,MTU为1420,求分成的切片每个标志位和片偏移字段的值。
设备A的IP地址为 192.168.1.2,设备B的IP地址为 192.168.1.3。
-
设备A向设备B发送第一条信息:
- 设备A创建一个IP数据报,源IP地址为 192.168.1.2,目标IP地址为 192.168.1.3。
- 这个数据报在网络上传输时,可能会经过多个路由器。每经过一个路由器,生存时间字段(TTL)会减少,因为路由器会将其减一再转发。因此,TTL字段会发生改变。
- 另外,如果在传输过程中数据报超过了最大传输单元(MTU),会进行分片,标志位和片偏移字段会发生改变。
- 第一个片段:长度1420字节,MF为1,DF为0,片偏移字段为0。
- 第二个片段:长度1420字节,MF为1,DF为0,片偏移字段为175(数据长度1400/8)
- 第二个片段:长度1420字节,MF为0,DF为0,片偏移字段为350(数据长度1400+1400/8)
-
设备B向设备A发送回复信息:
- 设备B创建一个IP数据报,源IP地址为 192.168.1.3,目标IP地址为 192.168.1.2。
- 同样地,TTL字段会在传输过程中逐渐减少,标志位和片偏移字段会根据需要进行改变。
在这个过程中,TTL字段会因为数据报在网络中的传输而逐渐减少,标志位和片偏移字段可能会因为分片而发生变化。这些变化是为了确保数据报能够在网络中正确传输,并且在目标设备上能够正确地重组成完整的数据。
4.3 IP层转发分组的过程
基于终点的转发
分组在互联网上传递和转发都是基于头部(首部)中的目的地址的转发称为基于终点的转发。
确定目的主机是否在本网络上
源主机向目的主机发送分组时,首先必须确定目的主机是否在本网络上。如果是,则直接交付,不是则交付给路由器,以后的事情都由路由器来处理。
假设有一台源主机A和一台目的主机B,它们都连接到同一个局域网上,并且它们的IP地址和子网掩码如下:
- 源主机A的IP地址:192.168.1.2,子网掩码:255.255.255.0
- 目的主机B的IP地址:192.168.1.3,子网掩码:255.255.255.0
在这个例子中,源主机A希望向目的主机B发送数据报。源主机A首先检查目的主机B的IP地址和自己的IP地址是否在同一个子网中。
由于两台主机的IP地址都是在子网 192.168.1.0/24 内,因此它们在同一个子网中。
转发表(路由表)
转发表(路由表)是网络设备(如路由器、交换机)用来决定数据包应该被发送到哪里的重要组成部分。它的工作原理如下:
-
数据包到达:当网络设备收到一个数据包时,它会检查数据包的目的IP地址。
-
最长前缀匹配:设备会将数据包的目的IP地址与转发表中的条目进行比较,采用最长前缀匹配的原则来确定最匹配的路由条目。这意味着设备会选择与目的IP地址最匹配的路由表条目,其中匹配是通过比较目的IP地址和路由表中的网络地址来实现的。
-
下一跳确定:一旦找到了最匹配的路由表条目,设备会查看该条目中指定的下一跳地址(即下一个设备的IP地址),并将数据包发送到该地址。
-
转发数据包:数据包被发送到下一跳地址,经过一系列路由器或交换机的转发,最终到达目的地。
-
网络地址转换:在数据包传输的过程中,路由器可能会对数据包的源和目的IP地址进行网络地址转换(NAT),以确保数据包能够正确地在不同网络之间传输。
主机路由和默认路由是路由表中的两种重要概念,它们在确定数据包的传输路径时起着关键作用。
主机路由(Host Route)
主机路由是指路由表中指定了特定目的IP地址的路由条目。当主机要发送数据包到另一个主机时,它会在路由表中查找与目的IP地址完全匹配的主机路由条目。主机路由通常用于在直接相连的网络中寻找特定的目的主机。
假设有一台主机A,IP地址为192.168.1.10,要发送数据包到另一台主机B,IP地址为192.168.1.20。在主机A的路由表中,会存在一条主机路由,指定了到达IP地址192.168.1.20的下一跳地址(通常是目标主机B的MAC地址),这样主机A就能直接将数据包发送到主机B,而无需经过路由器。
| 目的地址 | 子网掩码 | 下一跳地址 |
|---|---|---|
| 192.168.1.20 | 255.255.255.255 | 目标主机B的MAC地址 |
默认路由(Default Route)
默认路由是指路由表中的一条特殊路由,它指定了当没有匹配的特定路由条目时数据包应该被发送到的下一跳地址。默认路由通常用于将数据包发送到网络外部,即当目的地不在本地网络中时使用。默认路由的目的是将所有不匹配特定路由的数据包发送到指定的下一跳地址,通常是网络的出口路由器或者因特网服务提供商的网关。
假设一个公司内部网络要连接到因特网,公司内部的所有主机都需要能够访问因特网上的资源。在公司的路由器上会设置一条默认路由,指示所有不属于内部网络的数据包应该被发送到因特网服务提供商(ISP)提供的网关。
| 目的地址 | 子网掩码 | 下一跳地址 |
|---|---|---|
| 0.0.0.0 | 0.0.0.0 | 公司的ISP网关地址 |
4.4 网际控制报文协议ICMP
网际控制报文协议(Internet Control Message Protocol,ICMP)是用于在IP网络上发送控制消息的协议。ICMP消息通常由网络设备(如路由器或主机)生成,用于报告错误情况、诊断问题、或者提供关于网络状况的信息。
ICMP格式
ICMP报文格式如下所示:

- 类型(Type):8位,指示ICMP消息的类型,例如,类型0表示回显应答,类型3表示目的地不可达。
- 代码(Code):8位,提供有关消息类型的更多细节信息。不同的类型可能有不同的代码含义。
- 校验和(Checksum):16位,用于验证ICMP消息的完整性。
- 其他字段:根据消息类型和代码的不同,ICMP消息可能包含其他特定于消息类型的字段。例如,回显请求和回显应答消息包含标识符和序列号字段,用于进行回显测试。
ICMP报文格式的具体内容取决于消息的类型和代码,不同类型的消息可能包含不同的数据字段。上述格式展示了ICMP报文的基本结构,而实际的报文内容会根据具体的ICMP消息类型和代码而有所不同。
ICMP种类
ICMP报文有两种,即ICMP差错报告报文和ICMP询问报文。
当按照类型编号对ICMP差错报告报文和ICMP询问报文进行分类时,可以得到以下表格:
| 类型编号 | 差错报告报文 | 询问报文 |
|---|---|---|
| 0 | 回显应答 (Echo Reply) | |
| 3 | 目的地不可达 (Destination Unreachable) | |
| 4 | 源站选路失败 (Source Quench) | |
| 5 | 重定向 (Redirect) | |
| 8 | 回显请求 (Echo Request) | |
| 11 | 传输期间生存时间为零 (Time Exceeded) | |
| 12 | 参数问题 (Parameter Problem) | |
| 13 | 时间戳请求 (Timestamp Request) | |
| 14 | 时间戳应答 (Timestamp Reply) | |
| 15 | 信息请求 (Information Request) | |
| 16 | 信息应答 (Information Reply) | |
| 17-18 | 保留给安全/保密等特殊用途 | 保留给安全/保密等特殊用途 |
| 30-31 | 保留供实验和测量用途 | 保留供实验和测量用途 |
ICMP应用举例
Ping
Ping(Packet Internet Groper)是一种常用的网络实用工具,用于测试主机之间的连通性。Ping通过发送ICMP回显请求报文到目标主机,并等待目标主机返回ICMP回显应答报文来测试目标主机的可达性和测量往返时间(Round-Trip Time,RTT)。
Traceroute
Traceroute是一种网络诊断工具,用于跟踪数据包从源主机到目的主机的路径。Traceroute通过发送数据包到目的主机,并记录数据包经过的每个路由器(跳数)的IP地址和往返时间,从而帮助确定数据包在网络中的具体传输路径。
4.5 IPv6
IPv6的基本首部
IPv6 相对于 IPv4 有以下几个主要的进步:
-
地址空间:IPv6 使用 128 位地址,相比 IPv4 的 32 位地址空间更大,这意味着 IPv6 可以提供更多的唯一地址,解决了 IPv4 地址枯竭的问题。
-
安全性:IPv6 在设计上考虑了安全性,包括内置 IPsec 支持,这使得数据在传输过程中更加安全,同时也减少了对额外安全层的依赖。
-
自动配置:IPv6 支持自动地址配置,设备可以通过 Router Advertisement 协议自动获取 IPv6 地址,简化了网络配置和管理。
-
流质量(QoS):IPv6 内置了对流质量的支持,这意味着网络可以更好地管理和保障特定类型的流量,如音频、视频等。
-
移动性支持:IPv6 对移动设备的支持更加完善,这使得移动设备在不同网络之间切换更加顺畅。
-
简化的报头:IPv6 报头相对于 IPv4 报头更加简化,这减少了路由器在处理数据包时的工作量,提高了路由效率。
IPv6 数据报的组成如下:
- IPv6 头部:IPv6 头部包含了诸如版本号、流量标签、有效载荷长度、下一个头部等字段。IPv6 头部长度固定为 40 个字节。
IPv6 头部包含了如下字段:
-
版本:4 位,表示协议版本号,对于 IPv6,该字段取值为 6。
-
流量类别:8 位,用于区分不同类型的数据流,包括服务质量(QoS)和流量控制。
-
流标签:20 位,用于对数据流进行标记,以便路由器可以对特定流进行优化处理。
-
有效载荷长度:16 位,表示 IPv6 头部之后的数据的长度,以字节为单位。
-
下一个头部:8 位,表示紧随 IPv6 头部之后的下一个扩展头部或者上层协议(如TCP、UDP)的类型。
-
跳数限制:8 位,类似于 IPv4 中的 TTL(Time to Live),用于限制数据报在网络中的传输跳数,以防止数据报在网络中无限循环。
-
源地址:128 位,表示数据报的源 IPv6 地址。
-
目的地址:128 位,表示数据报的目的 IPv6 地址。
-
扩展头部:IPv6 数据报可以包含零个或多个扩展头部,这些扩展头部用于提供额外的功能,如分片、认证、安全等。常见的扩展头部包括选项头部、路由头部、分段头部等。
-
载荷:IPv6 数据报的载荷部分包含了传输层(如TCP、UDP)的数据。
需要注意的是,扩展头部不是IPv6数据报的基本头部(首部)。
IPv6的地址
IPv6 地址是 Internet 协议版本 6(IPv6)中使用的地址标识符。IPv6 地址的记法、类型和用途如下:
IPv6 地址采用 128 位长度,通常以 8 组 16 进制数表示,每组之间以冒号分隔。例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
IPv6地址的简写规则主要包括以下两个方面:
-
省略前导零:在IPv6地址中,每个16位的字段是用十六进制表示的。在每个字段中,可以省略前导零。例如,
0042可以简写为42,0A05可以简写为A05。这样,2001:0db8:85a3:0000:0000:8a2e:0370:7334可以变成2001:db8:85a3:0:0:8a2e:370:7334。 -
零组压缩:如果一个IPv6地址中有一段连续的零,可以使用双冒号
::来代替这些连续的零。这个压缩可以在地址中使用一次,因为使用两次会产生歧义。例如,2001:db8:85a3:0:0:8a2e:370:7334可以进一步简写为2001:db8:85a3::8a2e:370:7334。如果有多个零组,通常压缩最长的一组。例如,2001:0db8:0000:0000:0000:0000:0000:0001可以压缩成2001:db8::1。
注意,零组压缩只能使用一次,因为如果使用两次,解析器将无法确定每个 :: 代表的零的确切数量。例如,2001:0db8::0001:0000::0317 是非法的,因为不清楚两个 :: 各代表多少个零组。
总结一下,IPv6地址的简写规则可以让地址变得更加紧凑,例如:
原始地址:
2001:0db8:0000:0000:0000:0000:1428:57ab
省略前导零后:
2001:db8:0:0:0:0:1428:57ab
零组压缩后:
2001:db8::1428:57ab
这些规则可以使IPv6地址更加易于阅读和书写。
单播地址
- 全局单播地址:用于全球范围内的通信,类似于 IPv4 的公网地址。
- 链路本地单播地址:用于同一链路上的通信,类似于 IPv4 的私有地址。
多播地址
IPv6 多播地址用于一对多通信,类似于广播地址,但可以更精确地控制数据包的传输范围。
任播地址
IPv6 任播地址用于向一个组内的一台设备发送数据,但不同于多播地址,数据只会传输到该组内的一个设备,通常是最近的设备。
总结
- 单播地址 用于一对一通信。
- 多播地址 用于一对多通信。
- 任播地址 用于一对最近的通信。
这些地址类型的引入使得 IPv6 更加灵活和适应各种网络通信需求。
从IPv4到IPv6过渡
双协议栈
双协议栈是指在同一设备上同时实现 IPv4 和 IPv6 协议栈。这意味着设备可以同时处理 IPv4 和 IPv6 的网络流量。通过双协议栈,设备可以在 IPv4 和 IPv6 网络之间进行无缝切换,从而实现对两种协议的支持。这种方法允许网络逐步过渡到 IPv6,同时保持对现有 IPv4 网络的支持。
隧道技术
隧道技术是一种将一个协议的数据包封装在另一个协议的数据包中传输的方法。在 IPv6 迁移中,隧道技术通常用于在 IPv4 网络上传输 IPv6 数据包,或在 IPv6 网络上传输 IPv4 数据包。这种方法允许在不同类型的网络之间传输数据,从而实现 IPv4 到 IPv6 的互操作性。
ICMPv6
ICMPv6(Internet Control Message Protocol version 6)是用于 IPv6 网络的网络协议,类似于 IPv4 网络中的 ICMP 协议。它主要用于在 IPv6 网络中进行错误报告、网络诊断和邻居发现等功能。
4.6 互联网的路由选择协议
路由选择协议的分类
-
内部网关协议(Interior Gateway Protocols,IGP):这些协议用于在单一自治系统内部进行路由选择,例如用于企业内部网络的协议。RIP、OSPF 和 IS-IS 都属于内部网关协议。自治系统之间的路由选择也叫作域间路由选择。
-
外部网关协议(Exterior Gateway Protocols,EGP):这些协议用于在不同自治系统之间进行路由选择,例如用于连接不同互联网服务提供商之间的协议。BGP(Border Gateway Protocol)是最常见的外部网关协议。自治系统内部的路由选择也叫做域内路由选择。
内部网关协议RIP
RIP(Routing Information Protocol)是一种内部网关协议(IGP),用于在单一自治系统内部进行路由选择。RIP最初是在早期的互联网中使用的,属于距离矢量路由选择协议。
以下是一些关于 RIP 的重要特点和工作原理:
- 特点:
-
基于跳数的路由选择:RIP 使用跳数作为路由选择的度量单位,即每经过一个路由器就增加一跳。这在网络拓扑比较简单的情况下是有效的,但在大型网络中可能会导致收敛速度慢和计数到达最大跳数(15)而无法到达目的地的问题。
-
周期性路由更新:RIP协议中的路由器会周期性地广播其路由表,这可能会导致较大的网络流量和资源消耗。
-
较简单的实现:RIP的实现相对较为简单,适用于小型网络。
- 工作原理:
-
路由更新:路由器会周期性地向相邻的路由器发送路由表信息,通知其他路由器它所知道的网络和距离。
-
路由表的更新和维护:路由器会根据接收到的路由信息更新自己的路由表,选择距离最短的路径作为最佳路径。如果有更短的路径出现,就会更新路由表。
-
毒性逆转:为了防止路由环路,RIP使用了毒性逆转(poison reverse)机制,即当某个路由不可达时,将该路由的距离标记为无穷大(16),并通知其他路由器。
尽管 RIP在简单的网络环境中可能是有效的,但由于其固有的限制,如跳数限制和周期性路由更新,使得在大型、复杂网络中使用时,RIP的效率和性能可能会受到限制。因此,在更大规模的网络中,通常会选择使用其他路由选择协议,如OSPF或BGP。
例子
假如有如下的拓扑:
在这个网络中,A、B、C、D 分别代表四台路由器,括号中的字母代表网络节点,而网络节点之间的连线代表它们之间的连接。数字表示相邻节点之间的距离。
初始时,每台路由器会向相邻的路由器发送自己所知道的网络和距离信息。假设初始时,A 路由器的路由表如下:
| 目的网络 | 下一跳 | 距离 |
|---|---|---|
| B | B | 1 |
| C | C | 1 |
| D | D | 1 |
此时,A 路由器认为到达 B、C、D 三个网络的距离都是 1,而下一跳分别是 B、C、D。
接下来,每台路由器会周期性地向相邻的路由器发送路由表信息。假设 B 路由器收到 A 路由器的路由表信息后,发现到达 C 网络的距离是 2,而自己认为到达 C 网络的距离是不可达。根据 RIP 的距离向量算法,B 路由器会更新自己的路由表,将到达 C 网络的距离更新为 2,并将下一跳设为 A。
| 目的网络 | 下一跳 | 距离 |
|---|---|---|
| A | A | 1 |
| C | A | 2 |
| D | D | 1 |
现在,B 路由器的路由表中到达 C 网络的距离变为 2,下一跳是 A。
这样,通过不断地交换和更新路由表信息,每台路由器都会逐步更新自己的路由表,选择距离最短的路径作为最佳路径。这就是 RIP 协议中距离向量算法的基本工作原理。
这是OpenWrt系统中的路由界面。

优劣
优点:
-
简单易用:RIP的实现相对较为简单,易于部署和管理,特别适用于小型网络。
-
广泛支持:RIP曾经是互联网早期使用最广泛的路由协议之一,因此在一些旧有的网络环境中仍然有一定的应用。
-
兼容性:RIP具有良好的兼容性,可以与许多不同厂商的路由器和网络设备兼容。
缺点:
-
有限的网络规模:RIP的跳数限制(最大跳数为15)限制了其在大型网络中的应用。在复杂、大规模网络中,RIP可能无法提供足够的灵活性和性能。
-
慢速收敛:由于RIP采用周期性路由更新,并且缺乏快速收敛的机制,当网络拓扑发生变化时,RIP可能需要较长的时间来适应变化,从而影响网络的收敛速度。
-
较高的网络开销:RIP协议中的路由器会周期性地广播其路由表,这可能会导致较大的网络流量和资源消耗。
-
不支持VLSM:RIP不支持可变长度子网掩码(VLSM),这意味着在使用RIP时,所有子网必须使用相同的子网掩码,这在现代网络中可能会受到限制。
-
安全性较差:RIP在安全性方面较为薄弱,缺乏对路由信息的验证和加密机制,容易受到路由欺骗等攻击。
内部网关协议OSPF
OSPF(Open Shortest Path First)是一种内部网关协议(IGP),用于在单个自治系统(AS)内部分发路由信息。OSPF是一个链路状态路由协议,它使用洪泛算法来建立和更新路由表。OSPF的主要特点如下:
-
Dijkstra算法:OSPF使用Dijkstra的最短路径优先(SPF)算法来计算到达网络中每个目的地的最短路径。
-
区域(Areas):为了扩展性和管理,OSPF允许将大型网络划分为多个区域。每个区域都运行自己的OSPF实例,并且在区域之间交换摘要信息。有一个特殊的区域称为主干区域(Area 0),所有其他区域都必须直接或间接与主干区域连接。
-
成本(Cost):OSPF使用成本作为度量,来确定发送数据包的最佳路径。成本通常是基于链路带宽来计算的,带宽越高,成本越低。
-
等价多路径(ECMP):如果有多条成本相同的最佳路径,OSPF允许等价多路径路由,即可以将流量分配到多条路径上,这称为负载均衡。
-
快速收敛:当网络拓扑发生变化时,OSPF能够快速重新计算路由,以保持路由表的最新状态。
-
鉴权:OSPF支持路由更新信息的鉴权,可以使用简单密码或消息摘要(如MD5)来验证路由信息的来源,增加网络的安全性。
OSPF的五种分组类型
OSPF协议定义了五种基本的OSPF分组类型,用于在路由器之间交换信息。这些分组类型是:
-
Hello分组:
- 用于发现和维护邻居关系。
- 每个路由器定期发送Hello分组到其直连网络上所有OSPF路由器的多播地址。
- Hello分组包含路由器的ID、活动时间参数以及邻居列表。
-
数据库描述(DBD)分组:
- 用于在邻居路由器之间交换链路状态数据库的摘要信息。
- 当两个路由器决定成为邻居并开始同步它们的数据库时,它们会交换DBD分组。
- DBD分组帮助路由器确定需要请求哪些完整的链路状态通告(LSA)。
-
链路状态请求(LSR)分组:
- 当路由器在数据库描述交换过程中发现它缺少某些信息,或者信息不是最新的时,它会发送LSR分组。
- LSR分组用来从邻居路由器请求一个或多个完整的链路状态通告。
-
链路状态更新(LSU)分组:
- 用于响应LSR分组,发送包含一个或多个LSA的分组。
- LSU分组携带链路状态信息,这些信息用于更新和维护整个自治系统的链路状态数据库。
-
链路状态确认(LSAck)分组:
- 用于确认接收到的LSU分组。
- 当一个LSU分组被接收后,路由器会发送LSAck分组来确认收到的LSA。
这些分组类型是OSPF协议运行的基础,使得路由器能够发现邻居、交换路由信息、维护数据库的一致性,并确保网络中的所有路由器都有完整且最新的网络拓扑信息。通过这种方式,OSPF可以计算出到达网络中每个目的地的最短路径。
外部网关协议BGP
BGP(Border Gateway Protocol)是一种用于在互联网中交换路由信息的协议。它是一种路径矢量协议,用于在不同的自治系统(AS)之间交换路由信息。BGP被广泛用于互联网核心路由器之间的路由选择。BGP的主要作用是在不同的自治系统之间交换网络可达性信息,以便确定最佳的路径。
BGP的特点包括:
- 可靠性:BGP具有高度的可靠性,能够确保路由信息的稳定传输。
- 灵活性:BGP具有灵活的路由策略配置,可以实现复杂的路由控制和策略实施。
- 可扩展性:BGP设计用于处理大规模网络的路由信息交换,具有良好的可扩展性。
- 安全性:BGP支持各种安全机制,用于确保路由信息的安全性和可信度。
两种路由器
在BGP(Border Gateway Protocol)中,有两种不同类型的路由器,分别是内部网关协议(IGP)路由器和外部网关协议(EGP)路由器。
-
内部网关协议(内部)路由器:
- 这些路由器用于在同一自治系统(AS)内部交换路由信息。
- 通常使用诸如OSPF(开放最短路径优先)或者RIP(路由信息协议)等内部网关协议来实现路由选择。
- 这些路由器负责在自治系统内部传递和维护路由信息,以便实现内部网络的连接和通信。
-
外部网关协议(边界)路由器:
- 这些路由器用于在不同自治系统之间交换路由信息。
- BGP是一种典型的外部网关协议,它用于在不同自治系统之间交换路由信息,决定数据包从一个自治系统到另一个自治系统的最佳路径。
- 外部网关协议路由器负责连接不同自治系统之间的路由器,以实现跨自治系统的路由信息交换和数据包传输。
三种自治系统AS
在互联网中,有三种不同类型的自治系统(AS):
-
末端自治系统(Stub AS,也称为末梢AS):
- 末端自治系统是指那些只与一个或多个上游自治系统相连,但没有向下游自治系统转发流量的自治系统。它们通常是终端用户或者小型组织的网络,只连接到一个或少数几个上游网络,主要用于接收流量而不会向其他网络转发流量。
-
穿越自治系统(Transit AS):
- 穿越自治系统是指那些既可以接收来自其他自治系统的流量,又可以向其他自治系统转发流量的自治系统。这些自治系统通常是大型的互联网服务提供商或者互联网交换点(IXP),它们在互联网中扮演着关键的角色,帮助不同的自治系统相互连通。
-
对等自治系统(Peer AS):
- 对等自治系统是指彼此直接相连,并且彼此同等地交换流量的自治系统。这种连接通常是通过互联网交换点(IXP)或者直接的私有连接实现的。对等自治系统之间通常有互相协商的路由策略,以便优化数据流量的传输。
四种报文
BGP(Border Gateway Protocol)使用不同类型的报文来在自治系统之间交换路由信息。这些报文包括:
-
开启报文(Open Message):
- 开启报文是在建立BGP邻居关系时发送的第一个报文。它包含了发送者的BGP版本号、自治系统号以及BGP会话所使用的参数,如持续时间、保持时间等。
-
更新报文(Update Message):
- 更新报文是最常用的BGP报文之一,用于传输路由信息。它包含了可达NLRI(Network Layer Reachability Information)以及它们的属性。通过这些报文,BGP路由器可以通知相邻路由器关于可达路由的变化。
-
通知报文(Notification Message):
- 通知报文用于在BGP会话出现问题时通知对端路由器。它可以包含各种错误信息,如连接重置、不支持的参数等。当BGP会话出现问题时,路由器会发送通知报文来终止该会话。
-
保持存活报文(Keepalive Message):
- 保持存活报文用于维持BGP邻居关系的活跃状态。它是作为心跳包来发送的,用于确认BGP邻居的存活状态。如果在一定时间内没有收到保持存活报文,BGP路由器将会终止与邻居的连接。
这些报文构成了BGP协议中的基本通信机制,通过它们,不同自治系统的BGP路由器可以交换路由信息,并维护互联网的路由表。
路由器的组成
路由器是计算机网络中的关键设备,用于在不同网络之间传输数据包。它主要由两个主要部分组成:路由选择(Routing)和分组转发(Packet Forwarding)。
-
路由选择(Routing):
- 路由选择是指决定数据包从源地址到目的地址的最佳路径的过程。这包括确定数据包应该通过网络中的哪些路径传输以达到目的地。路由选择的过程通常包括路由协议的运行,例如BGP、OSPF、EIGRP等,这些协议用于交换路由信息并计算最佳路径。
-
分组转发(Packet Forwarding):
- 分组转发是指根据路由选择的结果,将数据包从输入端口转发到正确的输出端口的过程。一旦路由表被构建,分组转发就是根据路由表中的信息实际地将数据包从一个接口转发到另一个接口。这通常涉及查找目的地址的最佳匹配,并且将数据包发送到正确的输出端口。
这两个组成部分相互配合,使得路由器能够在网络中正确地转发数据包。路由选择确保数据包按照最佳路径传输,而分组转发确保数据包按照路由选择的结果被正确地发送到目的地。
4.7 IP多播
基本概念
IP多播是一种网络通信模式,用于一对多或多对多的通信。它允许一个发送者将数据包发送到一个特定的IP多播组地址,然后所有订阅该组的主机都能接收到这些数据包。IP多播使用单个发送操作来传输数据,但可以同时到达多个接收者。
在IP多播中,发送者使用特定的IP多播组地址来发送数据,而接收者则通过加入特定的IP多播组地址来表明它们希望接收来自该组的数据。路由器在网络中负责将IP多播数据包从发送者传输到订阅者。
IP多播有助于减少网络流量,因为它允许数据只被发送一次,而不是为每个接收者单独发送。这在视频会议、流媒体传输等应用中特别有用,因为它可以有效地将数据传输到多个接收者,而不会产生大量的冗余数据传输。
在IPv4中,IP多播地址范围是224.0.0.0到239.255.255.255。在IPv6中,IP多播地址则是以ff开头的地址。
IP多播的实现需要支持IP多播的网络设备和协议,同时也需要应用程序能够使用IP多播套接字来发送和接收多播数据包。
网际组管理协议 IGMP
网际组管理协议(Internet Group Management Protocol,IGMP)是用于在IP多播环境中管理主机和路由器之间通信的协议。它允许主机向附近的路由器报告它们对特定IP多播组的兴趣,并且允许路由器知道哪些主机对哪些多播组感兴趣。
多播路由选择协议
多播路由选择协议是用于在网络中传输多播数据包的路由选择协议。它们负责确定多播数据包的传输路径,以便这些数据包可以有效地从发送者传送到所有对应的接收者。
以下是几种常见的多播路由选择协议:
-
DVMRP(Distance Vector Multicast Routing Protocol):DVMRP是早期用于IPv4多播的协议,它基于距离矢量路由选择算法。它使用了类似RIP(Routing Information Protocol)的技术,但专门用于多播路由选择。
-
PIM(Protocol Independent Multicast):PIM是一个灵活的多播路由选择协议,它与底层的单播路由选择协议无关,因此称为"协议无关多播"。PIM包括两种模式:PIM-DM(Dense Mode)和PIM-SM(Sparse Mode),分别适用于密集模式和稀疏模式的多播传输。
-
MOSPF(Multicast Open Shortest Path First):MOSPF是建立在OSPF(Open Shortest Path First)协议之上的多播扩展,用于IPv4网络。它利用了OSPF的路由选择算法来支持多播数据包的传输。
-
MBGP(Multiprotocol BGP):MBGP是BGP的扩展,用于在多协议环境中支持多播路由选择。它允许BGP路由器交换多播路由信息,从而实现多播数据包的传输。
这些协议在不同的网络环境中有不同的应用,选择合适的多播路由选择协议取决于网络的特定需求和拓扑结构。
4.8 虚拟专用网VPN和网络地址转换NAT
虚拟专用网VPN
虚拟专用网(Virtual Private Network,VPN)是一种通过公共网络(如互联网)建立私密通信通道的技术。VPN技术通过加密和隧道协议,使得两个通信节点之间的通信在公共网络上就好像是在一个专用网络上进行的一样,从而实现安全、私密的通信。
下面是VPN的一些关键特点和工作原理:
-
加密通信:VPN使用加密技术对数据进行加密,以确保数据在传输过程中不会被未经授权的人员窃取或篡改。常见的加密协议包括IPsec(Internet Protocol Security)、SSL/TLS(Secure Sockets Layer/Transport Layer Security)和OpenVPN。
-
隧道协议:VPN通过隧道协议在公共网络上创建一条安全的通信隧道,将数据安全地传输到目的地。这种隧道技术可以确保数据在传输过程中不会被公共网络上的其他用户所窥视。
-
远程访问和站点到站点连接:VPN可以用于远程访问,允许远程用户通过公共网络安全地访问私有网络资源。另外,VPN还可以用于连接不同地理位置的局域网,形成站点到站点的安全连接。
-
身份验证和访问控制:VPN通常会要求用户进行身份验证,以确保只有授权用户可以访问私有网络资源。这可以通过用户名密码、数字证书等方式进行。
-
匿名性:VPN可以隐藏用户的真实IP地址,使用户在互联网上的活动更为匿名。
-
支持多种协议:VPN可以支持多种网络协议,包括IP、IPv6、PPP等,使得不同类型的网络都能够通过VPN进行安全连接。
VPN的应用非常广泛,包括企业内部通信、远程办公、跨地域网络连接、绕过地理位置限制的访问等。通过VPN,用户可以在互联网上安全地传输敏感数据,并且可以访问受限制的内容而不受地理位置的限制。
网络地址转换NAT
网络地址转换(Network Address Translation,NAT)是一种常见的网络技术,用于将私有网络内部的IP地址转换为公共网络可识别的IP地址,以实现内部网络与外部网络的通信。NAT通常用于家庭网络、企业网络和互联网服务提供商(ISP)等场景中。
以下是NAT的一些关键概念和工作原理:
-
内部地址和外部地址:在一个私有网络中,通常使用的是私有IP地址,例如IPv4的地址范围为10.0.0.0至10.255.255.255、172.16.0.0至172.31.255.255和192.168.0.0至192.168.255.255。这些私有IP地址在公共互联网中无法直接路由。NAT通过将内部私有IP地址映射为外部公共IP地址,使得内部网络可以与外部网络进行通信。
-
NAT表:NAT路由器维护着一个NAT表,记录了内部IP地址和端口与外部IP地址和端口之间的映射关系。当内部网络的计算机向外部发送数据包时,NAT路由器会根据NAT表对数据包进行地址转换。
-
地址转换类型:
- 静态NAT:将内部私有IP地址映射为固定的外部公共IP地址,通常用于提供对内部服务器的访问(比如Web服务器、邮件服务器)。
- 动态NAT:将内部私有IP地址映射为动态分配的外部公共IP地址,以便内部网络中的多台计算机共享少量公共IP地址。
- PAT(端口地址转换):也称为NAPT(Network Address Port Translation),通过使用不同的端口号来支持多个内部主机共享单个公共IP地址。
假设你有一个家庭网络,其中有多台设备,比如笔记本电脑、智能手机和智能家居设备,它们都连接到了同一个路由器上。这个路由器连接到了你的互联网服务提供商(ISP)的网络,并且从ISP那里分配了一个公共IP地址。
在这种情况下,路由器会使用NAT来管理内部网络设备与外部网络(互联网)之间的通信。以下是一个简化的NAT示例:
-
内部网络设备:笔记本电脑(内部IP地址:192.168.0.2)、智能手机(内部IP地址:192.168.0.3)、智能家居设备(内部IP地址:192.168.0.4)。
-
外部网络:互联网,由ISP提供连接。
-
NAT表:路由器维护着一个NAT表,用于跟踪内部设备与外部网络之间的通信。
-
地址转换:当笔记本电脑(192.168.0.2)尝试访问互联网上的某个网站时,数据包会首先发送到路由器。路由器会将数据包的源IP地址从内部IP地址(192.168.0.2)转换为路由器的公共IP地址(例如,203.0.113.5),然后将数据包发送到互联网上的目标网站。当目标网站返回数据时,路由器会根据NAT表将数据包的目标IP地址从公共IP地址转换为内部IP地址,并将数据包发送到笔记本电脑。
这样,通过NAT,内部网络中的设备可以共享路由器的公共IP地址访问互联网,而外部网络无法直接访问内部网络中的设备。
-
NAT的优点:
- 节省IP地址:NAT允许多个内部设备共享少量公共IP地址,从而节省了公共IP地址的使用。
- 安全性:NAT在一定程度上提供了一层安全保护,因为内部网络的具体拓扑结构对外部不可见。
-
NAT的局限性:
- 限制了对内部网络的直接访问:由于内部网络的IP地址被隐藏起来,外部网络通常无法直接访问内部网络的设备,除非进行特定的端口映射或配置DMZ(Demilitarized Zone)。
- 可能引起应用层问题:一些应用程序可能会受到NAT的影响,特别是涉及IP地址信息的应用。
4.9 多协议标签交换MPLS
多协议标签交换(MPLS)是一种在高速网络中传输数据的机制,它在标准的IP路由之上操作。MPLS使得数据包可以通过短路径标签而不是复杂的网络地址来转发,从而提高了网络效率和性能。MPLS是一种介于第二层(数据链路层)和第三层(网络层)之间的技术,有时也被称为2.5层。
MPLS的工作原理
MPLS工作在OSI模型的数据链路层和网络层之间,它使用短的、固定长度的标签来告诉网络中的路由器(在MPLS术语中称为标签交换路由器,或LSR)如何转发数据包。
-
标签分配:在MPLS网络中,当一个数据包进入网络时,第一个路由器(称为入口LSR或标签边界路由器,LBR)将根据数据包的目的地和服务质量要求,给数据包分配一个标签。
-
标签交换:数据包随后通过网络传输,每个经过的LSR都会根据其内部的转发表来交换标签,并将数据包转发到下一个路由器。这个过程称为标签交换。
-
标签去除:当数据包到达它的最终目的地或离开MPLS网络时,出口路由器(标签边界路由器)会去除标签,并将原始数据包发送到目的地。
MPLS的特点
- 灵活性:MPLS不依赖于特定的数据传输服务,如帧中继或ATM,因此可以在各种物理网络上实现。
- 性能:MPLS可以减少网络延迟,因为每个路由器不需要进行复杂的地址查找,只需查看附加的标签即可。
- 可扩展性:MPLS能够支持不同的服务质量(QoS),为数据流量提供不同优先级。
- VPN支持:MPLS可以用于创建虚拟私人网络(VPN),提供安全和隔离的网络环境。
MPLS的应用
- VPN服务:企业可以利用MPLS来创建跨越广域网的安全、可靠的VPN。
- 流量工程:网络管理员可以使用MPLS来控制数据包在网络中的路径,优化网络资源的使用。
- 服务质量(QoS):MPLS可以确保特定类型的流量(如视频或语音)获得所需的带宽和延迟特性。
- 避免拥塞:MPLS可以通过将流量引导至网络中负载较轻的路径来避免或减少拥塞。
MPLS是一个成熟的技术,被广泛用于现代高速网络中,尤其是在服务提供商和大型企业网络中,它有助于提高网络的效率、可靠性和灵活性。
4.10 软件定义网络SDN简介
软件定义网络(Software Defined Networking,SDN)是一种新兴的网络架构,其核心思想是将网络的控制层(或控制平面)从数据层(或数据平面)中分离出来,使得网络控制变得更加集中化和灵活。SDN旨在通过软件编程来改善网络资源管理和优化网络服务,从而提高网络的整体性能和管理效率。
SDN的关键概念
-
控制层与数据层分离:在传统网络中,每个网络设备(如交换机和路由器)都有自己的控制逻辑和转发逻辑。SDN通过将控制逻辑(控制平面)从物理设备中分离出来,并集中到一个或多个SDN控制器中,实现了网络控制的集中化。
-
SDN控制器:SDN控制器是SDN架构的核心,它是一个运行软件的服务器,负责接收来自网络应用程序的策略和需求,并将这些策略翻译为网络流量的低级路由和转发规则。控制器与网络设备之间通常通过开放的北向接口(Northbound APIs)和南向接口(Southbound APIs)进行通信。
-
南向接口:南向接口(如OpenFlow)定义了控制器与网络设备之间的通信协议,使得控制器可以下发路由决策、配置网络设备、获取网络状态等。
-
北向接口:北向接口允许控制器与高层的网络应用和服务进行通信,这些应用可以是负载均衡、网络虚拟化、安全应用等。
SDN的优势
- 集中管理:SDN提供了集中控制网络的能力,简化了网络配置和管理。
- 动态调整:网络管理员可以快速响应业务需求的变化,动态地调整网络资源和流量。
- 编程自动化:SDN支持通过编程自动化网络配置和管理,提高了操作效率和准确性。
- 创新和灵活性:开放的APIs促进了创新,使得第三方可以开发新的网络应用和服务。
- 网络虚拟化:SDN支持更加灵活的网络虚拟化,可以更容易地创建和管理虚拟网络。
SDN的应用
- 数据中心网络:SDN可以优化数据中心内部的网络流量,提高数据中心的运行效率。
- 云服务:SDN使得云服务提供商能够更好地管理和调配网络资源,提供更为灵活的云服务。
- 企业网络:企业可以利用SDN简化网络架构,提高网络管理的灵活性和效率。
- 网络功能虚拟化(NFV):SDN常与NFV结合使用,将网络功能如防火墙、负载均衡等软件化,以提供更为灵活的服务部署。
SDN正在逐步改变网络行业,它通过软件化的方式让网络的设计、部署和管理变得更加灵活和智能。随着技术的成熟和发展,SDN有望在未来的网络环境中扮演更加重要的角色。
第五章 运输层
5.1 运输层协议概述
运输层简介
网络中的运输层(Transport Layer),在OSI模型中位于第四层,它位于应用层和网络层之间,主要负责在网络中的两个终端(通常是计算机)之间提供可靠的数据传输服务。运输层确保数据能够完整、准确地从源传输到目的地,即便下层的网络层可能不提供这样的保证。
运输层的关键功能包括:
-
分段和重组:将应用层传下来的数据分段,并在目的地重组这些分段。
-
连接控制:有的运输层协议是面向连接的(如TCP),需要在数据传输前建立连接,在传输结束后释放连接;而有的则是无连接的(如UDP),不需要建立连接。
-
可靠传输:面向连接的运输层协议通常会提供可靠传输服务,确保数据正确无误地到达对方,并进行错误校正。
-
流量控制:控制数据传输的速率,防止快速发送端压垮慢速接收端。
-
拥塞控制:防止过多的数据注入到网络中,导致网络拥塞。
-
多路复用和解复用:在发送端,多个不同的应用层会话可以被复用到同一个运输层会话中;在接收端,数据被解复用到对应的应用层会话。
-
端到端通信:运输层提供端到端的通信,而不是网络层的主机到主机的通信。
运输层最常见的两个协议是传输控制协议(TCP)和用户数据报协议(UDP):
-
TCP(Transmission Control Protocol)是一种面向连接的协议,提供可靠的数据传输服务。它通过序列号、确认应答、重传机制、流量控制和拥塞控制来确保数据的完整性和稳定性。
-
UDP(User Datagram Protocol)是一种无连接的协议,它提供较少的错误恢复服务,适用于对实时性要求高的应用,如视频会议和在线游戏。UDP不保证数据包的顺序或可靠性,但其开销小,延迟低。
在实际应用中,根据具体的应用需求和网络环境,会选择不同的运输层协议来传输数据。
运输层端口
运输层的端口是网络世界中的一个抽象概念,用于区分主机上的不同服务或进程。当互联网上的计算机通信时,端口确保数据包能够被送往正确的应用程序。每个使用TCP或UDP协议的数据包都有两个端口号:源端口和目的端口。
端口有以下特点:
-
数字标识:端口由数字表示,范围从0到65535。其中,0到1023是“知名端口”(Well-Known Ports),通常被系统或特定的应用程序使用;1024到49151是“注册端口”,由IANA分配给用户和公司;49152到65535是“动态”或“私有端口”,可由任意应用程序使用。
-
协议相关:端口号与使用的协议(如TCP或UDP)一起,定义了数据包的目的地。例如,一个应用程序可以同时使用TCP和UDP协议的同一个端口号,这两个是独立的。
-
服务映射:某些标准端口号通常与特定服务相关联。例如,HTTP服务通常使用端口80,HTTPS使用端口443,FTP使用端口21,而电子邮件的SMTP服务使用端口25。
这里是一些最常用的端口号及其服务:
| 端口号 | 服务 | 协议 |
|---|---|---|
| 21 | FTP | TCP |
| 22 | SSH | TCP |
| 25 | SMTP | TCP |
| 53 | DNS | TCP/UDP |
| 80 | HTTP | TCP |
| 110 | POP3 | TCP |
| 143 | IMAP | TCP |
| 443 | HTTPS | TCP |
| 3306 | MySQL | TCP |
| 5432 | PostgreSQL | TCP |
-
端到端通信:在端到端的通信模型中,源端口通常是随机分配的,而目的端口通常是预先定义的,以便接收端的网络栈知道将数据包交给哪个应用程序。
-
多路复用:端口允许单个主机上的多个网络服务同时使用同一IP地址。不同的服务监听不同的端口号。
5.2 用户数据报协议UDP
UDP简介
用户数据报协议(UDP,User Datagram Protocol)是一个简单的面向消息的传输层协议,与传输控制协议(TCP)一起构成了互联网协议套件的核心部分。UDP不提供TCP的一些特性,如可靠性、数据顺序保证和拥塞控制,因此它是一种无连接的协议。以下是UDP的一些关键特点:
-
无连接:UDP不需要在传输数据前建立连接,因此减少了通信时的延迟。
-
尽最大努力交付:UDP不保证消息的可靠传输。数据包可能会丢失、重复或乱序到达,而UDP协议本身不提供任何机制来纠正这些问题。
-
无状态:UDP不跟踪连接状态信息,每个数据包的处理都是独立的。
-
数据包头部开销小:UDP的头部只有8字节,相比TCP的至少20字节的头部,UDP的开销更小。
-
支持多播和广播:UDP可以发送单个数据包到多个接收者(多播),或网络上的所有设备(广播)。
-
适用场景:UDP适用于那些对实时性要求高、可以容忍一定数据丢失的应用,如视频会议、在线游戏和语音传输。
-
端口号:和TCP一样,UDP也使用端口号来区分不同的服务。
由于UDP不提供数据传输的可靠性保证,应用层协议可能需要实现自己的错误检测和纠正机制。例如,如果一个应用需要可靠的数据传输,它可能需要实现消息确认和超时重传的机制。
UDP的首部格式
UDP首部格式非常简单,由以下四个字段组成,每个字段占用2字节(16位),因此UDP首部的总长度为8字节:
-
源端口号(Source Port):这是发送方应用程序的端口号,用于接收方回复数据时指定发送给哪个应用程序。这个字段在不需要回复时可以是可选的,因此有时被设置为零。
-
目的端口号(Destination Port):这是接收方应用程序的端口号,用于指定接收数据的应用程序。
-
长度(Length):这个字段指定了UDP用户数据报的长度,包括首部和数据。它的最小值是8字节(只有首部,没有数据)。
-
校验和(Checksum):这是一个用于错误检测的字段,它对整个数据报(首部加数据)进行校验。如果不使用校验和,该字段可以设置为零。
5.3 传输控制协议TCP概述
TCP最主要特点
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它有几个主要特点:
-
可靠性:TCP通过使用确认机制、重传丢失的数据、以及按序传送数据等方式来确保数据的可靠传输。这意味着在数据传输过程中,TCP会尽力保证数据不会丢失、损坏或乱序。
-
面向连接:TCP使用面向连接的通信模式,这意味着在数据传输之前需要建立连接,传输完成后需要释放连接。这种方式确保了通信的可靠性,但也增加了一些开销。
-
流量控制:TCP使用流量控制来确保发送方不会以太快的速度向接收方发送数据,从而避免接收方被淹没。这通过使用滑动窗口机制来实现。
-
拥塞控制:TCP具有拥塞控制机制,它会根据网络的拥塞程度动态调整数据的传输速率,以避免网络拥塞进一步恶化。
-
面向字节流:在TCP中,一旦连接建立,通信双方就可以同时进行双向的数据传输。这意味着每一方都可以发送数据并接收对方发送的数据,而且这些操作是同时进行的。
-
全双工通信:TCP是基于字节流的协议,这意味着数据被视为没有固定长度的字节流进行传输,而不是像UDP那样的离散数据包。
TCP的连接
TCP连接有两个端点,其连接的端点被称为套接字(Socket)或插口。套接字的格式通常由IP地址和端口号组成。在IPv4中,IP地址是一个32位的数字,通常以“点分十进制”的形式表示,例如:192.168.1.1。而端口号是一个16位的数字,用于标识特定的应用程序或进程。
因此,在IPv4中,套接字的格式通常表示为:
例如,一个IPv4套接字的表示形式可能是:192.168.1.1:80,其中192.168.1.1是IP地址,80是端口号。
在IPv6中,IP地址的表示形式更为复杂,通常采用冒号分隔的十六进制数字,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。端口号仍然是一个16位的数字。
5.4 可靠传输的工作原理
停止等待协议
停止等待协议(Stop-and-Wait Protocol)是一种最简单的可靠传输协议,用于在TCP等协议中实现可靠的数据传输。它确保数据在传输过程中不会丢失、损坏或重复,并且保持数据的顺序。停止等待协议的基本思想是发送方发送一个数据包,然后等待接收方的确认消息,一旦确认消息收到,发送方才发送下一个数据包。
以下是停止等待协议的基本工作流程:
-
发送方发送数据包:发送方发送数据包给接收方,并启动一个定时器来等待接收方的确认消息。
-
接收方收到数据包:接收方收到数据包后,发送确认消息给发送方。
-
发送方收到确认消息:发送方收到确认消息后,关闭定时器,并发送下一个数据包。
-
超时重传:如果发送方在超时时间内没有收到确认消息,它会重新发送相同的数据包。
停止等待协议的优点是简单易实现,但也存在一些缺点,比如效率低下。由于发送方必须等待确认消息才能发送下一个数据包,这会导致网络利用率较低。此外,如果确认消息丢失,发送方会重传数据包,这可能会导致网络中出现重复的数据包。
尽管停止等待协议在实际的网络通信中并不常用,因为它的信道利用率太低。但它作为理解可靠传输协议的基础概念非常重要。在实际的TCP协议中,通常会使用更复杂的协议来提高传输效率和可靠性,比如选择重传协议(Selective Repeat Protocol)和自动重传请求协议(Automatic Repeat reQuest,ARQ)。
在分析停止等待协议的信道利用率时,我们通常考虑以下几个关键参数:
- T_f:一个分组的传输时间。
- T_a:确认消息的传输时间。
- T_p:信号在信道中传播的单向延迟。
信道利用率定义为有效传输时间与总传输周期时间的比率。在停止等待协议中,总传输周期包括一个分组的发送时间、信号的传播延迟、确认消息的传输时间和确认消息的传播延迟。
因此,信道利用率(U)可表示为:
通常,确认消息的大小远小于数据分组的大小,因此可以忽略T_a(即假设T_a \approx 0),这样信道利用率简化为:
在实际应用中,传播延迟T_p可能会很大,特别是在长距离通信中,如卫星通信。在这种情况下,T_p会显著影响信道利用率,因为发送方在等待确认的过程中,信道并没有被有效利用。
如果我们进一步假设T_f \gg T_p(即分组传输时间远大于传播延迟),信道利用率会接近1。但在实际中,由于T_p不能忽略,特别是在高速网络中T_f可能会很小,这会导致信道利用率远低于1,从而使得停止等待协议在高速或长距离网络中效率不高。为了提高效率,可以采用如滑动窗口协议等更高效的传输协议。
回退N帧协议
回退N帧协议(Go-Back-N ARQ)是一种流行的数据链路层协议,用于在不可靠的信道上提供可靠的数据传输。与停止等待协议不同,回退N帧协议允许发送方在等待确认的同时发送多个帧。这种协议通常使用滑动窗口机制,允许发送方连续发送一系列的帧,而无需每发送一个帧就等待确认。
在回退N帧协议中,有几个关键的概念:
- 发送窗口大小:发送方可以在等待确认的情况下发送的最大帧数。这个窗口大小通常用N表示。
- 序列号:每个帧都有一个序列号,用于跟踪发送和接收的顺序。
- 确认:接收方通过发送确认帧(ACK)来告知发送方哪些帧已成功接收。
- 超时:发送方设置一个超时计时器,如果在超时时间内没有收到确认,就假定该帧或后续帧已丢失,并重新发送窗口内所有未确认的帧。
回退N帧协议的工作流程如下:
- 发送方发送窗口内的所有帧。
- 如果接收方收到序列号按顺序的帧,它会发送相应的确认(ACK)。
- 如果接收方收到的帧序列号不按顺序(表示中间有帧丢失),它会丢弃该帧和后续所有帧,并重新发送对最后正确接收的帧的ACK。
- 发送方在收到ACK后,会移动窗口并发送新的帧。
- 如果发送方在超时时间内没有收到某个帧的ACK,它会重新发送当前窗口内所有的帧。
信道利用率在回退N帧协议中有所提高,因为多个帧可以连续发送而无需每次都等待确认。但是,当发生错误时,必须重新发送一系列的帧,即使其中一些帧可能已经被接收方正确接收。这就是“回退N”的含义,发送方需要回退到发生错误的那个帧,并重新发送从那个帧开始的所有帧。
信道利用率(U)的计算考虑了发送窗口的大小和帧的传输时间与传播延迟的比例。在理想情况下,如果没有发生错误,信道利用率可以接近发送窗口大小(N)。但在错误发生的情况下,信道利用率会降低,因为需要重新传输多个帧。
回退N帧协议相比停止等待协议提高了信道利用率,但仍然存在效率问题,尤其是在高误码率的信道中。为了进一步提高效率,可以使用选择性重传协议(Selective Repeat ARQ),它只重新发送那些确实丢失或错误的帧,而不是整个窗口的帧。
连续ARQ协议
连续ARQ(Continuous Automatic Repeat reQuest)是一种自动重传请求协议,用于在计算机网络中实现可靠的数据传输。它是一种滑动窗口协议,允许发送方连续发送多个数据包而无需等待每个数据包的确认消息,从而提高了网络的利用率。
以下是连续ARQ协议的基本工作流程:
-
发送窗口和接收窗口:发送方和接收方各自维护一个窗口,用于跟踪已发送但尚未收到确认的数据包。发送窗口指示了可以发送的数据包序列号范围,而接收窗口指示了可以接收的数据包序列号范围。
-
发送数据包:发送方根据发送窗口的范围发送数据包,并将这些数据包标记上序列号。发送方可以连续发送多个数据包。
-
接收确认消息:接收方收到数据包后,发送确认消息给发送方。确认消息通常包含了接收方期望接收的下一个数据包的序列号。
-
超时重传:如果发送方在超时时间内没有收到确认消息,它会重新发送未确认的数据包。
-
窗口滑动:一旦发送方收到确认消息,它会将发送窗口向前滑动,允许发送下一个序列号范围内的数据包。
连续ARQ协议通过滑动窗口的机制允许发送方在等待确认消息的同时继续发送数据,从而提高了网络利用率。此外,接收方也可以利用窗口的机制来按序接收数据包,确保数据的顺序性。
假设有一个窗口大小为3的发送方和一个接收方,发送方可以发送序号为1, 2, 3的三个数据包而无需等待确认。这些数据包的发送和确认过程可能如下所示:
- 发送方发送数据包1。
- 发送方发送数据包2。
- 发送方发送数据包3。
- 接收方收到数据包1,并发送确认ACK 1。
- 发送方收到确认ACK 1,窗口向前滑动,现在可以发送数据包4。
- 发送方发送数据包4。
- 接收方由于某种原因未能收到数据包4,但收到了数据包2和3,并发送确认ACK 3(累积确认)。
- 发送方收到确认ACK 3,了解到数据包4丢失,并重新发送数据包4。
- 接收方收到重发的数据包4,并发送确认ACK 4。
在这个过程中,接收方使用累积确认,这意味着当它发送ACK 3时,它实际上已经确认了所有序号小于等于3的数据包都已正确接收。发送方在收到ACK 3后知道数据包2需要重传,因为它是唯一一个未被确认的数据包。
连续ARQ协议通过允许发送方连续发送多个数据包而不是逐个等待确认,有效地提高了通道的利用率。然而,这也要求发送方和接收方都有足够的缓冲区来处理窗口内的所有数据包,并且能够处理乱序到达的数据包。
5.5 TCP报文段的首部格式
TCP(Transmission Control Protocol)报文段的首部格式如下所示:
这是TCP报文段的首部格式的基本结构。下面是各个字段的含义:
-
源端口和目的端口:分别占用16位,用于标识发送方和接收方的端口号。
-
序列号(Sequence Number):占用32位,用于标识发送的数据字节流的第一个字节的序列号。
-
确认号(Acknowledgment Number):占用32位,如果ACK标志位被置位,则确认号包含发送方期望接收的下一个数据字节的序列号。
若确认号=N,则表明,序号N-1为止的所有数据都已经正确受到。
-
数据偏移(Data Offset):占用4位,指示TCP报文段的数据偏移量,即首部的长度,以32位字为单位。
-
控制位(Control Bits):占用6位,包括URG、ACK、PSH、RST、SYN和FIN标志位,用于控制TCP连接的建立、维护和关闭。
-
窗口大小(Window Size):占用16位,表示发送方的接收窗口大小,用于流量控制。
-
校验和(Checksum):占用16位,用于检测TCP报文段在传输过程中是否发生了错误。
-
紧急指针(Urgent Pointer):占用16位,仅在URG标志位被置位时才有效,用于指示紧急数据的末尾位置。
-
选项(Options):可变长度,用于包含TCP协议的可选信息,如最大报文段长度、时间戳等。
-
数据(Data):TCP报文段的数据部分,可以为空或包含应用层数据。
这些字段共同构成了TCP报文段的首部,用于在TCP连接中进行数据传输和控制。
5.6 TCP可靠传输的实现
以字节为单位的滑动窗口
TCP的滑动窗口协议是一种流量控制协议,它确保数据可靠地从发送方传输到接收方。窗口大小决定了在等待确认之前可以发送多少数据。在这个例子中,我们假设窗口大小为20字节。TCP首部中与滑动窗口相关的字段主要有序列号(Sequence Number)和窗口大小(Window Size)。现在我们来看一个示例:
-
连接建立:首先,客户端和服务器通过三次握手过程建立连接。在这个过程中,窗口大小会在TCP首部的Window Size字段中被通告。
-
数据传输:
- 发送方开始传输数据,发送方的序列号为1,它发送了20字节的数据(序列号1-20)。
- 接收方收到这20字节的数据,并发送一个确认。这个确认(ACK)包含了期望收到的下一个字节的序列号,即21,同时它也通告了自己的窗口大小(可能是基于当前缓冲区的可用空间)。
- 发送方收到确认后,它知道可以发送下一个数据段。它发送了另外20字节的数据(序列号21-40)。
-
确认和窗口滑动:
- 如果接收方成功接收序列号21-40的数据,它会发送一个ACK 41的确认。
- 发送方收到ACK 41后,窗口滑动,现在它可以发送序列号41-60的数据。
-
窗口大小调整:
- 如果接收方的缓冲区变小了,它可以在ACK中通告一个更小的窗口大小。
- 发送方必须根据接收方通告的窗口大小调整其发送窗口。
-
丢包和重传:
- 如果发送的数据在网络中丢失,接收方将不会发送新的确认。
- 发送方在超时后会重传丢失的数据包。比如,如果序列号21-40的数据丢失了,发送方会在超时后重传这些数据。
在TCP首部中,以下字段在滑动窗口协议中发生变化:
- 序列号(Sequence Number):每发送一个字节,序列号增加1。
- 确认号(Acknowledgment Number):接收方发送ACK时,确认号设置为期望收到的下一个字节的序列号。
- 窗口大小(Window Size):这个字段表明了接收方目前可以接收的数据量(以字节为单位),它可以根据接收方的缓冲区大小动态变化。
这个过程会一直持续,直到所有数据被传输完成。TCP的滑动窗口机制确保了数据的可靠传输,同时通过动态调整窗口大小来适应网络条件和接收方的处理能力。
超时重传时间的选择
TCP(传输控制协议)选择超时重传时间(Retransmission Timeout, RTO)是一个重要的过程,因为它直接影响网络的性能和可靠性。如果RTO设置得太短,可能会导致不必要的重传,增加网络拥塞;如果设置得太长,则会延迟丢失数据包的恢复时间,影响通信效率。TCP使用一种自适应的方法来计算RTO,基于网络的当前状况。
TCP使用往返时间(Round-Trip Time, RTT)的估计来决定RTO。RTT是指一个数据包从发送方发送到接收方,再由接收方发送确认(ACK)回到发送方所需的时间。TCP跟踪最近的RTT测量,并基于这些测量来动态调整RTO。以下是RTO计算的一般步骤:
-
RTT测量:TCP为每个发送的数据包记录一个时间戳,并在收到相应的ACK时测量RTT。
-
平滑化RTT估计:TCP使用加权移动平均来计算一个平滑化的RTT估计(Smoothed RTT, sRTT),以减少偶然测量误差的影响。公式通常是:
\text{sRTT} = (1 - \alpha) \times \text{old sRTT} + \alpha \times \text{RTT测量值}其中,\alpha 是一个权重(通常取值为0.125,即1/8)。
-
计算均方差RTT:TCP还计算RTT的均方差(Mean Deviation, RTTVAR),以评估RTT测量值的波动性。RTTVAR的计算也使用类似于sRTT的加权移动平均:
\text{RTTVAR} = (1 - \beta) \times \text{old RTTVAR} + \beta \times |\text{sRTT} - \text{RTT测量值}|其中,\beta 是另一个权重(通常取值为0.25,即1/4)。
-
计算RTO:最后,TCP使用sRTT和RTTVAR来计算RTO。RTO的计算通常是:
\text{RTO} = \text{sRTT} + \max(G, k \times \text{RTTVAR})其中,G 是一个常数,代表最小的RTO,以避免RTO变得过小。k 是一个安全系数,通常取值为4。
这种基于测量的方法使得TCP能够适应网络条件的变化。例如,如果网络变得更拥塞,RTT可能会增加,TCP会观察到这一点,并调整RTO以匹配新的网络状态。TCP的这种自适应行为是其可靠性的关键因素之一。
选择确认SACK
TCP的选择性确认(Selective Acknowledgment,SACK)是一种TCP的改进机制,用于提高在丢包环境下的性能。传统的TCP使用累积确认(Cumulative Acknowledgment)机制,这意味着接收方只能确认它连续接收到的最后一个字节的序列号。如果在一系列数据包中只有一个包丢失,即使后续的包已经到达,接收方也无法确认这些包,导致发送方必须重传这个丢失包之后的所有包,即使它们已经被接收方正确接收。
为了解决这个问题,SACK允许接收方告诉发送方它已经接收到了哪些分段,即使这些分段并不连续。这样,发送方只需要重传那些实际丢失的数据,而不是所有累积确认点之后的数据。SACK使用TCP首部的选项字段来传递信息。
SACK的工作原理如下:
-
协商SACK选项:在TCP三次握手过程中,客户端和服务器可以通过TCP选项来协商支持SACK。如果双方都支持SACK,那么在数据传输过程中就可以使用SACK选项。
-
SACK选项格式:SACK选项包含了已经被接收方接收但不连续的数据块的序列号范围。这些序列号范围被称为“SACK块”。
-
发送SACK信息:如果接收方收到了一个不连续的数据块,它将通过TCP的确认段(ACK)中的SACK选项来发送这个信息。SACK选项可以包含多个SACK块,表示接收方接收到了多个不连续的数据块。
-
发送方处理SACK信息:发送方收到SACK信息后,会根据SACK选项中的信息,只重传那些尚未被确认接收的数据块。
SACK极大提高了TCP在网络条件差(如高延迟和高丢包率)时的效率,因为它减少了不必要的重传。这对于宽带网络尤为重要,因为传统的累积确认在这种环境下的效率非常低。通过使用SACK,TCP能够更好地利用网络资源,提高数据传输的吞吐量。
5.7 TCP的流量控制
TCP的流量控制是指通过控制数据发送方的发送速率,以使接收方能够处理接收到的数据,避免数据丢失或拥塞。流量控制主要通过滑动窗口机制来实现,该机制允许接收方动态调整其能够接收的数据量。
下面是TCP流量控制的详细介绍:
-
滑动窗口机制:
- 在TCP连接建立过程中,接收方会通知发送方其当前的接收窗口大小,即它可以接收的数据量。
- 发送方根据接收窗口大小来控制发送的数据量,确保不会超出接收方的处理能力。
- 当发送方发送数据后,会等待接收到来自接收方的确认消息,确认消息中包含了接收方期望接收的下一个数据字节的序列号,发送方根据这个确认消息来决定是否发送更多数据以及如何调整发送窗口。
-
接收窗口调整:
- 接收方可以根据自身的处理能力和缓冲区情况动态调整接收窗口的大小。
- 如果接收方的缓冲区较满,它可以减小接收窗口的大小,通知发送方降低发送速率;反之,如果缓冲区有足够的空间,它可以增大接收窗口,以提高数据的接收速率。
-
流量控制的实现:
- TCP流量控制是通过发送方根据接收方的接收窗口大小来控制发送速率的,这种机制确保了数据发送的平稳性和可靠性。
- 当接收方无法及时处理数据时,它可以通过减小接收窗口的大小来通知发送方降低发送速率,从而避免数据丢失或拥塞。
-
拥塞控制与流量控制的区别:
- 流量控制是为了让接收方来得及处理数据,避免接收方缓冲区溢出,而拥塞控制是为了避免网络拥塞导致数据丢失和网络性能下降。
- 流量控制是由接收方控制发送方的发送速率,而拥塞控制是通过网络反馈信息来控制发送方的发送速率,以适应整个网络的负载情况。
总之,TCP的流量控制通过滑动窗口机制,使得发送方根据接收方的处理能力来动态调整发送速率,从而确保数据传输的平稳性和可靠性。
5.8 TCP的拥塞控制
拥塞控制的一般原理
网络拥塞控制是一种网络管理技术,旨在避免或减轻网络中的拥塞情况,确保网络中的数据流能够以可接受的速率进行传输。网络拥塞发生在网络中的数据流量超过了网络链路、交换机或路由器的处理能力,导致数据包丢失、延迟增加以及网络性能下降。
网络拥塞控制和流量控制是两个不同但相关的概念,它们都是为了确保网络中的数据传输能够有效进行,但它们的焦点和应用场景略有不同。
-
流量控制:
- 流量控制是指在数据传输的端到端通信中,接收方通过某种方式通知发送方限制其发送数据的速率,以确保接收方能够有效处理所接收到的数据。
- 主要目的是确保接收方不会因为来自发送方的数据过快而无法及时处理,从而导致数据丢失或缓冲区溢出。
- 在TCP协议中,通过使用滑动窗口机制实现流量控制,接收方可以动态地通知发送方可以发送的数据量,以适应接收方的处理能力。
-
网络拥塞控制:
- 网络拥塞控制是指在整个网络范围内,通过一系列技术和算法来避免或减轻网络中的拥塞情况,确保网络中的数据流能够以可接受的速率进行传输。
- 主要目的是确保整个网络的稳定性和性能,避免网络中的链路、交换机或路由器因为数据流量过大而导致丢包、延迟增加等问题。
- 在TCP协议中,拥塞控制算法通过动态调整发送速率来避免网络拥塞的发生,并通过接收方向发送方发送拥塞信号,以调整发送速率。
总的来说,流量控制主要关注的是端到端通信中的数据发送和接收方之间的速率控制,而网络拥塞控制则更关注整个网络中数据流的管理,以确保网络的稳定性和性能。两者都是网络中重要的管理技术,共同确保了网络中数据传输的有效性和稳定性。
慢启动
MSS
MSS是TCP协议中的一个重要概念,代表最大报文段大小(Maximum Segment Size)。MSS指的是在TCP通信中每个TCP报文段中的数据部分的最大长度,不包括TCP头部和IP头部的长度。
MSS的值通常是由通信双方的操作系统在建立TCP连接时协商确定的,它取决于通信双方和底层网络设备的最大传输单元(MTU,Maximum Transmission Unit)。MTU是指在特定网络中能够传输的最大数据包的大小。
在建立TCP连接时,通信双方的操作系统会通过TCP握手阶段交换各自支持的MSS值,并根据双方的MSS值和网络的MTU值来确定实际使用的MSS。这样做是为了确保在TCP通信中能够使用网络支持的最大报文段大小,从而提高数据传输的效率。
MSS的确定对于TCP通信的性能和稳定性非常重要,因为它直接影响着TCP报文段的大小,进而影响着数据传输的效率和网络拥塞控制的机制。
重要变量
-
接收窗口(Receive Window,
rwnd):这是接收方用来控制发送方发送数据速率的窗口大小,以防止接收方的缓冲区溢出。rwnd的大小是基于接收方应用层的处理速度和接收缓冲区的大小动态变化的。 -
拥塞窗口(Congestion Window,
cwnd):这是发送方为了控制网络拥塞而维护的状态变量。cwnd的大小是基于网络的拥塞状况动态变化的。 -
慢启动阈值(Slow Start Threshold,
ssthresh):这是一个控制TCP拥塞控制行为的阈值,当cwnd达到或超过ssthresh时,TCP将从慢启动过渡到拥塞避免阶段。 -
最终发送窗口(Effective Window Size):发送方在任何时候发送的数据量是由
cwnd和rwnd中较小的一个决定的,即min(cwnd, rwnd)。这意味着发送方需要同时考虑网络的拥塞状况(通过cwnd)和接收方的处理能力(通过rwnd)。
在慢启动阶段,cwnd 从1个MSS开始,每收到一个ACK就增加1个MSS,指数级增长,直到达到ssthresh。然而,即使cwnd 允许发送更多数据,发送方也不能超过rwnd的限制,因为这可能会导致接收方的缓冲区溢出。如果在慢启动或拥塞避免阶段rwnd变得很小,甚至为0,发送方必须停止发送数据,直到接收方的缓冲区有足够的空间,并通过新的ACK信号通知发送方rwnd的增加。
慢启动过程示例
假设我们有一个TCP连接,其中接收窗口(rwnd)是无限大,这意味着接收方的缓冲区大小不会限制发送方的数据发送。拥塞窗口(cwnd)的初始大小为1个最大报文段大小(MSS),假定MSS为1KB。慢启动阈值(ssthresh)被设置为16KB。
在这个示例中,慢启动过程将如下进行:
-
初始状态:
cwnd= 1KBssthresh= 16KBrwnd= ∞ (不是实际的TCP行为,仅为示例)
-
第一个RTT:
- 发送方发送1KB数据。
- 收到ACK后,
cwnd变为cwnd+ 1MSS = 1KB + 1KB = 2KB。
-
第二个RTT:
- 发送方发送2KB数据(因为
cwnd现在是2KB)。 - 每收到一个ACK,
cwnd增加1MSS,因此在这个RTT结束时,cwnd变为 2KB + 2 * 1KB = 4KB。
- 发送方发送2KB数据(因为
-
第三个RTT:
- 发送方发送4KB数据。
- 收到ACK后,
cwnd变为 4KB + 4 * 1KB = 8KB。
-
第四个RTT:
- 发送方发送8KB数据。
- 收到ACK后,
cwnd变为 8KB + 8 * 1KB = 16KB。
-
第五个RTT:
- 发送方发送16KB数据。
- 在这个点上,
cwnd达到了ssthresh的值。根据TCP的拥塞控制机制,接下来会进入拥塞避免阶段,cwnd的增长将从指数增长转变为线性增长。
在这个示例中,我们假设在整个过程中网络没有发生拥塞,没有发生丢包,因此没有超时或重传发生。在实际的TCP连接中,rwnd 是有限的,它会根据接收方的缓冲区大小动态变化,从而影响发送方的发送行为。而且,当网络出现拥塞时,ssthresh 会被调整,cwnd 会减少,TCP会进入快速恢复或者进一步减少cwnd重新进入慢启动阶段。
拥塞避免算法
拥塞避免算法是TCP协议中用于控制数据传输速率的一种算法,它旨在避免网络拥塞并保持网络的稳定性。当网络出现拥塞时,拥塞避免算法能够使TCP发送端逐渐增加发送窗口的大小,以便更好地适应网络的容量。
下面是拥塞避免算法的主要步骤:
-
拥塞避免阶段的启动:
- 当TCP连接进入拥塞避免阶段时,发送窗口的增长速率将从慢启动阶段的指数增长变为线性增长。
- 拥塞避免阶段的初始时刻,发送窗口大小(cwnd)的值通常为慢启动阈值(ssthresh)。
-
线性增长:
- 在拥塞避免阶段,每经过一个往返时间(RTT),发送窗口的大小将以线性方式增加。
- 这意味着每经过一个RTT,发送窗口的大小将增加一个MSS(最大报文段大小)的量。
-
拥塞检测:
- TCP发送端通过监测丢失的报文段和接收到的重复确认来检测网络拥塞的发生。
- 当发生丢失的报文段时,TCP发送端会将慢启动阈值(ssthresh)设置为当前发送窗口大小的一半,并将发送窗口大小(cwnd)重新设置为一个较小的值(通常为1个MSS)。
- 接着,TCP连接将进入快速重传和快速恢复阶段,这些阶段旨在快速恢复丢失的报文段而不必等待超时。
-
持续增长:
- 在拥塞避免阶段,发送窗口大小会持续以线性方式增长,直到再次发生拥塞事件。
拥塞避免算法通过逐步增加发送窗口的大小来避免网络拥塞,并且在发生拥塞时能够迅速调整发送窗口的大小以缓解拥塞。这种算法的设计旨在保持网络的稳定性,同时尽可能地利用网络的带宽。
现在,我们将逐步分析从16KB增长到20KB,然后因为超时重传而减少到1KB的过程。
-
从16KB增长到20KB:
- 假设MSS为1KB。
- 在拥塞避免阶段,每个RTT
cwnd增加1个MSS。 - 假设每个RTT成功地传输并确认了
cwnd大小的数据。 - 那么,每个RTT后,
cwnd将从16KB增加到17KB,然后是18KB,接着是19KB,最后到达20KB。 - 这个增长过程是逐渐的,每个RTT增加1KB,直到达到20KB。
-
超时重传发生时的调整:
- 当
cwnd为20KB时,假设发生了超时事件,这通常表明网络中存在拥塞。 - 根据TCP的标准拥塞控制策略,超时事件会触发以下动作:
ssthresh(慢启动阈值)更新为超时发生时cwnd的一半,即10KB。cwnd重置为1个MSS,即1KB。
- 这意味着TCP将重新进入慢启动阶段,从1KB开始慢慢增加
cwnd。
- 当
-
重新开始慢启动:
- 从1KB开始,每收到一个ACK,
cwnd将增加1个MSS。 - 这将会持续,直到
cwnd再次达到ssthresh的新值,即10KB。 - 在达到10KB之后,TCP将再次进入拥塞避免阶段,而不是像慢启动那样快速增长,而是每个RTT增加1个MSS。
- 从1KB开始,每收到一个ACK,
在实际情况中,由于网络状况的不确定性,这个过程可能会有所不同。例如,如果在慢启动阶段发生了拥塞,或者在拥塞避免阶段网络条件发生了改变,TCP的行为将相应调整。这种自适应的行为使得TCP能够有效地管理网络拥塞。
快重传和快恢复
快速重传(Fast Retransmit):
当发送方连续收到三个重复的确认(duplicate ACK)时,它会认为有一个分组丢失,并会立即重传该分组,而不必等待重传计时器超时。这种机制允许TCP更快地检测到数据包的丢失,而不必等待超时定时器(Retransmission Timeout,RTO)的触发。通过快速重传,TCP可以更快地恢复由于丢失数据包而导致的拥塞。
快速恢复(Fast Recovery):
一旦发送方触发了快速重传,它会将拥塞窗口减半(将慢启动阈值ssthresh设置为当前拥塞窗口大小的一半),并将拥塞窗口的大小设置为ssthresh。接着,TCP连接进入快速恢复状态。在快速恢复状态下,TCP发送方会继续以拥塞避免算法的方式增加拥塞窗口的大小,但每收到一个重复确认时,拥塞窗口的大小只增加一个MSS(最大报文段大小)。
示例
紧接着上面的示例,在cwnd到达10KB时进行拥塞避免算法,逐渐线性增大。假设当cwnd达到12KB并收到三个重复确认时,TCP将执行快重传和快恢复算法。这些算法是为了更快地响应丢包事件,而不必等待重传超时。这里是详细的步骤:
-
快重传:
- 当收到三个重复ACK时,TCP执行快重传,立即重传丢失的报文段,而不是等待重传计时器超时。
-
快恢复:
- 在快重传之后,TCP进入快恢复阶段。在快恢复阶段,TCP采取以下步骤来调整
cwnd和ssthresh:ssthresh被设置为当前cwnd的一半,即12KB的一半,也就是6KB。cwnd被设置为新的ssthresh。因此,cwnd将被设置为ssthresh(6KB)。假设MSS为1KB,那么cwnd现在是6KB。- 也有的快恢复实现是把快恢复开始时的
cwnd值再增大一些,即cwnd=新ssthresh+3。
- 在快重传之后,TCP进入快恢复阶段。在快恢复阶段,TCP采取以下步骤来调整
-
结束快恢复:
- 在快恢复期间,对于每个进一步接收到的重复ACK,
cwnd增加1个MSS。这是因为每个重复ACK都可能表示有一个新的报文段被网络正确接收。 - 当收到新的确认(非重复ACK),表明丢失的报文段已经被成功接收,快恢复阶段结束。
- 此时,
cwnd被设置为新的ssthresh值,也就是6KB。这是因为新的确认表明网络拥塞可能已经减轻。
- 在快恢复期间,对于每个进一步接收到的重复ACK,
-
返回拥塞避免:
- 快恢复结束后,TCP返回到拥塞避免阶段。
- 在拥塞避免阶段,
cwnd将再次线性增长,每个RTT增加大约1个MSS。
这个过程使得TCP能够在检测到丢包的迹象时迅速反应,同时限制其对网络的影响,以避免进一步的拥塞。快重传和快恢复算法提高了TCP在面对网络中的临时拥塞时的性能和效率。
下面是另一个综合示例,用折线图表示更加直观。
下图时TCP拥塞控制的流程图:
主动队列管理AQM
主动队列管理(Active Queue Management, AQM)是一种网络流量管理技术,用于在网络设备(如路由器和交换机)中主动管理数据包队列,以减少网络拥塞、避免队列溢出和提高网络性能。AQM通过提前丢弃数据包或标记数据包来向发送方发送拥塞信号,从而试图在网络中保持较低的延迟和避免队列的过度膨胀。
随机早期检测RED
Random Early Detection (RED)的工作原理是:RED通过在队列到达溢出之前随机丢弃或标记数据包来提前通知发送方有关网络拥塞的情况。这个决策是基于当前队列长度与预设的最小和最大阈值之间的比较。
目的:目的是鼓励发送方减少发送速率,以避免队列溢出和潜在的全局同步(多个TCP流同时减少窗口大小)。特点:RED试图平滑网络流量,避免突然的流量突增和停顿。
5.9 TCP的运输连接管理
运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。
TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫作客户(client), 而被动等待连接建立的应用进程叫作服务器(server)。
TCP建立连接(三报文握手)
TCP建立连接(也称为三次握手)是TCP协议用于在通信双方之间建立可靠连接的过程。这个过程涉及到三个步骤,每个步骤都涉及到发送和确认一个特定的控制报文段。
下面是TCP建立连接的三次握手过程:
-
第一次握手:
- 客户端向服务器发送一个带有SYN(同步序列编号)标志的报文段,该报文段中包含客户端的初始序列号(ISN)。
- 这个报文段告诉服务器,客户端希望建立一个连接,并且指定了客户端用于后续通信的初始序列号。
-
第二次握手:
- 服务器收到客户端的SYN报文段后,会向客户端发送一个带有SYN和ACK(确认)标志的报文段,该报文段中包含服务器的初始序列号(ISN)和确认号(ACK number)。
- 服务器通过这个报文段告诉客户端,服务器接受了客户端的连接请求,并且指定了服务器用于后续通信的初始序列号,同时也确认了客户端的初始序列号。
-
第三次握手:
- 客户端收到服务器的SYN+ACK报文段后,会向服务器发送一个带有ACK标志的报文段,该报文段中包含服务器发来的确认号。
- 这个报文段告诉服务器,客户端也接受了服务器的连接确认,双方可以开始进行数据传输。
在完成了这三次握手后,TCP连接就建立起来了,双方可以开始进行数据传输。此时,双方都知道彼此的初始序列号,并且确认了彼此的初始序列号。这种三次握手的过程确保了双方都能够在连接建立后进行可靠的通信。
需要注意的是,三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。如果只有两次握手,假设客户端的连接请求A因网络问题长时间延迟,而在此期间客户端又发出一次连接请求B,连接请求A终于到达了服务端,服务端建立了连接,此时客户端和服务端已经建立了连接,但是客户端并没有意识到,这样就会出现问题。因此,需要三次握手来解决这个问题。
TCP连接释放(四报文挥手)
TCP连接的释放过程(也称为四次挥手)是TCP协议用于在通信双方之间终止连接的过程。这个过程涉及到四个步骤,每个步骤都涉及到发送和确认一个特定的控制报文段。
下面是TCP连接释放的四次挥手过程:
-
第一次挥手:
- 当一方(假设是客户端)决定关闭连接时,它会向另一方(服务器)发送一个带有FIN(结束)标志的报文段。
- 这个报文段告诉服务器,客户端不再有数据要发送了,但仍然可以接收数据。
-
第二次挥手:
- 服务器收到客户端的FIN报文段后,会向客户端发送一个带有ACK标志的报文段,用来确认收到了客户端的关闭请求。
- 此时服务器仍然可以向客户端发送数据。
-
第三次挥手:
- 如果服务器也想关闭连接,当它确定不再需要发送数据时,就会向客户端发送一个带有FIN标志的报文段。
- 这个报文段告诉客户端,服务器也准备关闭连接。
-
第四次挥手:
- 客户端收到服务器的FIN报文段后,会向服务器发送一个带有ACK标志的报文段,用来确认收到了服务器的关闭请求。
- 此时客户端仍然可以向服务器发送一些数据,而服务器则不能再向客户端发送数据。
在完成了这四次挥手后,TCP连接就完全释放了,双方都知道彼此不再发送数据。这种四次挥手的过程确保了双方在终止连接后不再发送数据,同时也允许双方在关闭连接前完成已经发送的数据的传输。
需要注意的是,四次挥手的过程是为了确保双方在终止连接后不再发送数据,同时也允许双方在关闭连接前完成已经发送的数据的传输。这是为了避免数据的丢失和确保通信的可靠性。
保活计时器
保活计时器是TCP协议中的一种机制,用于检测连接是否仍然处于活跃状态。它通过定期发送保活报文来检测连接的活跃性。如果在一定时间内没有收到对方的应答,就会认为连接已经失效,从而可以采取相应的措施,比如关闭连接。这个机制有助于及时清理掉处于空闲或无效状态的连接,以释放资源并保持网络的稳定性。
第六章 应用层
应用层的许多协议对视客户服务器方式。客户和服务器时通信中所涉及的两个进程。客户时服务请求方,服务器时服务提供方。
6.1 域名系统DNS
域名
互联网的域名系统(Domain Name System,DNS)是一种用于将易于记忆的域名(例如www.example.com)转换为计算机能够理解的 IP 地址(例如192.0.2.1)的分布式命名系统。域名由一系列以点分隔的标签组成,每个标签代表一个特定的网络地址。域名系统的作用是将这些域名映射到其对应的 IP 地址,以便互联网上的计算机能够相互通信。
域名通常由多个部分组成,包括顶级域(Top-Level Domain,TLD)、二级域(Second-Level Domain,SLD)和子域。顶级域通常包括常见的通用顶级域(gTLD)如.com、.org、.net,以及国家和地区代码顶级域(ccTLD)如.cn、.uk、.de等。二级域则是在顶级域下的直接子域,例如在.com域名下的example.com。而子域则是在二级域下的进一步划分,比如www.example.com中的www就是一个子域。
域名系统的核心功能是将用户友好的域名映射到计算机可识别的 IP 地址。当用户在浏览器中输入一个域名时,计算机会向域名系统服务器发出查询请求,以获取与该域名对应的 IP 地址,从而确保用户能够访问到所需的网络资源。
总的来说,域名系统为互联网上的资源提供了易于记忆和使用的标识,使得用户可以通过简单的名称访问到复杂的网络资源,从而促进了互联网的可访问性和可用性。
域名服务器
域名服务器(Domain Name Server,DNS)是一种网络服务器,负责存储和管理域名系统(DNS)中的域名与其对应的 IP 地址之间的映射关系。当用户在浏览器中输入一个域名时,计算机会向域名服务器发送查询请求,以获取与该域名对应的 IP 地址,从而能够正确地定位和访问相应的网络资源。
域名服务器通常以分层的方式组织,这种组织结构反映了域名系统的层次结构。在这个结构中,顶层的域名服务器负责存储顶级域(如.com、.org、.net等)的信息,而下层的域名服务器则负责存储更具体的域名信息,以此类推,直到最底层的域名服务器负责存储特定域名的详细信息。
域名服务器可以分为多种类型,包括:
-
根域名服务器(Root Name Servers):这些服务器存储顶级域名服务器的地址,它们是域名系统的起点。
-
顶级域名服务器(Top-Level Domain Servers):这些服务器负责管理顶级域名,如.com、.org、.net等。
-
权威域名服务器(Authoritative Name Servers):这些服务器存储特定域名的详细信息,包括与该域名相关联的 IP 地址。
-
本地域名服务器(Local Name Servers):这些服务器通常由互联网服务提供商(ISP)或组织内部维护,用于向用户提供域名解析服务。
当用户在浏览器中输入域名时,本地域名服务器首先被查询。如果本地域名服务器无法直接解析该域名,它将向更高级别的域名服务器发送查询请求,直到找到包含所需域名信息的权威域名服务器为止。
DNS使用UDP协议的53端口和TCP协议的53端口。通常情况下,DNS查询会使用UDP协议,而对于一些特定的情况(如数据量较大的回答或者区域传输),会使用TCP协议的53端口。
总的来说,域名服务器在互联网中扮演着关键的角色,它们使得用户可以通过简单易记的域名来访问互联网资源,而无需了解其具体的 IP 地址,从而提高了互联网的可用性和易用性。
6.2 文件传送协议
文件传送协议FTP
文件传输协议(File Transfer Protocol,FTP)是用于在网络上传输文件的标准网络协议。FTP协议允许用户在客户端和服务器之间传输文件,既可以用于匿名用户下载文件,也可以用于经过身份验证的用户上传和下载文件。
FTP协议的基本工作原理如下:
-
客户端-服务器模型:FTP使用客户端-服务器模型,客户端负责发出请求并接收服务器的响应,服务器则负责存储文件并响应客户端的请求。
-
连接方式:FTP可以使用明文方式传输,也可以使用加密方式(如FTPS或SFTP)进行安全传输。
-
端口:FTP使用两个端口进行通信,一个用于控制连接(默认端口号为21),另一个用于数据传输。数据传输的端口号取决于使用的传输模式,可以是20(用于主动模式)或者任意端口号(用于被动模式)。
-
工作模式:FTP支持主动模式和被动模式。在主动模式下,客户端使用一个随机端口连接服务器的端口20进行数据传输;在被动模式下,服务器打开一个随机端口等待客户端连接进行数据传输。
-
功能:FTP可以执行文件上传、文件下载、文件删除、文件重命名等操作。
-
权限控制:FTP服务器通常支持用户认证和权限控制,可以限制用户对文件系统的访问权限。
-
匿名访问:FTP服务器通常支持匿名访问,允许用户在不提供用户名和密码的情况下访问公共文件。
FTP协议的安全性相对较低,因为它在传输过程中使用明文传输,因此在安全性要求较高的场景下,可以考虑使用FTPS(基于SSL/TLS的FTP安全扩展)或者SFTP(SSH文件传输协议)来进行文件传输,以实现加密和认证机制。
总的来说,FTP是一个用于文件传输的常见协议,尽管在安全性方面存在一些局限,但在许多场景下仍然被广泛使用。
简单文件传送协议TFTP
简单文件传输协议(TFTP)是一种简化的文件传输协议,相较于FTP,TFTP具有以下特点:
-
简单性:TFTP设计简单,实现较为轻量,协议规范相对简洁。
-
UDP协议:TFTP基于UDP协议进行数据传输,相对于TCP,UDP的开销更小,适合在网络环境较差的情况下进行文件传输。
-
无需认证:TFTP通常不需要进行用户身份验证,因此在一些场景下可以快速进行文件传输,但也因此安全性较低。
-
适用于嵌入式设备:由于TFTP实现相对简单,且占用资源较少,因此常被用于嵌入式设备的固件更新和配置文件的传输。
-
文件传输速度较慢:由于TFTP基于UDP,而UDP本身不提供拥塞控制和重传机制,因此在不稳定的网络环境下,TFTP的文件传输速度可能较慢。
总的来说,TFTP是一种简单、轻量级的文件传输协议,适用于一些特定的场景,特别是对于资源有限的设备或者对传输速度要求不高的情况。
6.3 远程终端协议TELNET
远程终端协议(TELNET)是一种用于远程登录到计算机系统的协议,允许用户通过网络远程控制和管理远程计算机。以下是TELNET的一些特点:
-
文本协议:TELNET是一种基于文本的协议,它允许用户通过命令行界面(CLI)与远程计算机进行交互。
-
不加密传输:TELNET在传输过程中不对数据进行加密,因此存在安全风险,如密码和敏感信息可能会被窃听。
-
端口号:TELNET默认使用端口号23进行通信。
-
适用性:TELNET在网络设备的管理和一些特定的应用场景中仍在使用,但由于安全性较差,现在更多地被SSH(Secure Shell)所取代。
-
远程终端控制:TELNET允许用户在远程计算机上执行命令、编辑文件以及进行其他类似的操作。
总的来说,TELNET是一种老旧的远程终端协议,由于其不加密传输的特性,安全性较差,因此在安全性要求较高的场景下,更推荐使用SSH等安全的远程登录协议。
6.4 万维网WWW
万维网概述
万维网(World Wide Web,简称WWW)是一种基于互联网的信息系统,它由一系列通过超文本链接相互关联的文档组成,这些文档可以包含文本、图片、视频、音频等多种媒体内容。以下是关于万维网的一些简要介绍:
-
超文本和超链接:万维网的最显著特点是超文本和超链接。超文本指的是可以包含非线性关系的文本,而超链接则允许用户通过点击链接跳转到其他文档或资源。
-
URL:统一资源定位符(URL)是万维网上标识资源的地址系统,它允许用户在浏览器中输入或点击链接来访问网页、图片、视频等内容。
-
HTTP协议:超文本传输协议(HTTP)是万维网上数据传输的基本协议,它定义了客户端(通常是浏览器)和服务器之间的通信规则。
-
网页浏览器:网页浏览器是用于访问和浏览万维网内容的应用程序,用户可以通过浏览器浏览网页、点击链接、观看视频等。
-
全球性:万维网是一个全球性的信息系统,用户可以通过互联网连接到世界各地的服务器来获取信息。
总的来说,万维网是互联网上的一个重要组成部分,它为用户提供了丰富的媒体内容,并通过超文本链接将这些内容相互连接,形成了一个庞大的信息网络。
统一资源定位符URL
统一资源定位符(URL)是用于标识互联网上资源的地址系统。它包含了资源的位置以及访问该资源所需的协议信息。以下是URL的一般格式:
protocol://hostname[:port]/path/[?query][#fragment]
各部分的含义如下:
-
protocol:指定访问资源所使用的协议,例如HTTP、HTTPS、FTP等。
-
hostname:指定资源所在的主机名或IP地址。
-
port:可选项,指定用于访问该资源的端口号,如果未指定,默认使用该协议的默认端口(如HTTP的默认端口为80)。
-
path:指定服务器上资源的路径,用于定位资源所在的具体位置。
-
query:可选项,包含了向服务器请求资源时附带的参数,多个参数之间用"&"符号分隔。
-
fragment:可选项,指定资源中的一个锚点,用于在页面内部进行定位。
举例来说,一个典型的URL可能是这样的:
https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section3
在这个例子中:
- 协议是HTTPS
- 主机名是www.example.com
- 端口号是8080
- 路径是/path/to/resource
- 查询参数为param1=value1和param2=value2
- 锚点为section3
URL的这种结构使得用户可以通过浏览器或其他网络客户端访问互联网上的各种资源。
看一下这个网页的URL,分析一下它的协议、主机名、路径、锚点(可能没有)吧。
超文本传输协议HTTP
超文本传输协议(HTTP)是一种用于传输超文本(如HTML)数据的应用层协议。它是万维网上数据传输的基本协议,用于客户端(通常是浏览器)和服务器之间的通信。以下是HTTP的基本原理和特点:
基本原理:
-
请求-响应模型:HTTP基于请求-响应模型。客户端(通常是浏览器)向服务器发送HTTP请求,服务器接收请求后处理并返回HTTP响应。
-
无状态协议:HTTP是无状态的,即每次请求之间没有关联。服务器不会保留关于客户端请求的任何信息,每个请求都是独立的。
特点:
-
灵活性:HTTP协议是一种灵活的协议,它不限制数据的类型,可以传输文本、图像、视频、音频等各种类型的数据。
-
可扩展性:HTTP协议是可扩展的,可以通过添加新的请求方法、头部字段等来满足不断变化的需求。
-
状态码:HTTP使用状态码来表示请求的处理结果,例如200表示成功,404表示未找到,500表示服务器内部错误等。
-
无连接:每个HTTP请求/响应都是独立的,即连接一次只处理一个请求,处理完毕后连接就会关闭,这也被称为“短连接”。
-
明文传输:HTTP的数据传输是明文的,不加密,因此在传输过程中存在安全风险。
-
超文本传输:HTTP最初设计用于传输超文本,但后来也被扩展用于传输其他类型的数据。
总的来说,HTTP是一种简单而灵活的协议,它为万维网上的数据传输提供了基本的框架,但由于其无状态和明文传输的特点,为了安全起见,现在通常会在HTTP上加入安全层,即HTTPS协议。
超文本标记语言HTML
超文本标记语言(HTML)是一种用于创建网页的标记语言,它描述了网页的结构和内容。以下是HTML的基本格式和一些重要的概念:
基本格式:
HTML文档通常由以下几个部分组成:
-
<!DOCTYPE html>:声明文档类型,告诉浏览器使用哪种HTML版本来解析页面。 -
<html>:HTML文档的根元素,包裹整个HTML内容。 -
<head>:包含了文档的元数据,如标题、字符集声明、引入外部样式表和脚本等。 -
<title>:定义网页的标题,显示在浏览器的标题栏或标签页上。 -
<body>:包含了可见的页面内容,如文本、图像、链接等。
基本概念:
-
标签(Tag):HTML使用标签来定义页面的结构和内容。标签通常是成对出现的,包括开始标签和结束标签,如
<tagname>内容</tagname>。 -
元素(Element):开始标签、结束标签以及它们之间的内容一起构成一个元素。
-
属性(Attribute):用于提供有关HTML元素的额外信息,如
<tagname attribute="value">。 -
注释:在HTML中可以使用
<!-- 注释内容 -->来添加注释,注释不会在浏览器中显示,用于对代码进行注释说明。 -
嵌套:HTML元素可以相互嵌套,形成层级结构,例如
<div><p>文本</p></div>。
示例一个简单的HTML文档:
<!DOCTYPE html>
<html>
<head>
<title>我的第一个网页</title>
</head>
<body>
<h1>欢迎访问我的网页</h1>
<p>这是一个段落。</p>
</body>
</html>
在这个例子中,<!DOCTYPE html>声明了HTML5文档类型,<html>是根元素,<head>包含了文档的元数据,<title>定义了页面的标题,<body>包含了可见的页面内容,<h1>和<p>是标题和段落的标签,它们定义了页面的内容结构。
万维网的信息检索系统
万维网的信息检索系统是一个基于超文本链接的信息组织和检索系统。它通过使用统一资源定位符(URL)来定位和访问网络上的资源,并通过超文本传输协议(HTTP)来传输和检索这些资源。用户可以通过浏览器等客户端软件访问网页,浏览器会解析HTML等标记语言来展示网页内容。网页之间通过超文本链接相互关联,形成了一个庞大的信息网络,用户可以通过点击链接来浏览不同网页之间的关联内容。搜索引擎通过抓取和索引网页内容,为用户提供了便捷的检索服务,使用户能够通过关键词搜索来找到所需的信息资源。
博客、微博和社交网站
在万维网中,博客是一种个人或团体用来发布文章、观点和信息的网站,通常以时间顺序排列,允许读者发表评论。博客内容可以涵盖各种主题,包括个人生活、技术、旅行、美食等。
微博是一种类似博客的社交媒体平台,用户可以发布短文本、图片、视频等内容,并与其他用户进行互动。微博内容通常以时间线的形式呈现,用户可以关注其他用户,浏览其发布的内容,并通过评论、转发等方式进行交流。
社交网站是为了让人们在互联网上建立社交关系、分享兴趣爱好和交流信息而设计的网站。社交网站通常提供用户个人资料、消息发布、好友关系管理、群组讨论等功能,允许用户在平台上进行社交互动。
这些平台为用户提供了展示自我、分享信息、交流互动的机会,丰富了互联网上的内容和社交体验。
6.5 电子邮件
简单工作原理
电子邮件是一种通过互联网传输消息的电子通讯方式。以下是电子邮件的工作原理:
-
发送端准备邮件:
- 发件人使用邮件客户端(如Outlook、Gmail等)编写邮件,并填写收件人地址、主题和邮件内容。
- 邮件客户端将邮件内容和附件(如果有)打包成特定格式的数据。
-
发送端连接邮件服务器:
- 发件人的邮件客户端连接到发件人所用的邮件服务器,通常使用标准的邮件传输协议(如SMTP)进行连接。
-
发送邮件服务器传输邮件:
- 发件人的邮件服务器接收到邮件后,使用SMTP协议将邮件传输到接收人所在的邮件服务器。
-
接收端接收邮件:
- 接收人的邮件服务器使用邮件传输协议(如POP3、IMAP)接收邮件。
- 邮件服务器将邮件存储在接收人的邮箱中。
-
接收端读取邮件:
- 接收人使用邮件客户端连接到自己的邮件服务器,读取并查看新收到的邮件。
-
邮件客户端解析邮件:
- 邮件客户端解析邮件内容,包括主题、发件人、收件人、附件等信息,并将邮件内容以可读的形式呈现给接收人。
-
邮件的存储和管理:
- 接收人可以对邮件进行回复、转发、标记、归档等操作,邮件也会被存储在接收人的邮箱中供日后查看。
通过这一系列步骤,电子邮件实现了跨网络的消息传递,使得人们可以方便地进行文字、图片、文件等形式的通讯。
简单邮件传送协议SMTP
简单邮件传送协议(SMTP)是用于在网络上发送邮件的标准协议。以下是SMTP的工作原理:
-
建立连接:
- 发件人的邮件客户端通过SMTP向发件人所用的邮件服务器发起连接请求。
-
握手:
- 一旦连接建立,发件人的客户端会与邮件服务器进行握手,确认通信双方的身份和能力。
-
发件人认证:
- 发件人的客户端可能需要进行身份验证,通常使用用户名和密码进行认证。
-
指定邮件接收人:
- 发件人的客户端将邮件的接收人地址发送给邮件服务器。
-
发送邮件内容:
- 发件人的客户端将邮件内容以及附件(如果有)发送给邮件服务器。
-
邮件路由:
- 发件人的邮件服务器根据接收人的地址确定邮件的路由,找到负责接收人邮箱的邮件服务器。
-
邮件传输:
- 发件人的邮件服务器将邮件传输给接收人的邮件服务器,这可能涉及多个中间邮件服务器的转发。
-
接收人邮箱存储:
- 接收人的邮件服务器接收邮件,并将其存储在接收人的邮箱中。
-
发送确认:
- 一旦邮件成功传输到接收人的邮件服务器,发件人的邮件服务器会向发件人的客户端发送确认信息。
SMTP协议的工作原理简单明了,它允许邮件客户端和邮件服务器之间进行可靠的邮件传输,确保邮件能够安全、快速地送达到接收人的邮箱中。
电子邮件怎么用
电子邮件是一种通过互联网发送和接收消息的通讯方式。使用电子邮件,您可以在邮件客户端中编写邮件,填写收件人地址、主题和内容,然后点击发送。邮件将通过互联网传输到接收人的邮箱中。接收人登录自己的邮件客户端,即可查看并回复邮件。电子邮件可以发送文字、图片、文件等形式的信息,是一种快捷、方便的远程通讯方式,适用于个人、企业及各种组织。
邮件读取协议POP3和IMAP
当涉及到电子邮件的接收和读取时,两个主要的协议是POP3(邮局协议版本3)和IMAP(互联网消息访问协议)。以下是它们的对比:
| 特征 | POP3 | IMAP |
|---|---|---|
| 全称 | 邮局协议版本3 | 互联网消息访问协议 |
| 作用 | 下载邮件到本地设备 | 在服务器上管理邮件 |
| 邮件存储 | 邮件下载到本地后从服务器删除 | 邮件保留在服务器上 |
| 同步 | 单向同步(下载到本地后删除服务器上的邮件) | 双向同步(邮件保留在服务器上,可以在多个设备上同步) |
| 适用场景 | 单一设备使用 | 多设备使用,需要在不同设备上同步邮件状态 |
| 网络开销 | 低,因为邮件下载到本地后不再占用服务器资源 | 高,因为邮件保留在服务器上需要频繁的与服务器通信 |
| 邮件管理 | 本地设备管理邮件 | 服务器上管理邮件 |
| 适用性 | 适合需要节省带宽和离线阅读邮件的情况 | 适合需要在多个设备上同步邮件状态的情况 |
总体来说,如果您更倾向于在多个设备上同步邮件状态并且需要在服务器上管理邮件,那么IMAP可能更适合您。如果您更关注节省带宽和离线阅读邮件,那么POP3可能更适合您。
通用互联网邮件扩充MIME
MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩充)是一种互联网标准,它扩展了电子邮件的能力,使其能够传输多媒体内容和非ASCII字符。MIME的主要功能包括:
-
传输多媒体内容:MIME允许电子邮件传输多媒体内容,如图像、音频、视频等,使电子邮件不再局限于纯文本。
-
非ASCII字符支持:传统的电子邮件协议只支持ASCII字符,而MIME通过Quoted-Printable编码和Base64编码等方式,使电子邮件能够传输和显示非ASCII字符,如中文、日文等。
-
文件格式标识:MIME定义了一种机制,用于标识和描述邮件中附加的文件类型和格式,确保接收方能够正确解释和处理附件。
-
内容类型标识:MIME通过在邮件头部添加Content-Type字段来标识邮件中各部分的内容类型,如文本、图像、音频等,以便接收方正确显示和处理邮件内容。
MIME的广泛应用使得电子邮件能够更加灵活地传输各种类型的信息,为电子邮件的多样化和多媒体化提供了基础。
6.6 动态主机配置协议DHCP
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是一种用于局域网的网络协议,它允许计算机在加入网络时自动获取IP地址和其他网络配置信息。以下是DHCP的主要功能和工作原理:
-
IP地址分配:DHCP允许网络中的计算机自动获取IP地址,而无需管理员手动配置每台计算机的IP地址。这使得网络管理更加灵活和高效。
-
自动网络配置:除了IP地址外,DHCP还可以分配子网掩码、默认网关和DNS服务器等网络配置信息,使计算机能够快速、自动地加入网络并进行通信。
-
IP地址回收:DHCP还负责管理IP地址的分配和回收。当计算机离开网络时,它所使用的IP地址可以被释放并分配给其他计算机,从而更有效地利用可用的IP地址。
-
租约管理:DHCP分配给计算机的IP地址是有限期限的,称为租约。在租约到期前,计算机可以向DHCP服务器请求续约,以保持其IP地址的有效性。
工作原理:
- 当计算机加入网络时,它会发送一个DHCP请求广播,请求IP地址和其他网络配置信息。
- DHCP服务器收到请求后,会从可用的IP地址池中分配一个IP地址,并将其他网络配置信息一并发送给计算机。
- 计算机接收到DHCP服务器的响应后,会配置自身的网络参数,并开始在网络上进行通信。
总的来说,DHCP简化了网络管理,使得局域网中的设备能够更加方便地加入和使用网络资源。
6.7 简单网络管理协议SNMP
简单网络管理协议(Simple Network Management Protocol,SNMP)是用于管理网络设备的标准协议。它允许网络管理系统(NMS)监控网络设备的状态、收集性能数据,并对设备进行配置和控制。以下是SNMP的主要特点和工作原理:
-
监控和管理:SNMP允许网络管理系统监控网络设备的状态、性能和运行情况,以便及时发现问题并采取相应的措施。
-
信息采集:SNMP代理(通常是网络设备)维护着管理信息库(MIB),其中包含了关于设备状态、配置和性能的信息。NMS可以通过SNMP协议从代理处获取这些信息。
-
远程配置:除了监控,SNMP还允许NMS对网络设备进行远程配置,例如修改路由器的设置、启用或禁用端口等。
-
事件通知:SNMP代理可以向NMS发送事件通知,如警报或故障信息,以便及时采取行动。
工作原理:
-
SNMP由两个主要组件组成:管理器(NMS)和代理(被管理设备)。NMS是用于监控和管理网络设备的系统,而代理是实际的网络设备,它们运行着支持SNMP的软件。
-
代理维护着MIB,其中包含了设备的各种信息。NMS可以通过SNMP协议向代理发送请求,获取MIB中的数据,或者向代理发送命令以配置设备。
-
SNMP使用UDP协议进行通信,通常使用161端口进行管理信息的获取,使用162端口进行事件通知的接收。
总的来说,SNMP是一种灵活且强大的网络管理协议,它为网络管理员提供了监控、配置和故障排除等功能,有助于保持网络设备的稳定性和安全性。
6.8 应用进程跨越网络的通信
应用进程跨越网络进行通信涉及系统调用和应用编程接口(API)。下面将分别从这两个角度来讲述。
系统调用
-
Socket系统调用:在大多数操作系统中,应用程序通过Socket系统调用来实现网络通信。Socket是一种通用的编程接口,它允许应用程序创建网络连接、发送数据和接收数据。
-
创建套接字:应用程序通过调用socket()系统调用来创建一个套接字,指定协议(如TCP或UDP)和其他相关参数。
-
绑定和监听:对于服务器端,它还需要调用bind()来将套接字绑定到特定的网络地址和端口,并调用listen()开始监听传入的连接请求。
-
连接和通信:对于客户端,它需要调用connect()来连接到服务器端的套接字。一旦连接建立,应用程序可以使用send()和recv()等系统调用来发送和接收数据。
应用编程接口(API)
-
套接字API:在应用层,通常会使用特定语言提供的套接字API来实现网络通信。例如,在C语言中,可以使用socket、bind、listen、connect、send和recv等函数来进行网络编程。
-
高级网络库:许多编程语言提供了高级的网络库和框架,如Python的socket库、Java的java.net包、Node.js的net模块等,这些库封装了底层的套接字API,简化了网络编程。
-
HTTP/HTTPS API:对于Web应用程序,通常会使用HTTP或HTTPS协议进行通信。现代编程语言通常提供了专门的HTTP客户端库,如Python的requests库、JavaScript的fetch API等,用于发起HTTP请求和处理响应。
总的来说,应用进程跨越网络进行通信需要通过系统调用或应用编程接口来实现。通过这些接口,应用程序可以创建网络连接、发送数据、接收数据,并实现各种网络通信功能。
6.9 P2P应用
P2P,即点对点,是一种网络架构,其中每个参与者都具有相同的能力,并且可以直接与其他参与者进行通信,而无需通过中心化的服务器。P2P网络的应用非常广泛,其中包括文件共享系统、即时通讯、区块链等。以下是一些P2P应用的例子:
文件共享系统
-
BitTorrent:BitTorrent是一种流行的P2P文件共享协议,它允许用户共享和下载文件,同时减轻了服务器的负担。在BitTorrent网络中,文件被分割成小块,用户可以同时从多个其他用户那里下载这些块,从而加快下载速度。
-
eDonkey/eMule:eDonkey和eMule是早期流行的P2P文件共享网络,用户可以共享和下载各种类型的文件,而不依赖于中心服务器。
即时通讯
-
Bitmessage:Bitmessage是一种P2P即时通讯协议,它允许用户以匿名的方式发送加密消息,而无需依赖中心化的服务器。
-
Tox:Tox是一个开放源代码的P2P即时通讯软件,它提供了加密的消息传输、语音通话和视频通话等功能。
区块链
-
Bitcoin:比特币是一种基于P2P网络的加密货币系统,它允许用户进行去中心化的数字货币交易,而无需信任中心化的金融机构。
-
Ethereum:以太坊是另一种基于P2P网络的区块链平台,它提供了智能合约和去中心化应用程序(DApps)的开发环境。
P2P网络的优点包括去中心化、可靠性高、可扩展性好等,但也存在一些挑战,如安全性、隐私保护等问题。总的来说,P2P网络在文件共享、通讯和区块链等领域都有着重要的应用。
有趣的小知识:RAS综合征,也就是"冗余缩略语综合征"(Redundant Acronym Syndrome syndrome),其中最著名的例子就是"ATM机"(Automated Teller Machine machine)和"PIN码"(Personal Identification Number number)。这种情况发生在人们对缩略词的原始含义不够熟悉,从而在缩略词后面错误地添加了一个冗余的词。这篇博客犯了不少这样的毛病,望读者海涵。
评论区