计算机网络面试题与知识点总结
OSI七层协议、TCP/IP四层协议、通用五层协议
-
应用层
应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间的通信和交互规则。DNS、HTTP、SMTP等协议运行在应用层。
-
运输层
运输层的任务主要是负责向两台主机进程之间的通信提供通用的数据传输服务。TCP、UDP协议运行在运输层。
-
网络层
在计算机网络之间进行通信的两台主机之间可能会经过很多数据链路,也可能会经过很多通信子网。网络层的任务主要是选择合适的网间路由和交换节点,确保数据及时传送。
-
数据链路层
数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
-
物理层
在物理层上所传送的数据单位是比特。
物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异, 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。
TCP三次握手
TCP四次挥手
TCP和UDP的区别
- TCP是面向连接的(发送数据之前先建立连接),UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务,即,通过TCP连接传送的数据:无差错,不丢失,不重复且按序到达;UDP尽最大努力交付,即,不保证可靠交付
- TCP面向字节流,即,TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞机制,因此网络出现拥塞不会是源主机的发送速率降低(对实时应用很有用,如:IP电话,实时视频会议等)
- 每条TCP连接只能是点对点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP首部开销20字节,UDP的首部开销小,只有8字节
- TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
TCP如何保证可靠传输
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- TCP 的接收端会丢弃重复的数据。
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制: 当网络拥塞时,减少数据的发送。
- ARQ 协议: 自动重传请求(Automatic Repeat-reQuest) 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
TCP四种拥塞控制算法(或者叫拥塞控制的四个步骤)
发送方一开始发送数据时,并不知道接收方一次能够接受多少数据,因此采用如下四种方式来控制发送的数据包的多少(为什么要改变一次发送数据量的大小?因为如果每次发送一个效率太低,每次发送100个可能发送过快,而接收方来不及接收)
- 慢开始:发送方一开始发送 cwnd=1, 当收到接收方的确认信息后,下次发送 cwnd=2,4,8,16。每次发送以指数形式增长。
- 拥塞避免:一直以指数方式增长可能增长过快,因此TCP给它设置了一个阈值 ssthresh, 当cwnd达到该阈值后,变成一个一个增加,直到收到接收方的重传信息,此时数据发生超时或者丢失,于是,接下来,令ssthresh=max_cwnd/2,然后重新执行慢开始算法
- 快重传:接收方会对最后一个已收到的报文段进行确认,当连续回复三个相同的确认消息时,说明下一个报文段丢失了,发送方执行快重传(即快速重传丢失的报文段)
- 快恢复:快恢复是在快重传的现象下,为了避免拥塞,将cwnd设置为max_cwnd的一半。也就是说:虽然出现了报文丢失,但发送方并不觉得此时已经发生了拥塞,因此并不执行慢开始,而是将cwnd设置为max_cwnd的一半,然后逐次+1,类似拥塞避免算法的后半部分。
在浏览器输入url地址到显示网页的过程
上图有一个错误,请注意,是 OSPF 不是 OPSF。 OSPF(Open Shortest Path First,ospf)开放最短路径优先协议,是由 Internet 工程任务组开发的路由选择协议
各种协议和HTTP协议之间的关系
描述你所了解的HTTP协议1.0、1.1、2.0、3.0中包含的比较重要的改进
版本 | 产生时间 | 内容 |
---|---|---|
HTTP 0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 |
HTTP 0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 |
HTTP 1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 |
HTTP 1.1 | 1997年 | 支持持久连接(长连接)、引入了更多的缓存控制策略、增加Host头处理,可以传递hostname、管道机制、分块传输编码 |
HTTP 2.0 | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 |
HTTP 3.0 | 2018年 | 线头阻塞(HOL)问题的解决更为彻底、切换网络时的连接保持 |
HTTP长连接,短连接
在HTTP/1.0中默认使用短连接,短连接即,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。例如:当客户端访问一个网页时,其中包含某些web资源(JavaScript、css等),每遇到一个这样的资源,浏览器就会建立一个连接。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头部添加 Connection:keep-alive
keep-alive
不会永久保持连接,它有一个保持时间,不同的服务器可以设置该保持时间。另外,实现长连接需要客户端和服务器端都支持长连接。
HTTP长连接和短连接的实质,其实是TCP的长连接和短连接。
HTTP 1.0和1.1的主要区别
- 长连接:在 HTTP/1.0 中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于 TCP/IP 协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。HTTP 1.1 起,默认使用长连接 ,默认开启
Connection: keep-alive
。 HTTP/1.1 的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到 HTTP 的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。 - 错误状态响应码:在 HTTP1.1 中新增了 24 个错误状态响应码,如 409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理:在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用:HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
HTTP2.0和HTTP1.X相比的新特性
- 新的二进制格式(Binary Format):HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
- 多路复用(MultiPlexing):即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
- header压缩 : 如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
- 服务端推送(server push) :同SPDY一样,HTTP2.0也具有server push功能。
HTTP和HTTPS的区别
-
端口:HTTP使用80端口,而HTTPS使用443端口
-
安全性和资源消耗:HTTP协议运行在TCP之上,使用明文传输,HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上,使用密文传输,通常采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。因此,HTTPS的安全性比HTTP高,但消耗的资源也比HTTP更多。
- 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有 DES、AES 等;
- 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有 RSA、DSA 等。
评论区