前端面试题系列文章:
【12】「2022」性能优化相关知识点
【13】「2022」H5相关知识点
X-Mind原图地址:
1. 常见的计算机网络体系结构
OSI体系结构(7层)
是理论上的国际标准,但是在生产商的真正生产应用过程中,利用的是TCP/IP体系结构(4层)
。而为了方便教学,我们又将网络接口层,分成了数据链路层和物理层,被称为原理体系结构(5层)
。
2. 原理体系中各个层要解决的问题
- 物理层: 解决在各种传输媒体上传输0和1的问题
- 数据链路层: 解决分组在一个网络(或一段链路)上传输的问题
- 网络层:解决分组在多个网络上传输(路由)的问题
- 运输层:解决进程之间基于网络的通信问题
- 应用层: 解决通过应用程序的交互来实现特定网络应用的问题
3. 物理层
3.1 物理层的基本概念
物理层的主要任务是解决在各种传输媒体上传输0和1的问题。物理层为数据链路层屏蔽了各种传输媒体之间的差异,数据链路层只需要关心本层的协议和服务,不需要关心具体的传输媒体是什么。
3.2 传输媒体
传输媒体分为两种:导引型传输媒体
和非导引型传输媒体
。
- 在导引型传输媒体中,电磁波被沿着固体媒体传播,常见的有同轴电缆、双绞线、光纤、电力线。
- 非导引型传输媒体是指自由空间,比如无线电波、微波、红外线、可见光。
3.3 传输方式
- 串行传输和并行传输
串行传输: 数据是一个比特一个比特一次发送的,因此只需要一条链路即可
并行传输:一次发送n个比特,所以需要收发双方之间有n条传输线路,并行传输的优点是速度快,但成本高
那么计算机网络更是串行传输的还是并行传输的呢?
无论从通信速度、造价还是通信质量上来看,现今的串行传输方式都比并行传输方式更胜一筹。
- 同步传输和异步传输:
同步传输: 数据块以稳定的比特流的形式传输。字节之间没有间隔; 接收端在每个比特信号的中间时刻进行检测,以判别接收到的是比特0还是比特1; 由于不同设备的时钟频率存在一定差异,不可能做到完全相同,在传输大量数据的过程中,所产生的判别时刻的累计误差,会导致接收端对比特信号的判别错位;
异步传输: 以字节为独立的传输单位,字节之间的时间间隔不是固定; 接收端仅在每个字节的起始处对字节内的比特实现同步; 通常在每个字节前后分别加上起始位和结束位
计算机网络中是同步传输还是异步传输的呢?
在计算机中,各个部件之间的相互协作都需要靠时钟来定时和定序。在计算机网络中,数据的传输接收端和发送端也需要依靠时钟来确定采用位置和时间间隔。但是由于任何两个系统之间的时钟完全同步是不可能的,随着误差的积累,最终终究会导致取值位置的错误和时间间隔的错位。为了解决这一问题,计算机网络中常采用同步传输和异步传输两种同步技术。
- 单工通信、半双工通信、全双工通信
单工通信:即只能有一个方向的通信,如无线广播或有线电视。
半双工通信:双方可以发送消息,但不能同时发送消息,如对讲机
全双工通信:收发双方可以同时发送和接受消息,如打电话
计算机目前采用的是那种方式?
顺带说一句,目前的网卡一般都支持全双工,以达到更高的数据传输速度
3.4 消息 -> 数据 -> 信号
我们将需要计算机帮忙处理的文字、图片、视频、音频等称为消息
。数据
是运送消息的实体,计算机只能处理 二进制的数据。信号
是数据的电磁表现。
4. 数据链路层
4.1 数据链路层的概念
数据链路层提供一段链路相邻节点间的数据帧传输服务
4.2 易于理解数据链路层的小故事
假设网络层是一个Boss,他让他的小秘书数据链路层
去送8个文件给公司B,小秘书呢就找到快递小哥物理层
去做这个事情。但是物理层
是个傻子,他只知道拿起文件就一路狂奔到公司B,中间丢没丢东西也不清楚,所以数据链路层
的小秘书必须心里有个底,一共送了8个文件,并且写到了快递外层。公司B的小秘书在拿到传送的文件时候,就知道在传送过程中有没有文件丢失了。如果有丢失就快递小哥重新拿丢失的文件。
4.3 数据链路层中的主要功能
- 封装成帧: 数据链路层并不是直接转发网络层下发的数据(故事中Boss给的文件),她需要把文件编号封装一下。封装的网络数据包,在数据链路层就称为
帧
- 差错检测:物理层在实际的传输过程中,难免会产生产差错
(比如噪声干扰、信号传输的距离过远等)
:1可能会变成0,而0也可能变成1。所以数据链路层在发送的帧中会加入差错检测码
来检测传输过程中是否产生了比特差错,常见的有循环冗余校验CRC
- 可靠传输:之前讲到的帧在传输过程中可能出现误码的情况,我们称之为比特差错。实际上比特差错只是传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括
分组丢失
、分组失序
以及分组重复
。那么如何才能实现可靠传输呢?计算机网络中采用了三种协议,他们分别是停止-等待协议SW
、回退N帧协议GBN
、选择重传协议SR
4.4 停止等待协议(stop-and-wait)、回退N帧协议(go-back-n)、选择重传协议(SR)
4.5 点对点协议PPP
- 点对点协议PPP(Point-to-Point Protocal)是目前使用的最广泛的点对点数据链路层协议
- PPP协议是因特网工程任务组IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准[RFC1661,RFC1662]
- 数据链路层使用的一种协议,它的特点是:简单;只检测差错,而不是纠正差错;不使用序号,也不进行流量控制;可同时支持多种网络层协议
- PPPoE 是为宽带上网的主机使用的链路层协议
PPP协议在点对点链路传输各种协议书举报提供了一个标准方法,主要由以下三部分构成:1.对各种协议数据报的封装方法(封装成帧)、2.链路控制协议LCP(用于建立、配置以及测试数据链路的连接)、3.一套网络控制协议NCPs(其中的每一个协议支持不同的网络层协议)
5. 网络层
5.1 网络层的基本概念
网络层的主要任务是实现网络互连,进而实现数据报在各网络之间的传输
5.2 分组交换
当主机A要给主机B发送数据时,首先将数据划分成若干个等长的分组
,然后将这些分组发往路由器A
。当路由器A收到分组后先缓存下来,然后再按照一定的算法确定该分组下一跳改发往哪个节点,最终达到主机B。
5.3 数据报
数据报是通过网络传输的数据的基本单元
,包含一个报头(header)
和数据
本身。说白了,就是带地址的数据,比如你的写了一句微信"你好",这串文字本上加上源地址,目的地址,就是数据报。
5.4 数据报格式
- 一个IP数据报由
首部
和数据
两部分组成 - 首部的前面一部分是固定长度,共20字节,长度固定。后面的40字节是可选部分,长度可变。
- 版本: 标识IP协议的版本,通信双方使用的IP协议版本必须一致,目前广泛使用的IP协议版本号为4(即IPv4)
- 首部长度: 表示IP数据报首部的长度。
- 区分服务: 只有在使用区分服务时才起作用,一般情况下都不使用该字段
- 总长度: 首部+数据部分铲毒
- 标识:属于同一个数据报的各分片数据应该具有相同的标识
- 标志:DF位:1表示不允许分片、0表示允许分片。 MF位: 1表示”后面还有分片“ 0表示”这是最后一个分片“
- 片偏移:指出分片数据的数据载荷部分在原数据报的偏移量(具体见下图)
5.5 IP分片
为什么要分片?由于链路层封装的数据大小是有限制的
,以太网的MTU
(MTU是指一种通信协议的某一层上面所能通过的最大数据包大小)为1500字节
。
5.6 IPv4地址(简称IP地址)分类
IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口
分配一个在全世界范围内是唯一的32比特的标识符
。
每一类地址都由两个固定长度的字段组成,其中一个字段是
网络号 net-id
,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id
,它标志该主机(或路由器)。
5.7 ARP协议
为什么需要ARP协议呢?
之前在IP数据报中看到,我们需要在首部填写源地址
和目的地址
,这两个地址是Mac地址
。那什么是Mac地址呢?Mac地址又称物理地址,请注意:不要被 “物理” 二字误导认为物理地址属于物理层范畴,物理地址属于数据链路层范畴。一般在在网卡上。
由于A设备给B设备发送数据报时,可能不知道B设备的mac地址,所以就需要通过ARP协议去查找。
- step1: 每台主机都会在自己的ARP缓冲区建立一个
ARP列表
,以表示IP地址
和Mac地址
的映射关系。当源主机给目的主机发送数据报,会先检查本地的ARP列表
是否存在映射关系,如果有,则直接返回 - step2:如果没有,则向本地网段发送一个
ARP请求
的广播包,查询改主机对应的Mac地址
- step3: 此
ARP请求
中包含了源主机IP地址
,源主机Mac地址
,目的主机IP地址
。网络中的所有主机收到ARP
请求后,会检查包中的IP地址
是否和自己的IP地址一致,如果不相同就忽略,如果相同则记录下发送端的Mac地址
和IP
地址添加到自己ARP列表
(如果已经存在则更新),并且给源主机发送一个ARP响应
数据报,告诉对方自己是要查找的ARP地址
。 - step4: 源主机收到
ARP响应
后,将得到的目的主机的Mac地址
添加到自己的ARP列表
中,并利用此信息开始传输数据(如果没有收到ARP响应
,表示ARP查询失败
)
5.8 ICMP协议
ICMP协议是一个网络层协议。 为什么我们需要ICMP协议呢?
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输
。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能-ICMP协议。
ICMP协议的功能主要有:
- 确认IP包是否能够达到目标地址
- 通知在发送过程中IP包被丢弃的原因
以下是常见的4中ICMP差错报告报文
- 终点不可达 、 2. 时间超时、 3. 参数问题、 4. 改变路由
常见的ICMP应用举例: 1. ping命令 2. 路由跟踪(traceroute)
6. 运输层
6.1 运输层的基本概念
之前的内容中所介绍的物理层
、数据链路层
、网络层
他们共同解决了将主机通过异构网络所连接起来所面临的的问题,实现了主机到主机的通信
。
但实际上在计算机网络中进行的通信的真正实体是位于通信两端主机中的进程!!!
而运输层正是提供了为应用进程间的逻辑通信。
6.2 进程和端口号
每台主机中有多个进程,那么我们怎么知道改数据是交给哪个进程的呢?因此我们需要在传输数据中来明确指定该数据是交给哪个进程来处理的。
图中的AP1、AP2、AP3、AP4为不同的进程,运行在计算机上的进程使用
PID
来标识。但实际在运输层的传输过程中是用端口号来标识进程的,为什么呢?
由于不同的操作系统(windows、Linux、Mac OS)使用不同格式的进程标识符
,为了使运行不同操作系统的计算机的应用进程间能相互通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识
,解决方案就是端口号。
6.3 用户数据协议UDP(User Datagram Protocal)
UDP协议是参考模型中一种
无连接
的传输层协议,提供面向事务的简单不可靠信息传送服务。
- UDP支持单播、多播、以及广播(换句话说UDP支持一对一、一对多、以及一对全的通信)
- UDP对应进程交下来的报文既不合并也不拆分,应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整的报文(换句话说,UDP是面向应用报文的)
- UDP向上层提供无连接不可靠传输服务,那么谁来保证可靠的传输呢?是由UDP的上一层协议,应用层来保证。
- UDP没有拥塞控制,适合很多实时应用。也就是说如果网络堵塞,UDP不管那么多,继续按照自己的速率发送数据,那有人就会说,这协议是不是有点坑?路上都堵了还是使劲发,但反过来看这也是UDP协议的有点,它允许丢包,如果你的网络状况不错,UDP协议就非常适合(比如IP电话、视频会议等实时应用)
- UDP结构
6.4 传输控制协议TCP(Transimission Control Protocal)
TCP协议简单来说是一种位于传输层的,面向连接的、可靠的、基于字节流的传输层通信协议
- 使用TCP协议的通信双方,在进行数据传输之前,必须使用”三报文握手“建立TCP连接,TCP建立成功后,通信双方之间就好像有一条可靠的通信信道,通信双方使用这条基于TCP连接的可靠信道进行通信。(
TCP仅支持单播,也就是一对一的通信
) - TCP的传输过程:一方面
发送方
会把应用进程交付下来的数据块看做是一连串无结构的字节流,并把他们编号存储在自己的发送缓存中,TCP会提取部分字节构建TCP报文并发送(UDP是直接将应用层交付的报文发送)。另一发面接收方
从接收到的TCP报文中取出载荷数据并存储在接收缓存中,并将数据交给应用进程(重点是TCP报文可是面向字节的,支持对应用层下发的数据进行拆分,这正是TCP实现可靠传输、流量控制、以及拥塞控制的基础
)。 - TCP向上提供面向连接的可靠传输服务
- TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达。总结一下就是,
可靠有序,不丢不重
。 - TCP结构
6.5 TCP和UDP的对比小结
UDP | TCP | |
---|---|---|
通信方式 | 一对一、一对多、一对全 | 一对一 |
传输过程 | 直接传输应用层交付的数据、不拆分(面向报文) | 将应用层的数据进行拆分,提取部分字节分别转发(面向字节) |
可靠传输 | 无连接不可靠的传输服务 | 面向连接的可靠传输服务 |
流量控制、拥塞控制 | 不能保证 | 可以保证 |
结构 | 8字节(首部)+ 数据部分 | 20~60字节(首部)+ 数据部分 |
最后思考一下。不是说UDP协议不可靠吗?那么为什么还要用UDP协议?
实际上,基于UDP协议也是可以实现可靠传输的,只不过可靠传输的部分交给应用层来做了。之前讲到UDP协议在对比TCP来讲有很多优点,比如数据包小,不会持续占用服务器资源等,而我们在使用了UDP协议的应用层实现了可靠传输(相当于实现了TCP有的可靠传输),但是不会有拥塞控制和慢启动等缺点。
7.应用层
7.1 应用层的概念
应用层对应用程序的通信提供服务
7.2 应用层的常见模型
- C/S方式: 如电子邮件、万维网WWW、文件传输FTP等。客户是服务请求方,服务器是服务提供方。比如我们去访问一个网站,我们就是服务请求方(Client),服务器就是服务提供方(Server),返回给我们需要展示的页面和数据。
- P2P方式:在P2P的方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。比如迅雷下载也是使用P2P技术。
在前些年,迅雷用户会发现你在下载的同时(甚至下载完成后)迅雷还在上传的原因。自2020年起,国家规定禁止P2P下载,具体原因可以参考一下链接
7.3 短链接和长链接
-
短连接方式: 当客户端有请求时,会建立一个TCP连接,接收到服务器请求后,就会断开。下次有请求,再建立连接,收到响应后再断开。
这种方式有两个缺点: 1. 建立连接需要3次”握手“,断开需要4次”挥手“,如果每次只发送一个数据报,利用率太低了 2. 主动断开TCP连接的一端,TCP状态机会进入
TIME_WAIT
状态,如果频繁使用短连接,可能会使客户端的机器产生大量处于TIME_WAIT
状态TCP连接。 -
长连接方式:客户端和服务端建立TCP连接后,会一直使用这条连接进行数据交互,直到没有数据传输或异常断开。在空闲期间,通常会使用
心跳数据包(keep-alive)
保持链路不断开。目前长连接方式应用范围比较广泛。
7.4 DNS协议
域名系统DNS是因特网使用的命名系统,用于把便于人们记忆的域名(www.hnust.com)
转化为IP数据报中所需的IP地址。
- 递归查询
我们的浏览器、操作系统、路由器都会缓存一些URL对应的IP地址,统称为DNS高速缓存。这是为了加快DNS解析速度,使得不必每次都到根域名服务器中去查询。
- 迭代查询
迭代查询的方式就是,局部的DNS服务器并不会自己向其他服务器进行查询,而是把能够解析该域名的服务器IP地址返回给客户端,客户端会不断的向这些服务器进行查询,直到查询到了位置
- 通信过程
首先DNS会从本地的缓存中查找,是否有该域名对应的IP地址,如果没有则会向DNS服务器发送查询报文
,报文中包含了要查询的域名
(中间包括了一些缓存列表以及分布式DNS集群的工作如上图),该DNS客户机最终会受到一份回答报文
,其中包含了该主机对应的IP地址
,一旦收到DNS服务器返回的IP地址,就可以向改IP地址定位的HTTP服务器发送TCP连接请求。
7.5 超文本传输协议HTTP(HyperText Transfer Protocal)
在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是HTTP协议。
HTTP是一个应用层协议,它使用TCP链接进行可靠的传输
- 工作过程
- 每个万维网网点都有一个服务器进程,他不断地监听TCP的端口80,以便发现是否有浏览器向它发送连接建立请求。(好勤劳)
- 一旦监听到连接建立请求并建立了TCP连接后,浏览器就向服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。
- 最后,TCP连接被释放。
- HTTP请求报文格式
- HTTP响应报文格式
8. 互联网、因特网、万维网概念梳理
8.1 互联网internet
凡是由能彼此通信的设备组成的网络就叫互联网,即使仅有两台机器(计算机、手机等),不论用何种技术使其彼此通信,都叫互联网,所以,互联网有广域网、城域网及局域网之分,国际标准的互联网写法是internet,字母i一定要小写!
8.2 因特网Internet
而因特网是互联网中的一种,它可不是仅有两台机器组成的网络,而是由上千万台设备组成的网络(该网络具备很大的规模)。因特网使用TCP/IP协议
让不同的设备可以彼此通信。但使用TCP/IP协议
的网络并不一定是因特网,一个局域网也可以使用TCP/IP协议
。
8.3 万维网
只要应用层使用的是HTTP协议,就称为万维网(World Wide Web)
。