跟换图片源
This commit is contained in:
@@ -59,7 +59,7 @@
|
||||
|
||||
OSI 七层网络模型由国际标准化组织进行制定,它是正统意义上的国际标准。但其实现过于复杂,且制定周期过长,在其整套标准推出之前,TCP/IP 模型已经在全球范围内被广泛使用,所以 TCP/IP 模型才是事实上的国际标准。TCP/IP 模型定义了应用层、传输层、网际层、网络接口层这四层网络结构,但并没有给出网络接口层的具体内容,因此在学习和开发中,通常将网络接口层替换为 OSI 七层模型中的数据链路层和物理层来进行理解,这就是五层网络模型:
|
||||
|
||||
<div align="center"> <img src="../pictures/计算机网络体系结构.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/计算机网络体系结构.png"/> </div>
|
||||
|
||||
|
||||
1. **应用层 (application layer)**:直接为应用进程提供服务。应用层协议定义的是应用进程间通讯和交互的规则,不同的应用有着不同的应用层协议,如 HTTP协议(万维网服务)、FTP协议(文件传输)、SMTP协议(电子邮件)、DNS(域名查询)等。
|
||||
@@ -102,19 +102,19 @@ OSI 七层网络模型由国际标准化组织进行制定,它是正统意义
|
||||
|
||||
频分复用(FDM,Frequency Division Multiplexing)是将用于传输信道的总带宽划分成若干个子频带(或称子信道),每个子信道传输一路信号:
|
||||
|
||||
<div align="center"> <img src="../pictures/频分复用.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/频分复用.png"/> </div>
|
||||
|
||||
|
||||
**2. 时分复用**
|
||||
|
||||
时分复用(TDM,Time Division Multiplexing) 是指采用同一物理连接的不同时段来传输不同的信号:
|
||||
|
||||
<div align="center"> <img src="../pictures/时分复用.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/时分复用.png"/> </div>
|
||||
|
||||
|
||||
如上图所示,在一个时分复用帧中,不同用户的信号周期性出现,如果某个用户处于闲置状态,则其对应的帧上也会出现空闲:
|
||||
|
||||
<div align="center"> <img src="../pictures/时分复用的缺陷.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/时分复用的缺陷.png"/> </div>
|
||||
|
||||
|
||||
为了解决时分复用的这个缺点就产生了统计时分复用。
|
||||
@@ -123,14 +123,14 @@ OSI 七层网络模型由国际标准化组织进行制定,它是正统意义
|
||||
|
||||
在统计时分复用(Statistic TDM)模式下,各用户将数据发送到集中器的输入缓存中,然后由集中器进行顺序扫描并放入到 STDM 帧中:
|
||||
|
||||
<div align="center"> <img src="../pictures/统计时分复用.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/统计时分复用.png"/> </div>
|
||||
|
||||
|
||||
**4. 波分复用**
|
||||
|
||||
波分复用(WDM,Wavelength Division Multiplexing)是将两种或多种不同波长的光载波信号在发送端经复用器汇合在一起,并耦合到光线路的同一根光纤中进行传输;在接收端,经分用器将各种波长的光载波分离,然后由光解调器作进一步处理以恢复原信号:
|
||||
|
||||
<div align="center"> <img src="../pictures/波分复用.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/波分复用.png"/> </div>
|
||||
|
||||
|
||||
**5.码分复用**
|
||||
@@ -145,14 +145,14 @@ OSI 七层网络模型由国际标准化组织进行制定,它是正统意义
|
||||
|
||||
数据链路层会将网络层传递下来的数据拆分为多段,并在每段数据前后分别添加首部和尾部,以构成一个完成的帧,帧是链路层传输的基本数据单元。帧首部用控制字符 `SOH` 表示,帧尾部用控制字符 `EOT` 表示:
|
||||
|
||||
<div align="center"> <img src="../pictures/封装成帧.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/封装成帧.png"/> </div>
|
||||
|
||||
|
||||
**2. 透明传输**
|
||||
|
||||
透明传输是指不论何种数据都应当能够在链路上进行安全地传输。由于我们采用控制字符来封装帧,当传输数据中出现了控制字符时,就会导致无法正确区分出帧头帧尾,此时需要使用转移字符 `ESC` 来进行转义:
|
||||
|
||||
<div align="center"> <img src="../pictures/透明传输.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/透明传输.png"/> </div>
|
||||
|
||||
|
||||
**3. 差错检测**
|
||||
@@ -181,7 +181,7 @@ MAC地址为 48 位的(6 个字节),通常表示为 12 个 16 进制数,
|
||||
|
||||
以太网(Ethernet)是目前使用范围最广的局域网,以常用的以太网 v2 标准为例,其帧格式如下:
|
||||
|
||||
<div align="center"> <img src="../pictures/Ethernet_Type_II_Frame_format.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/Ethernet_Type_II_Frame_format.png"/> </div>
|
||||
|
||||
|
||||
其中 Mac Header 分别记录了目的地的 Mac 地址和来源地的 Mac 地址。
|
||||
@@ -192,7 +192,7 @@ MAC地址为 48 位的(6 个字节),通常表示为 12 个 16 进制数,
|
||||
|
||||
网际协议(Internet Protocol)是网络层中最重要的协议,也是 TCP\IP 两大核心协议之一,所有需要互联的计算机网络都需要遵循该协议,以便能够将不同网络在全世界范围内连接起来。该层传输的基本数据单元是 IP 数据报,其格式如下:
|
||||
|
||||
<div align="center"> <img width="600px" src="../pictures/IP数据报格式.png"/> </div>
|
||||
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/IP数据报格式.png"/> </div>
|
||||
|
||||
|
||||
各字段的含义如下:
|
||||
@@ -236,7 +236,7 @@ IP 数据报中的源地址和目标地址均是 IP 地址,而数据链路层
|
||||
|
||||
IP 地址由 ICANN(The Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)进行分配,它是一个在全世界范围内唯一的 32 位标识符,最早的 IP 地址采用两级分类,只由 `网络号 + 主机号` 组成,分为以下五类:
|
||||
|
||||
<div align="center"> <img width="600px" src="../pictures/IP地址分类.png"/> </div>
|
||||
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/IP地址分类.png"/> </div>
|
||||
|
||||
|
||||
A,B,C 三类是最常使用的类型,其类别位分别为 0,10,110 。需要注意的是另外并非所有 IP 地址都可用来分配,限制如下:
|
||||
@@ -267,7 +267,7 @@ A,B,C 三类是最常使用的类型,其类别位分别为 0,10,110
|
||||
|
||||
划分子网方案诞生与 1985 年,它从主机号借用若干位作为子网号,从而将 IP 地址划分为三级:网络号 + 子网号 + 主机号。假设网络地址为 192.168.10.0,利用子网掩码 255.255.255.224 对其进行划分子网,此时可以划分为四个子网:
|
||||
|
||||
<div align="center"> <img src="../pictures/划分子网.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/划分子网.png"/> </div>
|
||||
|
||||
|
||||
由于子网对外是不可见的,所以需要使用子网掩码来辅助路由,假设目标 IP 地址为 192.168.10.198,想要正确到达该地址,必须先正确到达网络地址 192.168.10.192 。网络地址,子网掩码和主机 IP 之间的关系如下:
|
||||
@@ -335,7 +335,7 @@ RFC 1918 中指明了一些专用地址(Private Address),这些地址只
|
||||
|
||||
由上面的原理也可以看出,具有 n 个全球 IP 地址的路由器最多只允许 n 台主机同时接入到互联网。 为了解决这个问题,现在常用的 NAT 转换表会把传输层的端口号也利用上。
|
||||
|
||||
<div align="center"> <img src="../pictures/NAT路由器的工作原理.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/NAT路由器的工作原理.png"/> </div>
|
||||
|
||||
|
||||
### 4.9 IPv6
|
||||
@@ -361,7 +361,7 @@ RFC 1918 中指明了一些专用地址(Private Address),这些地址只
|
||||
+ 长度:UDP 用户数报的总长度;
|
||||
+ 校验和:检测 UDP 用户数据报在传输中是否有错,如果有错则丢弃。
|
||||
|
||||
<div align="center"> <img src="../pictures/UDP用户数据报.jpg"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/UDP用户数据报.jpg"/> </div>
|
||||
|
||||
|
||||
### 5.2 TCP 简介
|
||||
@@ -382,7 +382,7 @@ RFC 1918 中指明了一些专用地址(Private Address),这些地址只
|
||||
|
||||
TCP 虽然是面向字节流的,但其传输的基本数据单元则是报文段。一个 TCP 报文段分为首部和数据两部分,TCP 首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项(n 为整数),具体格式如下:
|
||||
|
||||
<div align="center"> <img width="600px" src="../pictures/TCP报文首部.jpg"/> </div>
|
||||
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/TCP报文首部.jpg"/> </div>
|
||||
|
||||
|
||||
各字段的含义如下:
|
||||
@@ -417,7 +417,7 @@ TCP 虽然是面向字节流的,但其传输的基本数据单元则是报文
|
||||
|
||||
TCP 建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个 TCP 报文段,具体如下:
|
||||
|
||||
<div align="center"> <img width="600px" src="../pictures/三次握手.png"/> </div>
|
||||
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/三次握手.png"/> </div>
|
||||
|
||||
|
||||
1. 服务器进程 B 首先创建传输控制模块 TCB,然后进入 LISTEN(收听)状态,准备接受客户端的连接请求;
|
||||
@@ -434,7 +434,7 @@ TCP 建立连接的过程叫做握手,握手需要在客户和服务器之间
|
||||
|
||||
数据传输结束后,通信的双方都可以释放连接,具体过程如下:
|
||||
|
||||
<div align="center"> <img width="600px" src="../pictures/四次挥手.png"/> </div>
|
||||
<div align="center"> <img width="600px" src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/四次挥手.png"/> </div>
|
||||
|
||||
|
||||
1. 假设应用进程 A 先主动关闭连接,此时需要发送连接释放报文段:首部终止控制位 FIN 为 1,序号 `seq = u`,其中 u 等于前面传送过的数据的最后一个字节的序号加 1 。之后 A 进入 FIN-WAIT-1(终止等待 1)状态;
|
||||
@@ -462,7 +462,7 @@ RFC 793 建议 MSL 设置为 2 分钟,现在的网络环境已经有了质的
|
||||
|
||||
想要实现可靠性传输,最基本的可以使用停止等待协议:每发送完一个数据单元就停止发送,并等待对方的确认。
|
||||
|
||||
<div align="center"> <img src="../pictures/停止等待协议1.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/停止等待协议1.png"/> </div>
|
||||
|
||||
|
||||
此时面临两个问题:
|
||||
@@ -472,7 +472,7 @@ RFC 793 建议 MSL 设置为 2 分钟,现在的网络环境已经有了质的
|
||||
|
||||
针对第一个问题,解决方案是如果在给定的时间内没有收到确认,则进行超时重传:
|
||||
|
||||
<div align="center"> <img src="../pictures/停止等待协议2.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/停止等待协议2.png"/> </div>
|
||||
|
||||
|
||||
针对第二个问题,其解决方案依然是超时重传,具体细分为以下两种情况:
|
||||
@@ -481,12 +481,12 @@ RFC 793 建议 MSL 设置为 2 分钟,现在的网络环境已经有了质的
|
||||
|
||||
+ 如果 B 的返回确认没有丢失,只是超过了重传时间后才到达 A,此时 A 可能会收到两次确认,一次是补传得到确认,一次是原有的延迟到达的确认,A 需要丢弃延时到达的确认,不做任何处理:
|
||||
|
||||
<div align="center"> <img src="../pictures/停止等待协议3.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/停止等待协议3.png"/> </div>
|
||||
|
||||
|
||||
在基本的停止等待协议中,一次只发送一个数据单元,此时信道利用率非常低,为了解决这个问题,可以采用流水线传输,一次发送多个数据单元:
|
||||
|
||||
<div align="center"> <img src="../pictures/流水线传输.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/流水线传输.png"/> </div>
|
||||
|
||||
|
||||
当使用流水线传输时,为保证可靠性,需要配合使用连续 ARQ 协议和滑动窗口协议。
|
||||
@@ -495,7 +495,7 @@ RFC 793 建议 MSL 设置为 2 分钟,现在的网络环境已经有了质的
|
||||
|
||||
连续ARQ(Automatic Repeat reQuest)协议指发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,中途不需要等待对方的确认,发送方在每收到一个确认时就把发送窗口向前滑动一个分组的位置:
|
||||
|
||||
<div align="center"> <img src="../pictures/连续ARQ工作原理.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/连续ARQ工作原理.png"/> </div>
|
||||
|
||||
|
||||
通常接收方一般都是采用累积确认的方式。此时接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,它表示:这个分组及其之前的所有分组都已正确到达。
|
||||
@@ -543,19 +543,19 @@ RTO = RTT_S + 4 × RTT_D
|
||||
|
||||
拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大:每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是像慢启动阶段那样加倍地增长。慢启动和拥塞避免通常是配合使用,以保证启动速度,一开始使用慢启动进行成倍增长,当达到某一个阈值 ssthresh 后采用拥塞避免进行稳步尝试:
|
||||
|
||||
<div align="center"> <img src="../pictures/拥塞窗口变化情况.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/拥塞窗口变化情况.png"/> </div>
|
||||
|
||||
|
||||
**3. 快重传和快恢复**
|
||||
|
||||
快重传算法要求接收方不要等待自己发送数据时才进捎带确认,而是要立即发送确认,即使收到了失序报文段也要立即发出对已收到的报文段的重复确认。示例如下:
|
||||
|
||||
<div align="center"> <img src="../pictures/快重传.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/快重传.png"/> </div>
|
||||
|
||||
|
||||
如上图所示,当 M<sub>3</sub> 丢失时,之后发送 M<sub>4</sub> , M<sub>5</sub> , M<sub>6</sub> 时收到的都是对于 M<sub>2</sub> 的重复确认,此时发送方就可以知道 M<sub>3</sub> 已经丢失,需要立即进行重传。由于此时只是个别报文出现了丢失,而不是网络拥塞,所以执行**快恢复**:发送方调整 ssthresh = cwnd / 2,并设置 cwnd = ssthresh = 8 (图中点5),并开始执行拥塞避免算法。
|
||||
|
||||
<div align="center"> <img src="../pictures/拥塞窗口变化情况.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/拥塞窗口变化情况.png"/> </div>
|
||||
|
||||
|
||||
## 六、应用层
|
||||
@@ -571,7 +571,7 @@ RTO = RTT_S + 4 × RTT_D
|
||||
+ **基础结构域名**:又称为反向域名,用于反向域名解析,该顶级域名只有一个 arpa;
|
||||
+ **新顶级域名 New gTLD**:ICANN 机构在 2011 年 6 月 20 日批准新顶级域名,允许任何满足条件的公司或机构进行申请。
|
||||
|
||||
<div align="center"> <img src="../pictures/互联网的域名空间.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/互联网的域名空间.png"/> </div>
|
||||
|
||||
|
||||
### 6.2 文件传输协议 FTP
|
||||
@@ -609,7 +609,7 @@ HTTP 协议定义了浏览器如何向万维网请求文档,以及服务器如
|
||||
|
||||
通常连接到互联网的计算机的协议软件都需要配置多个项目,如 IP 地址,子网掩码,默认路由器的 IP 地址以及域名服务器的 IP 地址等等,为了省去配置的麻烦,现在互联网普遍采用动态主机配置协议 DHCP(Dynamic Host Configuration Protocol),它提供了一种即插即用联网的机制。此时你只需要采用默认的配置即可,如下所示:
|
||||
|
||||
<div align="center"> <img src="../pictures/动态主机配置.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/Full-Stack-Notes/raw/master/pictures/动态主机配置.png"/> </div>
|
||||
|
||||
|
||||
此时需要进行联网的主机在启动时候会广播发现报文(DHCP DISCOVER),其目的地址为 255.255.255.255(即受限广播地址),此时本地网络上的所有主机都能接收到这个广播报文,但只有 DHCP 服务器才会通过提供报文(DHCP OFFER)对此广播进行响应。DHCP 服务器先在其数据库中查找该计算机的配置信息,若找到,则直接返回;若找不到,则从服务器的 IP 地址池取一个地址分配给该计算机。
|
||||
|
||||
Reference in New Issue
Block a user