参考答案:
计算机网络的各层及其协议的集合被称为网络的体系结构,按照不同的维度,其常被分为七层、五层、四层网络结构:
开放式系统互联模型(Open System Interconnection Model,简称为 OSI 模型)是一种概念模型,由国际标准化组织提出,并试图成为计算机在世界范围内互连为网络的标准框架,它具有七层网络结构。
互联网协议套件(Internet Protocol Suite,IPS)是多个网络传输协议的集合,它为网际网络的基础通信提供架构支撑。由于该协议族中最核心的两个协议分别为 TCP(传输控制协议)和 IP(网际协议),因此它也被称为 TCP/IP 协议族(TCP/IP Protocol Suite 或 TCP/IP Protocols),简称 TCP/IP,它具有四层网络结构 。
OSI 七层网络模型由国际标准化组织进行制定,它是正统意义上的国际标准。但其实现过于复杂,且制定周期过长,在其整套标准推出之前,TCP/IP 模型已经在全球范围内被广泛使用,所以 TCP/IP 模型才是事实上的国际标准。TCP/IP 模型定义了应用层、传输层、网际层、网络接口层这四层网络结构,但并没有给出网络接口层的具体内容,因此在学习和开发中,通常将网络接口层替换为 OSI 七层模型中的数据链路层和物理层来进行理解,这就是五层网络模型:
物理层考虑的是如何在各种媒介上传输数据,它定义了与传输媒介相关的接口特性,如:
物理层并不指具体的传输媒介,相反物理层希望能够尽量屏蔽不同媒介间的差异。这些传输媒介可以分为以下两类:
信道是指信息传输的基本通道,它可以分为以下三类:
信道复用是信息传输当中最常使用的技术,用于提高信息传输的效率,根据采用技术的不同,可以分为以下几类:
1. 频分复用
频分复用(FDM,Frequency Division Multiplexing)是将用于传输信道的总带宽划分成若干个子频带(或称子信道),每个子信道传输一路信号:
2. 时分复用
时分复用(TDM,Time Division Multiplexing) 是指采用同一物理连接的不同时段来传输不同的信号:
如上图所示,在一个时分复用帧中,不同用户的信号周期性出现,如果某个用户处于闲置状态,则其对应的帧上也会出现空闲:
为了解决时分复用的这个缺点就产生了统计时分复用。
3. 统计时分复用
在统计时分复用(Statistic TDM)模式下,各用户将数据发送到集中器的输入缓存中,然后由集中器进行顺序扫描并放入到 STDM 帧中:
4. 波分复用
波分复用(WDM,Wavelength Division Multiplexing)是将两种或多种不同波长的光载波信号在发送端经复用器汇合在一起,并耦合到光线路的同一根光纤中进行传输;在接收端,经分用器将各种波长的光载波分离,然后由光解调器作进一步处理以恢复原信号:
5.码分复用
码分复用(CDM,Code Division Multiplexing)是靠不同的编码来区分各路原始信号的一种复用方式。
1. 封装成帧
数据链路层会将网络层传递下来的数据拆分为多段,并在每段数据前后分别添加首部和尾部,以构成一个完成的帧,帧是链路层传输的基本数据单元。帧首部用控制字符 SOH
表示,帧尾部用控制字符 EOT
表示:
2. 透明传输
透明传输是指不论何种数据都应当能够在链路上进行安全地传输。由于我们采用控制字符来封装帧,当传输数据中出现了控制字符时,就会导致无法正确区分出帧头帧尾,此时需要使用转移字符 ESC
来进行转义:
3. 差错检测
由于现实环境中的通信链路都是不理想的,因此比特在传输过程中可能会产生差错:1 可能会变成 0,而 0 也可能变成 1,这称为比特差错。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率。为了解决这个问题,数据链路层将待发送的数据分为多组,并采用循环冗余校验(CRC,Cyclic Redundancy Check)技术为每组数据生成冗余校验码,之后将每组数据和其校验码共同构成一帧后再发送出去。
点到点协议(PPP,Point to Point Protocol)是目前使用最为广泛的数据链路层协议,主要用于建立点对点的连接来传输数据单元。它由以下三部分组成:
MAC 地址(Media Access Control Address),直译为媒体存取控制地址,也称为局域网地址(LAN Address)或物理地址(Physical Address)。MAC 地址用于在网络中唯一标识一个网卡,一台设备若有多个网卡,则每个网卡都会有一个唯一的 MAC 地址。链路层通过 Mac 地址来识别需要发送数据的目标节点。
MAC地址为 48 位的(6 个字节),通常表示为 12 个 16 进制数,每两个 16 进制数之间用冒号隔开,如 08:00:20:0A:8C:6D
,前 3 字节为组织机构唯一标识(OUI,Organizationally Unique Identifier),由 IEEE 的注册管理机构统一分配给硬件生产厂家,以确保在全球范围内的唯一;后 3 字节由厂家自行分配。
局域网(LAN,Local Area Network)是连接住宅、学校、实验室、大学校园或办公大楼等有限区域内计算机的网络。 按照 IEEE802 标准,局域网体系结构分为三层,即物理层,媒体链路控制层(MAC),逻辑链路控制层(LLC)。实际上是两层,该标准将数据链路层拆分为更具体的媒体链路控制层和逻辑链路控制层。
以太网(Ethernet)是目前使用范围最广的局域网,以常用的以太网 v2 标准为例,其帧格式如下:
其中 Mac Header 分别记录了目的地的 Mac 地址和来源地的 Mac 地址。
网际协议(Internet Protocol)是网络层中最重要的协议,也是 TCP\IP 两大核心协议之一,所有需要互联的计算机网络都需要遵循该协议,以便能够将不同网络在全世界范围内连接起来。该层传输的基本数据单元是 IP 数据报,其格式如下:
各字段的含义如下:
IP 数据报中的源地址和目标地址均是 IP 地址,而数据链路层的帧中的源地址和目标地址均是 Mac 地址,那么怎样根据 IP 地址获得 Mac 地址?这就需要使用到 ARP 协议。互联网络中的每台主机都有一个 ARP 缓存表,存储了本局域网内各主机和路由器的 IP 地址与 Mac 地址的映射关系,示例如下:
主机名称
IP地址
MAC地址
A
192.168.38.10
00-AA-00-62-D2-02
B
192.168.38.11
00-BB-00-62-C2-02
C
192.168.38.12
00-CC-00-62-C2-02
D
192.168.38.13
00-DD-00-62-C2-02
E
192.168.38.14
00-EE-00-62-C2-02
你也可以使用
arp -a
来查看你本机的 ARP 缓存表 。
拥有 ARP 表后,数据链路层中帧的发送过程如下:
IP 地址由 ICANN(The Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)进行分配,它是一个在全世界范围内唯一的 32 位标识符,最早的 IP 地址采用两级分类,只由 网络号 + 主机号
组成,分为以下五类:
A,B,C 三类是最常使用的类型,其类别位分别为 0,10,110 。需要注意的是另外并非所有 IP 地址都可用来分配,限制如下:
网络号限制:
主机号限制:
综上所述,每种网络类型所能分配到 IP 地址的情况如下:
网络类别
最大可分配的网络数
第一个可分配的网络号
最后一个可分配的网络号
每个网络的最大主机数
A
126(27-2)
1
126
16 777 215(224-2)
B
16 383(214-1)
128.1
191.255
65 534(216-2)
C
2 097 151(221-1)
192.0.1
223.255.255
254(28-2)
从该表我们可以看出来,两级 IP 地址灵活性不足,且利用率较低,假设你现在的公司有 4 个机房(每个机房 20 台主机),出于信息安全的考虑,每个机房的网络需要彼此隔离,在两级 IP 的架构下你就只能申请 4 个 C 类地址,此时你浪费的 IP 数量为 (254-20)*4
,为解决两级 IP 地址灵活性不足问题,就产生了三级 IP 地址,即划分子网。此时你只需要申请一个 C 类地址,然后将其划分为 4 个子网。
划分子网方案诞生与 1985 年,它从主机号借用若干位作为子网号,从而将 IP 地址划分为三级:网络号 + 子网号 + 主机号。假设网络地址为 192.168.10.0,利用子网掩码 255.255.255.224 对其进行划分子网,此时可以划分为四个子网:
由于子网对外是不可见的,所以需要使用子网掩码来辅助路由,假设目标 IP 地址为 192.168.10.198,想要正确到达该地址,必须先正确到达网络地址 192.168.10.192 。网络地址,子网掩码和主机 IP 之间的关系如下:
IP 地址:192.168.10.198 二进制IP地址:11000000.10101000.00001010.11000110
子网掩码:255.255.255.224 二进制掩码:11111111.11111111.11111111.11100000
网络地址:192.168.10.192 按位逻辑与运算结果为:11000000.10101000.00001010.11000000
现代互联网标准规定:所有网络都必须使用子网掩码,同时路由器的路由表中也必须包含子网掩码这一项。因为路由表包含了 IP 地址和子网掩码,所以通过位运算就能很快计算出网络地址。
最后,如果一个网络不划分子网掩码,则其子网掩码取默认值,各类 IP 地址默认的掩码如下:
类别
子网掩码的二进制数值
子网掩码的十进制数值
A
11111111 00000000 00000000 00000000
255.0.0.0
B
11111111 11111111 00000000 00000000
255.255.0.0
C
11111111 11111111 11111111 00000000
255.255.255.0
无类别域间路由(CIDR,Classless Inter-Domain Routing)是一个给用户分配 IP 地址以及在互联网上有效地路由 IP 数据报的地址归类方法。它消除了传统的 A 类,B 类 和 C 类地址以及划分子网的概念,采用无分类的两级编址:
IP地址 ::= {<网络前缀>,<主机号>}
并使用斜线记法进行表示:
128.14.35.7 / 20 = 10000000 00001110 00100011 00000111
此时表示前 20 位都是网络前缀,该地址所处的地址块中的最小地址和最大地址则分别为:
十进制
二进制
最小地址
128.14.32.0
10000000 00001110 00100000 00000000
最大地址
128.14.47.255
10000000 00001110 00101111 11111111
每个地址块可以使用地址块中的最小地址和网络前缀的位数进行指定,例如上面的地址块可以记为 128.14.32.0 / 20 ,也可以简称为 /20地址块
。为更方便的进行路由选择,CIDR 使用 32 位的地址掩码,斜线后面的数字同时表示地址掩码中 1 的个数,例如 /20地址块
的地址掩码为 11111111 11111111 11110000 00000000 。
由于一个 CIDR 地址块可以包含多个地址,所以路由表就利用 CIDR 地址块来查找目标网络,这种地址聚合常称为路由聚合,也称为构成超网。通过路由聚合,可以极大减少路由表中项目的数量,从而提高网络的整体性能。
在网络层,除了上面介绍的 IP 协议和 ARP 协议外,最常使用的还有以下两个协议:
RFC 1918 中指明了一些专用地址(Private Address),这些地址只能用于一个机构的内部通信,但不能用于和互联网上的主机进行通信。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。下面是三个专用的地址块:
因为不同机构可以采用相同的专用地址,因此其也被称为可重用地址。
如果一个机构内使用的是由专用地址构成的专用网,但该机构的部门却分布在不同的、远距离的地理位置上,此时可以利用公共的互联网作为本机构内各专用网之间的通信载体,这样的专用网称为虚拟专用网(Virtual Private Network)。此时通过公共互联网的数据可以使用 IPSec(IP Security)协议加密来保证安全性。
当某台主机获取到的地址是专用地址时,其是无法和外部互联网进行通讯的,如果想要和外部互联网进行通讯,可以采用 NAT(Network Address Translation,网络地址转换)技术来实现。该方法需要在专用网连接到互联网的路由器上安装 NAT 软件,NAT 路由器需要至少一个有效的全球 IP 地址,当使用专用地址的主机在和外界进行通信时,NAT 路由器会将其转换为全球 IP 地址。
由上面的原理也可以看出,具有 n 个全球 IP 地址的路由器最多只允许 n 台主机同时接入到互联网。 为了解决这个问题,现在常用的 NAT 转换表会把传输层的端口号也利用上。
上面我们介绍过 IPv4 的长度为 32 位,因此所有可分配的 IP 地址大约为 42 亿个,到 2011 年 2 月,所有可分配地址均已耗尽,因此产生了 IPv6,IPv6 的地址长度为 128 位,采用十六进制表示。
传输层负责为两台主机中的进程提供通信服务,它使用 16 位的端口号来标识端口,当两个计算机中的进程要进行通讯时,除了要知道对方的 IP 地址外,还需要知道对方的端口。该层主要有以下两个协议:用户数据报协议(UDP,User Datagram Protocol)和传输控制协议(TCP,Transmission Control Protocol):
用户数据报协议 UDP 具有以下特点:
传输控制协议 TCP 具有以下特点:
TCP 连接 ::= {socket1,socket2} = {(IP1,port1),(IP2,port2)}
TCP 虽然是面向字节流的,但其传输的基本数据单元则是报文段。一个 TCP 报文段分为首部和数据两部分,TCP 首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项(n 为整数),具体格式如下:
各字段的含义如下:
TCP 建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个 TCP 报文段,具体如下:
SYN = 1
,同时选择一个初始序号 seq = x
,之后进入 SYN-SENT(同步已发送)状态;ack = x + 1
,并为自己选择一个初始序号 seq =y
,之后进入 SYN-RCVD(同步收到)状态;ack = y + 1
,序号 seq = x + 1
。TCP 标准规定,ACK 报文段可以携带数据也可以不携带,如果不携带则该序号不被消耗,下一个数据报文段的序号仍然是 seq = x + 1
。之后 A 进入 ESTABLISHED(已连接)状态;数据传输结束后,通信的双方都可以释放连接,具体过程如下:
seq = u
,其中 u 等于前面传送过的数据的最后一个字节的序号加 1 。之后 A 进入 FIN-WAIT-1(终止等待 1)状态;ack = u + 1
,序号 seq = v
,其中 v 等于前面传送过的数据的最后一个字节的序号加 1 。之后 B 进入 CLOSE-WAIT(关闭等待)状态,并通知高层应用进程。此时 TCP 连接处于半关闭状态,即 A 已经没有数据需要发送,但如果 B 发送数据,A 仍要接收;seq = w
(在半关闭状态下 B 可能又发送了一些数据),另外还需要重复上次已经发送过的确认号 ack = u + 1
。之后 B 进入 LAST-ACK(最后确认)状态;ack = w + 1
,序号 seq = u + 1
,然后进入 TIME-WAIT(有时间限制的等待)状态;RFC 793 建议 MSL 设置为 2 分钟,现在的网络环境已经有了质的提升,该值可以按需缩短。A 之所以要等待两倍的 MSL 时间后才进入 CLOSED 状态,主要基于以下两个原因:
1. 停止等待协议
想要实现可靠性传输,最基本的可以使用停止等待协议:每发送完一个数据单元就停止发送,并等待对方的确认。
此时面临两个问题:
针对第一个问题,解决方案是如果在给定的时间内没有收到确认,则进行超时重传:
针对第二个问题,其解决方案依然是超时重传,具体细分为以下两种情况:
在基本的停止等待协议中,一次只发送一个数据单元,此时信道利用率非常低,为了解决这个问题,可以采用流水线传输,一次发送多个数据单元:
当使用流水线传输时,为保证可靠性,需要配合使用连续 ARQ 协议和滑动窗口协议。
2. 连续 ARQ 协议
连续ARQ(Automatic Repeat reQuest)协议指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,中途不需要等待对方的确认,发送方在每收到一个确认时就把发送窗口向前滑动一个分组的位置:
通常接收方一般都是采用累积确认的方式。此时接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,它表示:这个分组及其之前的所有分组都已正确到达。
TCP 的滑动窗口以字节为单位,并采用以下方法来计算超时重传时间 RTO(Retransmission Time Out):
RTO = RTT_S + 4 × RTT_D
其中 RTTS 表示加权平均往返时间,计算方式如下:
新的 RTT_S = (1-α) × 旧的 RTT_S + α × 新的 RTT 值
RTTD 是 RTT 偏差的加权平均值,计算方式如下:
新的 RTT_D = (1-β) × 旧的 RTT_D + β × |RTT_S - 新的 RTT 值|
流量控制(flow control)是指控制发送方的发送速率,以便接收方来得及接收。假设 A 向 B 发送数据,在连接建立时,B 会将自己接收窗口(rwnd,receiver window)的大小告诉 A ,而 A 需要保证发送窗口的大小不能超过 B 接收窗口的大小,通过该机制就可以实现对发送方的流量控制。
网络拥塞(congestion)是指传输的数据量超过节点承受能力而导致传输能力下降的情况。而拥塞控制就是防止过多的数据注入到网络中而造成路由器和链路过载。TCP 采用四种算法来进行拥塞控制,分别是:慢启动(slow start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery):
1. 慢启动
慢开始和拥塞避免都是基于窗口的拥塞控制:发送方会维持一个名为拥塞窗口 cwnd(congestion window)的状态变量,其值取决于网络的拥塞程度,并会动态变化,同时发送方会让自己的发送窗口等于拥塞窗口。
慢启动的思路如下:由于不知道网络的负载能力,所以最好的选择就是逐步探测,即由小到大成倍地增大发送窗口,也就是说,由小到大成倍地增大拥塞窗口的值。
2. 拥塞避免
拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大:每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是像慢启动阶段那样加倍地增长。慢启动和拥塞避免通常是配合使用,以保证启动速度,一开始使用慢启动进行成倍增长,当达到某一个阈值 ssthresh 后采用拥塞避免进行稳步尝试:
3. 快重传和快恢复
快重传算法要求接收方不要等待自己发送数据时才进捎带确认,而是要立即发送确认,即使收到了失序报文段也要立即发出对已收到的报文段的重复确认。示例如下:
如上图所示,当 M3 丢失时,之后发送 M4 , M5 , M6 时收到的都是对于 M2 的重复确认,此时发送方就可以知道 M3 已经丢失,需要立即进行重传。由于此时只是个别报文出现了丢失,而不是网络拥塞,所以执行快恢复:发送方调整 ssthresh = cwnd / 2,并设置 cwnd = ssthresh = 8 (图中点5),并开始执行拥塞避免算法。
目前我们都是使用易于理解的域名来访问互联网应用,但传输层需要的则是 IP 地址,因此需要使用域名系统(DNS,Domain Name System)来进行域名与 IP 地址之间的转换 。
域名是一个逻辑上的概念,分为多级域名,其中最基础的是根域名,其次是顶级域名,顶级域名共分为四类:
文件传输协议(FTP,File Transfer Protocol)是用于在网络上进行文件传输的一套标准协议,允许客户指明文件的类型和格式,并获得文件的存储权限。FTP 的服务器进程由两大部分组成:
因此一个 FTP 服务器进程可以同时为多个客户端进程提供服务。
Telnet 协议是 Internet 远程登录服务的标准协议和主要方式,它为用户提供了在本地计算机上访问远程主机的能力。Telnet 能将用户的击键传到远程主机,同时也能将远程主机的输出通过 TCP 连接返回到用户屏幕,这种服务是透明的,用户感觉键盘和显示器好像都是直接连在远程主机上,因此 Telnet 又称为终端仿真协议。
万维网是一个分布式的超媒体系统,它是超文本系统的扩展。它包含以下重要概念:
1. 统一资源定位符 URL
用于定位互联网上资源的位置和访问这些资源的方法,其格式如下:
<协议>://<主机>:<端口>/<路径>
2. 超文本传送协议 HTTP
HTTP 协议定义了浏览器如何向万维网请求文档,以及服务器如何把文档传送给浏览器。
3. 超文本标记语言 HTML
超文本标记语言 HTML 是一种标识性的语言,包括一系列标签,这些标签可以用于说明文字、图形、动画、声音、表格、链接等各种类型的资源,并能将网络文档格式进行统一。
通常连接到互联网的计算机的协议软件都需要配置多个项目,如 IP 地址,子网掩码,默认路由器的 IP 地址以及域名服务器的 IP 地址等等,为了省去配置的麻烦,现在互联网普遍采用动态主机配置协议 DHCP(Dynamic Host Configuration Protocol),它提供了一种即插即用联网的机制。此时你只需要采用默认的配置即可,如下所示:
此时需要进行联网的主机在启动时候会广播发现报文(DHCP DISCOVER),其目的地址为 255.255.255.255(即受限广播地址),此时本地网络上的所有主机都能接收到这个广播报文,但只有 DHCP 服务器才会通过提供报文(DHCP OFFER)对此广播进行响应。DHCP 服务器先在其数据库中查找该计算机的配置信息,若找到,则直接返回;若找不到,则从服务器的 IP 地址池取一个地址分配给该计算机。
通常不是每个网络都有 DHCP 服务器,但每个网络都至少有一个 DHCP 中继代理(通常是路由器),它配置了 DHCP 服务器的 IP 地址信息。当 DHCP 中继代理收到主机 A 的发现报文后,就以单播的方式向 DHCP 服务器进行转发;并等待其回复后,再转发回主机 A 。
DHCP 服务器分配给 DHCP 客户的 IP 地址是临时性的,只能在一段时间内使用,该时间称为租用期,由 DHCP 服务器进行设置。
最近更新时间:2024-01-25
小程序刷题更方便
关注公众号获取最新面经
咨询辅导服务/加面试交流群