fundamentals.md

·interview-questions

网络基础

TCP/IP 网络模型有哪几层?

一共有应用层:Application Layer、传输层:Transport Layer、网络层:Internet Layer 和链路层(Link Layer)这四层

应用层:

具体提供服务的网络应用,常见协议有 HTTP、HTTPS、FTP 和 DNS 等

传输层:

对应用层的消息/报文进行封装,主要有 TCP 和 UDP 两个协议

HTTP 使用的就是 TCP,TCP 为了保证数据能可靠地被传输,实现了流量控制、超时重传和拥塞控制等特性

UDP 则只负责发送,并不保证是否能抵达,但它的实时性和传输效率都更好

也可以在 UDP 的基础上在应用层实现 TCP 的特性从而实现可靠传输,这种协议叫 QUIC

网络层:

对传输层的数据段进一步封装,负责实际的数据传输,主要是使用 IP 协议,通过 IP 地址的网络号和主机号以及路由算法,实现寻址和路由

链路层:

对网络层的包进行最后一次封装,加上 MAC 头部形成数据帧,通过实际的物理传输实现以太网,也就是局域网内互相通讯,主要的协议有 ARP

TCP/IP 模型和 OSI 模型分别是什么?它们之间有什么区别?

TCP/IP 模型是我们老生常谈的四层网络协议栈,OSI 模型则是更为详细的七层,它比 TCP/IP 模型多了表示层、会话层和物理层

表示层主要是做数据的格式转换和加密解密,会话层则是负责会话管理,如全双工和半双工控制,物理层则是实际的物理介质传输,电、光和机械接口等

TCP/IP 模型是实际的协议栈,更贴近工程实现,结构更简洁,直接对应主流协议实现,更加实践化、工程化

OSI 模型是强调每层独立职责,层次分明,适合理论教学和协议标准化,主要是理论参考,更偏重数据格式与会话控制,每层职责严谨,可替换性强

在浏览器中从输入 URL 到页面展示期间发生了什么?⭐

1. DNS 解析:

检查缓存:浏览器——操作系统——路由器——ISP DNS(网络服务提供商)

若缓存无结果,就会递归查询 DNS 服务器,最终解析得到域名的 IP 地址

2. 建立 TCP 连接:

与目标 IP 发起三次握手,若是 HTTPS 还需进行 TLS 握手,协商加密算法并验证证书

3. 发送 HTTP 请求

4. 服务器处理请求

Nginx 反向代理接收请求,将请求转发到应用服务器

应用服务器执行业务逻辑,构造 HTTP 相应并返回

5. 浏览器接收

浏览器接收 HTTP 相应,解析前端文件并渲染页面

什么是 ARP 协议?它在网络通信中有什么作用?

ARP 协议是一种用于将网络层的 IP 地址解析为链路层的 MAC 地址的协议,它的作用主要是在局域网中帮助设备通过已知的 IP 地址找到对应的 MAC 地址,从而实现网络通信

设备会发送 ARP 请求广播,询问目标 IP 地址的 MAC 地址,目标设备再通过 ARP 相应单播返回其 MAC 地址,但 ARP 缓存中可能存在被攻击者伪造的记录,比如冒充网关

RARP(反向地址解析协议)则是将 MAC 地址解析为 IP 地址的协议,使用较少

IP 地址和 MAC 地址有什么区别?它们在网络通信中各自扮演什么角色?

IP 地址是分配给每个联网设备的逻辑地址,用于标识设备在网络中的位置

MAC 地址是网卡的物理地址,用于在同一局域网中标识设备

IP 在同一个网络中唯一,不同网络可重复,用户也可以更改,可以通过公共 IP 地址访问网站或使用私有 IP 地址进行设备互联

MAC 地址通常是完全唯一的,一般也不可更改,用于局域网设备识别和设备接入网络的访问控制与监控

什么是 NAT(网络地址转换)?它在网络通信中有什么作用?

NAT 是一种在私有网络 IP 地址和公共网络 IP 地址之间互相转换的技术,主要用于解决 IPv4 地址枯竭问题,同时提供一定的安全性

它通过在内部网络使用私有 IP,隐藏了内部网络的 IP 地址、让外部网络无法直接访问内部设备的同时,还通过端口号的映射,让多个内部设备能通过同一个公网 IP 与外部网络通信

TCP/IP 模型中,数据链路层和网络层各有哪些主要协议?它们的作用是什么?

链路层:

Ethernet 提供局域网中的数据传输和设备寻址,ARP 将 IP 地址解析为 MAC 地址,WiFi 支持无限网络通信

网络层:

IP 提供逻辑地址和路由选择功能,NAT 实现私有 IP 和公网 IP 的映射,DHCP 动态分配 IP 地址和网络参数,ICMP 提供网络层的错误报告和诊断

OSI 模型中,哪一层负责数据的加密和解密?哪一层负责数据的传输?

表示层负责数据的加密和解密,传输层负责数据端到端的传输(TCP、UDP),物理层和链路层负责数据的实际传输

什么是网络拥塞?TCP 是如何应对网络拥塞的?⭐

网络拥塞是指由于数据流量超过网络设备或链路的处理能力,导致数据包的传输延迟增加、丢失或网络性能下降的情况

TCP 主要通过拥塞控制算法、拥塞窗口、重传定时器和流量控制来应对网络拥塞

拥塞控制算法主要包括慢启动、拥塞避免、快速重传和快速恢复

  • 慢启动
    • 指 TCP 在连接开始时会设置一个较小的拥塞窗口,每收到一个 ACK,窗口大小就会增加一倍
  • 拥塞避免
    • 指一旦到达阈值,就会进入拥塞避免阶段,窗口每经过一个 RTT 仅会增加一个 MSS,以更加稳健地增长
  • 快速重传
    • 指当发送方连续收到三个相同的 ACK,即表明某个数据包丢失时,会立即重传丢失的数据包而不是等待其超时
  • 快速恢复
    • 指在快速重传之后,将拥塞窗口调整为拥塞避免的阈值,从而进入拥塞避免状态,避免窗口立即减小

拥塞窗口:控制可以发送的未确认数据量

重传定时器:如果定时器超时未收到特定数据包的 ACK,就会重传该数据包

流量控制:使用接收窗口来确保接收方不会被过多的数据淹没

CDN 是什么?它在网络传输中有什么作用?

CDN 是一种分布式网络服务,它通过将内容存储在分布式的服务器上,使用户可以从距离较近的服务器获取所需的内容,加快内容获取的速度,并且它会缓存资源,也保证了高可用性

ping 的工作原理是什么?

ping 是基于 ICMP 协议实现的网络诊断工具ICMP(Internet Control Message Protocol,互联网控制报文协议)用于在网络设备之间传递通知控制信息和错误报告,它的功能包括确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等,它工作在网络层,相当于 IP 的可靠保障

ping 通过发送 ***ICMP 回显请求报文(Echo Request)***到目标主机,并等待接收 ICMP 回显应答报文(Echo Reply),从而测量网络连接的延迟和丢包率

如果在规定时间内没有收到应答,就会认为目标主机不可达,如果收到应答,就会计算往返时间(RTT)并显示结果

如果断网了,还能 ping 通 127.0.0.1 吗?

能 ping 通的,在 IPv4 中,127 开头的都是回环地址,用于主机自我通信,数据包不会离开主机,走的是本地的虚拟网卡,所以即使断网了,ping 也是可以通的,而 ping 回环地址和 ping 本机地址是没有任何区别的

127.0.0.1 和 localhost 以及 0.0.0.0 有区别吗?

localhost 是一个域名,通常被默认解析为 127.0.0.1,当然这个是可以在 /etc/hosts 文件中修改的,但默认情况下使用 localhost 跟使用 127.0.0.1 是没有区别的

而 0.0.0.0 则是表示所有 IPv4 地址的通配符,主要在服务器配置中使用,它表示监听本机上所有可用的网络接口和 IP 地址,而不是特定的一个地址,并且 ping 0.0.0.0 是ping 不通的