计网常见八股

目录

  1. 1. 七层模型
  2. 2. 五层模型
  3. 3. TCP/UDP
    1. 3.1. TCP三次握手
      1. 3.1.1. 能不能只握手两次?
    2. 3.2. TCP四次挥手
    3. 3.3. 如何解决粘包问题
  4. 4. HTTP协议
    1. 4.1. 从输入网址到网页显示
    2. 4.2. 跨域问题

持续更新,整理一些面试中可能会被问到的常见内容

七层模型

单纯为了背名称而背。。

层级 名称 举例
7 应用层 HTML,json
6 会话层 一个建立的SSH连接
5 协议层 HTTP,SSH
4 传输层 TCP/UDP,UDP2raw
3 网络层 IP
2 数据链路层 PPPoE拨号
1 物理层 网线上的高低电平

KCP这种基于UDP的改进协议感觉既可以算4层也可以算5层。

五层模型

把感觉没太大存在意义的会话层和协议层合到应用层里面了

层级 名称 举例
5 应用层 SSH,HTTP
4 传输层 TCP/UDP,UDP2raw
3 网络层 IP
2 数据链路层 PPPoE拨号
1 物理层 网线上的高低电平

TCP/UDP

TCP三次握手

  1. 第一步 - 客户端向服务器发送请求:
    • 客户端
      • 生成:客户端序列号=随机整数
      • 发送:SYN(客户端序列号)->服务器
  2. 第二步 - 服务器回应并确认请求:
    • 服务器
      • 收取:SYN
      • 生成:服务器序列号=随机整数
      • 发送:SYN-ACK(服务器序列号)->客户端
  3. 第三步 - 客户端确认服务器的响应:
    • 客户端
      • 收取:SYN-ACK
      • 发送:ACK(服务器序列号+1)->服务器

服务器和客户端都得知对方的收发能力正常,连接建立。

能不能只握手两次?

不能,因为握手两次时,客户端可以确认服务器的接收和响应功能都正常,但是服务器无法确认客户端的接收能力,如果客户端接收不到服务器的响应,就会一直重发SYN,服务器就会一直回复SYN-ACK,直到服务器的资源耗尽。

TCP四次挥手

  1. 第一步 - 客户端发送关闭连接请求:
    • 客户端发送FIN,来表示它已经完成了数据的发送。这个步骤超时可以重传
    • 客户端现在对数据只收不发
  2. 第二步 - 服务器确认客户端的关闭请求:
    • 服务器接收到客户端的FIN包后,会向客户端发送ACK来确认收到FIN。这个步骤超时可以重传
    • 此时,服务器进入半关闭状态,数据只发不收。
  3. 第三步 - 服务器发送关闭连接请求:
    • 当服务器决定关闭连接时,它会发送一个FIN包给客户端,表示它已经完成了数据的发送。
    • 服务器此时关闭了它到客户端的数据流。
  4. 第四步 - 客户端确认服务器的关闭请求:
    • 客户端接收到服务器的FIN包后,发送一个ACK包作为确认。

此时,客户端和服务器都完成了连接的关闭,连接正式终止。

如何解决粘包问题

在报文的首部加上长度信息。如果过长就分段发送。如果可以考虑使用ws协议也可以换用ws协议来发送。

HTTP协议

从输入网址到网页显示

  1. DNS解析:

    • DNS解析首先会检查缓存,顺序是浏览器自身的DNS->系统DNS服务器缓存
    • 如果缓存中没有,浏览器会向设定的DNS服务器发送一个DNS解析请求。
    • 本地DNS服务器会查询其缓存,如果有相关的记录,它将返回IP地址给浏览器。否则,本地DNS服务器将继续向更高级别的DNS服务器,一直到根服务器发送请求,直到找到一个能够提供所需IP地址的DNS服务器。
      • 如果没找到这个地址对应的IP,某些DNS服务商可能会进行劫持并在这个页面上显示广告。
  2. 建立TCP连接:

    • 一旦浏览器获得了目标网站的IP地址,它将使用该IP地址创建一个TCP连接。
    • 浏览器会发送一个请求(通常是HTTP请求)到目标服务器,该请求包括了要获取的页面或资源的路径等信息。
  3. 服务器响应:

    • 目标服务器收到请求后,会处理请求并发送一个HTTP响应。
    • 这个响应包含了所请求页面的HTML内容以及其他可能的资源,如图像、样式表和JavaScript文件的链接。
  4. 页面渲染:

    • 一旦浏览器接收到服务器的响应,它会开始解析HTML内容,并从中获取其他资源的链接(如图像、样式表和JavaScript文件)。
    • 浏览器会向服务器请求这些资源,以便渲染完整的页面。
    • 一旦浏览器收到所有资源,它会将页面呈现在屏幕上,并执行任何包含的JavaScript代码以实现互动和动态效果。

跨域问题

浏览器请求资源的时候,服务器返回的资源会带有允许哪些请求源访问的信息。比如 http://www.aaa.com/index.html 请求了 http://www.bbb.com/1.jaon,那么 bbb.com 的服务器在返回这个请求的时候会附上其所允许的源链接。如果这个源连接不是 www.aaa.com,那么这个返回报文会被浏览器屏蔽。