计算机网络八股文

计算机网络体系架构?

  • OSI结构:理论上的
    • 7应用层:定义了应用进程间通信和交互的规则,常见协议有HTTP、SFTP、DNS、WebSocket
    • 6表示层:数据的表示、安全、压缩。确保一个系统的应用层所发消息能被另一个系统的应用层读取。GIF、JEPG
    • 5会话层:建立、管理、终止会话,是用户应用程序和网络之间的接口。RPC、SQL
    • 4传输层:提供源端和目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供了逻辑通信。TCP、UDP、SSH
    • 3网络层:将网络地址翻译成对应的物理地址,实现不同网络之间的路径选择,寻址,路由。ICMP、IGMP、IP等
    • 2数据链路层:在物理层提供比特流服务的基础上、建立像零件点之间的数据链路。
    • 1物理层:建立、维护、断开物理连接。
  • TCP/IP结构:实际上的 应用 传输 网络 链路层
  • 五层结构:为了介绍原理而折中的,在这个基础上层层包装层层拆包

DNS的迭代查询和递归查询?

递归查询举例:

客户端想要解析 www.example.com 的IP地址,发送请求到本地DNS解析器:

  1. 本地解析器查询根DNS服务器。

  2. 根DNS服务器返回 .com TLD服务器地址。

  3. 本地解析器查询 .com TLD服务器。

  4. .com TLD服务器返回 example.com 的权威DNS服务器地址。

  5. 本地解析器查询 example.com 的权威DNS服务器。

  6. 权威DNS服务器返回 www.example.com 的IP地址。

  7. 本地解析器将IP地址返回给客户端。

迭代查询举例:

客户端想要解析 www.example.com 的IP地址,依次查询各个DNS服务器:

  1. 客户端查询本地DNS解析器。

  2. 本地解析器查询根DNS服务器。

  3. 根DNS服务器返回 .com TLD服务器地址。

  4. 本地解析器将 .com TLD服务器地址返回给客户端。

  5. 客户端查询 .com TLD服务器。

  6. .com TLD服务器返回 example.com 的权威DNS服务器地址。

  7. 客户端查询 example.com 的权威DNS服务器。

  8. 权威DNS服务器返回 www.example.com 的IP地址。

  9. 客户端获取到IP地址。

结论

递归查询和迭代查询是DNS查询的两种方式,各有优缺点。递归查询对客户端友好,但增加了DNS解析器的负担;迭代查询对解析器负担小,但增加了客户端的复杂性。实际应用中,客户端通常会使用递归查询,通过本地DNS解析器处理大部分的查询过程。

DNS解析过程?

常见端口:

  • 21:FTP
  • 22:SSH
  • 53:DNS解析
  • 80:HTTP
  • 443:HTTPS
  • 1080:sockets
  • 3306:mysql

常见状态码:

  • 1XX:临时的响应,客户端应继续请求。
  • 2XX:请求已成功被服务器接收。
  • 3XX:用来重定向。
  • 4XX:请求可能出错。
  • 5XX:服务器在尝试处理请求时发生了错误。
  • 404:表示客户端(如浏览器)请求的资源在服务器上不存在

GET和POST的区别?

  • 传参方式不同,一个在URL一个在请求体
  • 幂等性
  • GET大部分都被CDN缓存起来了

HTTP报文结构?

  • 请求报文:

    • 报文首部
      • 请求行
      • 请求首部字段
      • 通用首部字段
      • 实体首部字段
    html 复制代码
    GET /index.html HTTP/1.1
    Host: www.javabetter.cn
    Accept: text/html
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
    • 报文主体
  • 响应报文

    • 报文首部
      • 状态行
      • 响应首部字段
      • 通用首部字段
      • 实体首部字段
    html 复制代码
    HTTP/1.0 200 OK
    Content-Type: text/plain
    Content-Length: 137582
    Expires: Thu, 05 Dec 1997 16:00:00 GMT
    Last-Modified: Wed, 5 August 1996 15:55:28 GMT
    Server: Apache 0.84
    <html>
      <body>沉默王二很天真</body>
    </html>
    • 报文主体

URI 和 URL 有什么区别?

  • URI,统一资源标识符(Uniform Resource Identifier, URI)
  • URL,统一资源定位符(Uniform Resource Location),它是 URI 的一种子集,主要作用是提供资源的路径。

HTTP 1-3的区别?

  • 1.0
    • 无状态协议
    • 非持久连接,可设置Connection:keep-alive强制开启长连接
  • 1.1:
    • 持久连接
    • 支持在前一个响应到达之前发送下一个
  • 队头阻塞问题:如果第一个响应阻塞了,那么即使后面的响应准备好了也发不出去
  • 2.0:
    • 采用二进制协议,所以grpc基于2.0的话传递的时候是通过byteArray实现的,以前的是文本
    • 多路复用,一个TCP连接上进行多个HTTP请求或者相应,多个请求分解成独立的帧,交错发送,减轻了HTTP 1.x的队头阻塞问题,还是依赖顺序的
    • 头部压缩,减少带宽消耗,表示层实现gzip压缩
  • 3.0:
    • 3.0 基于 QUIC 协议,Quick UDP Connections
    • 真正实现了不同的流之间独立传输,2.0仍然需要保证顺序
    • 在传输过程就完成了TLS三次握手

HTTP长连接相关参数:

  • keep-alive
  • keep-alive timeout
  • TCP中也有三个参数,闲置多久之后就会间隔一个时间发送侦测包,发生这么多次没有响应就断开连接

HTTP和HTTPS

  • 在HTTP的基础上加入了SSL(安全套接字)/TLS(传输层安全)协议,确保传输过程是加密的。
  • 解决了什么问题:
    • 安全问题
    • TLS握手:
      • 客户端相服务器发送ClientHello消息,包括支持的TLS版本、随机数等等
      • 服务器回应ServerHello,选择一个客户端提议的版本,并发送数字证书
      • 客户端验证证书的合法性,生成一个对话密钥通过公钥加密后发送给服务器
      • 服务器私钥解密得到对话密钥
      • 加密通信
    • 涉及到了对称加密和非对称加密
      • 握手阶段密钥交换就是非对称
      • 传输就是对称

TCP的流量控制:

  • 三次握手协商窗口大小,单位是字节,最大是(2^16-1)<<14有个窗口扩展选项,大概1G
  • 会约定每次最多能发多少
  • 接收方窗口
  • 发送方窗口

拥塞控制:

  • 避免出现拥堵时,发送方的数据填满整个网络

  • 发送方维护一个cwnd,发送窗口的值是cwnd和滑动窗口可以接收窗口的min,这里单位是MSS

  • 慢启动:

    • 探测网络拥堵情况,每收到一个ACK,cwnd+1,单位是MSS,呈指数递增
  • 拥塞避免:

    • 当cwnd到达慢启动阈值sshresh,进入拥塞避免
    • 每收到一个ACK,cwnd=cwnd+1/cwnd,每个RTT就是+1
  • 拥塞发生:
    *

    如果是RTO超时重传

    • sshresh=cwnd/2
    • cwnd=1
    • 进去慢启动
    • 如果是快速重传
      • cwnd=cwnd/2
      • sshresh=cwnd
      • 进入快速恢复
  • 快速恢复

    • 快速恢复算法认为,还有 3 个重复 ACK 收到,说明网络也没那么糟糕,所以没有必要像 RTO 超时那么强烈。
    • cwnd和sshresh已经被更新了
    • cwnd=sshresh+3,重传重复的那几个ACK,即丢失的那几个数据包
    • 再收到重复的cwnd=cwnd+1
    • 新的的话,cwnd=sshresh,再次进入拥塞避免

TCP的超时重传机制?

  • RTO,一定时间内没收到ACK,就触发,这个时间有算法

  • 快速重传,发送的数据有序列号,保证有序

    在上图,发送⽅发出了 1,2,3,4,5 份数据:

  • 第⼀份 Seq1 先送到了,于是就 Ack 回 2;

  • 结果 Seq2 因为某些原因没收到,Seq3 到达了,于是还是 Ack 回 2;

  • 后⾯的 Seq4 和 Seq5 都到了,但还是 Ack 回 2,因为 Seq2 还是没有收到;

  • 发送端收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2

  • 最后,收到了 Seq2,此时因为 Seq3,Seq4,Seq5 都收到了,于是 Ack 回 6 。

  • SACK,带确认的,ACK是说从左往右第一个开始没数据的空白

  • D-SACK:告诉发送方哪些报文重复接收了,比如ACK没有到达,发送方重传了

  • ACK(Acknowledgment)号在TCP中代表的是接收方期望从发送方接收到的下一个字节的序列号。

  • SACK一个代表在快速重传的时候接收到了哪些

  • 一个代表了重复接收了哪些,在发送方没有收到ACK的情况重发的情况下

TCP和UDP的区别?

  • 可靠性:校验和、序列号、ack,RTO,快速等等
  • 传输形式(前者字节流,后者数据段保温)
  • 传输效率:UDP不确认,不重传,没有超时,没有序列号,没有流量控制和拥塞控制,但是QUIC实现了
  • 所需资源
  • 首部字节20-60,UDP8个
  • 面向连接

IP协议的定义和作用?

  • 定义数据包的格式和处理规则
  • 作用:
    • 寻址
    • 路由
    • 分片和重组

ICMP协议的功能?

  • 面向无连接的协议,用于传输出错报告控制信息
  • 包括报告错误、状态信息等
  • 当遇到IP无法访问,会自动发送ICMP

ping的原理?

  • 一个网络工具,主要用来测试网络连接的可达性和延迟。

  • Ping 的过程主要基于 ICMP(Internet Control Message Protocol,互联网控制消息协议)实现,其基本过程包括:

    ①、当执行 Ping 命令,如ping javabetter.cn,Ping 首先解析域名获取 IP 地址,然后向目标 IP 发送一个 ICMP Echo Request 消息。

    ②、当目标 IP 收到 ICMP Echo Request 消息后,它会生成一个 ICMP Echo Reply 消息并返回,即 Ping 响应消息。

    ③、发起 Ping 命令的设备接收到 ICMP Echo Reply 消息后,计算并显示从发送 Echo Request 到接收到 Echo Reply 的时间(通常称为往返时间 RTT,Round-Trip Time),以及可能的丢包情况。

相关推荐
七夜zippoe4 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥4 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
会员源码网5 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊1216 小时前
已有安全措施确认(上)
大数据·网络
Fcy6486 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满6 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
主机哥哥6 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
ManThink Technology7 小时前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
珠海西格电力科技7 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
QT.qtqtqtqtqt7 小时前
未授权访问漏洞
网络·安全·web安全