less than 1 minute read

计算机网络常见面试题总结

1. OSI与TCP/IP各层的结构与功能,都有哪些协议?

OSI体系有七层,TCP/IP体系四层,折中学习五层协议。

自上而下的介绍各层作用。

应用层

通过应用进程间的交互来完成特定网络应用。常见的协议有DNS、HTTP、SMTP、FTP、TELNET、POP3等等。

运输层

向两台主机进程之间的通信提供通用的数据传输服务。主要的协议有TCP、UDP

网络层

选择合适的网间路由和交换结点,确保数据及时传送。主要的协议有IP、ICMP

数据链路层

简称为链路层。两台主机之间的数据传输需要使用专门的链路层协议。主要的协议有ARP

物理层

实现相邻计算机节点之间比特流的透明传送。

2. TCP三次握手和四次挥手(重要)

三次握手

TCP为了确保对方能正确接收消息,采用了三次握手建立连接。具体流程如下:

  1. 客户端发送带有SYN标志的数据包给服务端。(服务端确保自己能正常接收,服务端能正常发送)
  2. 服务端收到后发送带有SYN/ACK标志的数据包给客户端。(服务端能正常发送)
  3. 客户端收到后发送带有ACK标志的数据包。(客户端能正常接收)

SYN:同步序列编号。TCP连接的第一个包,非常小的数据包。

四次挥手

  1. 客户端发送FIN,关闭客户端到服务器的数据传送
  2. 服务器收到FIN,发送ACK
  3. 服务器把剩余数据发送完之后关闭连接,发送FIN
  4. 客户端发送ACK

3. TCP,UDP协议的区别

TCP面向连接,传输可靠,效率慢,需要的资源多,用于对通信数据可靠性高的场合。TELNET、HTTP等

UDP无连接,提供不可靠的传输服务,效率高,所需资源少,用于对速度要求高的场合。如语音、视频、直播等

4. TCP协议如何保证可靠传输

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制: 当网络拥塞时,减少数据的发送。
  7. ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

5. 在浏览器输入url地址,显示主页的过程(重要)

1.DNS解析

假设输入地址为www.baidu.com,这只是域名,真正的唯一标识是IP地址,但是IP地址不好记,所以需要DNS服务器帮我们解析,把网址转换成IP地址。DNS服务器分为本地域名服务器、根域名服务器、顶级域名服务器,解析过程是一个递归的过程。如果本地DNS服务器没有找到我们要的域名,就会向根域名服务器查询(根没有向顶级查询)。最后本地域名服务器把查询到的IP地址缓存到本地,方便下次使用。

如果每次使用都要重新查询,那会非常耗费资源,所以需要采用缓存。缓存包括浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存、主域名服务器缓存。

DNS负载均衡。对于大型网站来说,必定是多个服务器在支持,也就有多个IP地址,DNS会根据负载量返回合适的IP地址供用户访问。常见的CDN就是利用DNS重定向技术,把距离用户最近的IP地址返回给用户,提高响应速度。

通过域名获取IP地址的方法,直接ping一下域名就行

QQ截图20210414160225.jpg

2.TCP连接

HTTP协议是基于TCP的,所以首先需要建立TCP连接,具体的过程可以见上文的三次握手。

3.发送HTTPS请求

因为HTTP报文是明文的,所以有安全性问题。后来采用的HTTPS改进了这个问题,HTTPS其本质是HTTP+SSL。先用SSL对HTTP报文进行加密再传输。HTTPS相比于HTTP提供了安全保证,但会带来时间上的损耗。HTTP协议端口80,HTTPS端口443。报文包括请求行,请求报头,请求正文

4.服务器处理请求并返回HTTP报文

服务器返回的响应报文,由三部分组成,包括状态码,响应报头,响应报文

5.浏览器解析渲染页面

6.连接结束

6. 状态码

  类别 原因
1XX informational 接受的请求正在处理
2XX success 请求正常处理完毕
3XX redirection 需要进行附加操作以完成请求
4XX client error 服务器无法处理请求
5XX server error 服务器处理请求出错

7. 各种协议与HTTP协议之间的关系

8. HTTP长连接,短连接

默认使用长连接,当网页打开之后,客户端和服务器之间的TCP连接不会关闭(有一个保持时间)。

短连接则是每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

9. HTTP不保存状态,如何保存用户

服务端使用Session记录用户状态,可以把session存在redis或者数据库里,在Cookie中附加SessionID跟踪session

10.Cookie的作用是什么?和Session有什么区别?

Cookie 一般用来保存用户信息 比如①我们在 Cookie 中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);③登录一次网站后访问网站其他页面不需要重新登录。Session 的主要作用就是通过服务端记录用户的状态。 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。

Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。

Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。

11.HTTP1.0和HTTP1.1的主要区别是什么?

  1. 长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
  2. 错误状态响应码 :在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  3. 缓存处理 :在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  4. 带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

12.URI和URL的区别是什么?

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
  • URL(Uniform Resource Location) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

13.HTTP和HTTPS的区别?

  1. 端口 :HTTP的URL由http://起始且默认使用端口80,而HTTPS的URL由https://起始且默认使用端口443。

  2. 安全性和资源消耗:HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。

    • 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
    • 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

转自JavaGuide