计算机网络
面试 4

计算机网络

常见的网络协议

网络接口层

  • 数据帧的封装/解封装(添加/移除MAC地址)
  • 物理寻址(MAC地址)
  • 错误检测(如CRC校验)
  • 数据链路控制(如以太网、PPP协议)

网络层

IP:定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。目前 IP 协议主要分为两种,一种是 IPv4,另一种是较新的 IPv6

ARP:解决的是网络层地址和链路层地址之间的转换问题

ICMP:用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除,ping工具

NAT、OSPF、RIP、BGP

传输层

TCP UDP 端口寻址、流量控制、拥塞控制、数据分段

应用层

HTTP SMTP POP3 FTP(基于TCP协议)SSH(基于TCP协议)DNS(基于UDP协议)

Ping命令原理

  1. DNS 解析(如果目标是域名)
    • 如果 ping 的目标是域名(如 www.example.com),系统会先通过 DNS 查询 获取其 IP 地址。
    • 如果目标是 IP 地址(如 ping 8.8.8.8),则跳过 DNS 解析。
  2. 构造 ICMP Echo Request
    • 操作系统生成一个 ICMP Echo Request 报文,填充目标 IP 地址、标识符、序列号等。
  3. 发送 ICMP 报文
    • 通过 IP 层 封装 ICMP 报文,并通过 网络接口 发送出去。
  4. 等待 ICMP Echo Reply
    • 目标主机收到 ICMP Echo Request 后,如果可达,会返回 ICMP Echo Reply。
    • 如果目标主机不可达(如宕机、防火墙阻止 ICMP),则不会返回响应。
  5. 计算 RTT 并显示结果

DNS的流程

DNS是为了通过域名获取IP地址

  1. 检查本地缓存
  2. 向本地DNS服务器发起查询(递归查询)
  3. 如果本地DNS服务器没有,向根域名服务器发送迭代查询
  4. 本地 DNS 服务器将 IP 地址返回给客户端(浏览器),并缓存该记录(以便下次查询更快)

递归查询迭代查询,它们的核心区别在于 查询责任查询过程 的不同,DNS 服务器 只返回它能提供的最佳答案,不保证能查到;客户端(或本地 DNS 服务器)向 DNS 服务器发起请求,要求 直接返回最终结果(IP 地址)

输入URL到打开网页全流程

  • 在浏览器中输入指定网页的 URL
  • 浏览器通过 DNS 协议,获取域名对应的 IP 地址
  • 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求
  • 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容
  • 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器
  • 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示
  • 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求

拥塞控制

  • 慢启动:每当接收到一个ACK确认包,cwnd值就会增加。具体来说,cwnd在每个RTT(Round-Trip Time)内呈指数级增长,直到达到一个阈值(ssthresh),进入拥塞避免阶段;
  • 拥塞避免:当cwnd达到ssthresh时,窗口增长由指数级转为线性增长,每个RTT内cwnd增加一个MSS;
  • 快速重传:如果发送方连续收到三个相同的ACK确认包,意味着可能有一个数据包丢失,发送方将立即重传该丢失的数据包,而不需要等待超时;
  • 快速恢复:在收到三个重复ACK后,cwnd将减半,而不是重置为1 MSS,并进入拥塞避免阶段,而不是重新进入慢启动。

滑动窗口&停止等待协议

滑动窗口:允许发送方在未收到确认(ACK)的情况下连续发送多个数据包,从而提高网络传输效率,同时避免接收方缓冲区溢出。

发送窗口:发送方可以发送但尚未确认的数据范围

接收窗口:接收方当前可用的缓冲区空间,用于告知发送方还能接收多少数据

停止等待协议:每发一个数据包,必须等待 ACK,效率低。

TCP 和 UDP 的区别

  1. TCP面向连接,UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,UDP尽最大努力交付,即不保 证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  5. TCP首部开销20字节,UDP的首部开销小,只有8个字节
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

TCP如何实现可靠传输

确认、重传、流量控制、拥塞控制

确认:接收方收到数据后,向发送方发送ACK,ACK号表示笑一个期望收到的字节序号

重传:发送方没有收到ACK或者收到三次重复的ACK,认为数据丢失,重传;(超时重传和快速重传)

流量控制:接收方通过 TCP 头部窗口字段告知发送方剩余缓冲区大小

拥塞控制

http过程,和https区别

TLS握手(加密通信)

一个局域网A和B两个主机文件传输

A和B之间不知道对方的IP

  1. 主机A通过广播或组播发送一个请求消息(例如包含文件名或唯一标识符),询问是否有主机B愿意接收文件。
  2. 主机B监听广播/组播消息,收到后回复自己的IP地址给主机A。
  3. 主机A和主机B建立直接连接(如通过TCP/UDP)传输文件

一个数据包完整的传输过程

数据包传输的完整过程

应用层:定义应用程序如何通信(如 HTTP、HTTPS、FTP、DNS)

HTTP/HTTPS:如果你访问网页,浏览器会通过 HTTP(明文)或 HTTPS(加密)发送请求。

DNS:如果访问域名(如 example.com),需要先通过 DNS 查询获取 IP 地址。

传输层:提供端到端的通信,确保数据可靠传输(或快速传输)。

协议示例TCP(传输控制协议):面向连接,可靠传输(如网页、文件下载),UDP(用户数据报协议):无连接,适用于实时应用(如视频流、在线游戏)。

网络层:负责数据包的路由和寻址(IP 地址)

IP:IPv4 或 IPv6,负责数据包的寻址和路由。

ICMP:用于网络诊断(如 ping)。

数据链路层:在相邻节点间传输数据帧,处理 MAC 地址,ARP,将 IP 地址解析为 MAC 地址。

物理层:通过物理介质(如电缆、光纤、无线电波)传输比特流。

三次握手&四次挥手

利用linux下的natstate可以看tcp的状态

  • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务端的确认;
  • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入SYN_RECV状态;
  • 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务端都进入ESTABLISHED 状态,完成 TCP 三次握手

SYN携带序列号完成客户端和服务端数据包排号的同步

断开一个 TCP 连接则需要“四次挥手”,缺一不可

  1. 第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务端的数据传送。然后客户端进入 FIN-WAIT-1 状态。
  2. 第二次挥手:服务端收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。
  3. 第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
  4. 第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待2MSL后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了

在TCP四次挥手中,主动关闭方(如客户端)发送最后一个 FIN后,会进入 TIME_WAIT状态,并等待对方的 ACK确认,如果对方未收到 ACK(例如ACK丢失),对方会重传 FIN。此时若主动关闭方已关闭连接,将无法响应重传的 FIN,导致对方无法正常关闭,等待2MSL的时间足够让重传的 FIN到达

子网划分/子网掩码

需要留出网络位和广播位

IO多路复用

  • 传统阻塞IO:每个连接一个线程/进程,资源消耗大
  • IO多路复用一个线程监听多个IO事件(如socket可读、可写),减少线程/进程数量,提高并发能力

http对称加密

  • HTTP
    • 明文传输:数据以普通文本形式传输,容易被窃听、篡改或中间人攻击(如劫持流量、注入恶意内容)。
    • 无加密:敏感信息(如密码、支付信息)直接暴露在传输过程中。
  • HTTPS
    • 加密传输:通过 SSL/TLS 协议对数据进行加密,即使被截获也无法直接读取内容。
    • 身份验证:服务器通过数字证书验证身份,防止伪装成合法网站(如钓鱼攻击)

非对称加密速度太慢,堆成加密无法完成密钥交换

通过非对称加密实现身份验证和密钥交换,又保证了传输效率通过对称加密处理实际数据

GET:幂等(可以缓存) POST:非幂等(不可缓存)

计算机网络
https://lihuigu.cn//archives/ji-suan-ji-wang-luo
作者
lihuigu
发布于
更新于
许可协议