计算机网络笔记整理

引言

计算机网络是计算机科学与技术领域的基石,也是技术面试中的必考内容。无论你是准备面试,还是想夯实基础,理解网络协议的核心概念都至关重要。本文基于常见的面试考点,系统梳理了OSI七层模型、TCP/IP协议族、TCP与UDP的区别、HTTP协议演变、HTTPS加密原理、DNS解析过程、WebSocket与Socket的关系,以及TCP的可靠传输机制(三次握手、四次挥手、流量控制、拥塞控制)。希望这份笔记能帮助你构建清晰的知识体系,轻松应对各种网络问题。

一、OSI七层模型与TCP/IP模型

1. OSI七层模型(理论标准)

OSI(Open System Interconnection)模型将网络通信划分为七个层次,自下而上分别为:

层次 功能描述 常见协议/设备
物理层 建立、维护、断开物理连接,传输比特流 网线、集线器、中继器
数据链路层 提供相邻节点间的可靠数据传输,进行差错控制(FCS校验) Ethernet、PPP、交换机
网络层 逻辑地址寻址(IP),路由选择 IP、ICMP、IGMP、路由器
传输层 端到端通信,提供可靠或不可靠传输,端口号标识应用 TCP、UDP
会话层 建立、管理、终止会话(主机间对话) NetBIOS、RPC
表示层 数据格式转换、加密、压缩,确保应用层信息可读 SSL/TLS、JPEG、ASCII
应用层 为用户提供网络服务接口 HTTP、FTP、SMTP、DNS

补充:实际网络通信中,数据经过每一层时会被添加对应的头部(封装),接收端逐层解析(解封装)。

2. TCP/IP模型(事实标准)

TCP/IP模型是实际使用的协议栈,通常分为四层(或五层):

  • 应用层:对应OSI的应用层、表示层、会话层。协议:HTTP、FTP、SMTP、DNS、WebSocket等。

  • 传输层:对应OSI的传输层。协议:TCP、UDP。

  • 网络层:对应OSI的网络层。协议:IP、ICMP、IGMP。

  • 网络接口层:对应OSI的数据链路层和物理层。协议:Ethernet、ARP等。

二、TCP与UDP的对比

特性 TCP(传输控制协议) UDP(用户数据报协议)
连接性 面向连接,需三次握手建立连接 无连接,直接发送数据
可靠性 可靠传输:序列号、确认应答、重传、校验和、去重、排序 不可靠传输:尽最大努力,可能丢包、乱序、重复
流量控制 支持滑动窗口,避免接收方过载
拥塞控制 支持慢启动、拥塞避免等
数据传输方式 面向字节流,无边界 面向报文,保留报文边界
首部开销 最小20字节,最大60字节 固定8字节
通信方式 点对点(一对一) 一对一、一对多、多对一、多对多(广播、多播)
典型应用 HTTP/HTTPS、FTP、SMTP、SSH DNS、DHCP、视频直播、VoIP、在线游戏

选择依据:需要可靠性、顺序性选TCP;实时性要求高、可容忍少量丢包选UDP,应用层自行处理可靠性(如QUIC协议基于UDP实现)。

三、HTTP协议详解

1. HTTP的无状态性

HTTP协议是无状态的,即服务器不会记住客户端的两次请求之间的关系。每次请求都是独立的,服务器仅基于当前请求返回响应,不保存客户端状态。这种设计简化了服务器实现,但也带来了身份识别的挑战,因此引入了Cookie、Session、Token等机制。

2. 浏览器输入URL到页面显示的过程

  1. DNS解析:查找域名对应的IP地址(浏览器缓存 → 本地DNS → 根DNS → 顶级DNS → 权威DNS)。

  2. TCP连接:通过三次握手建立TCP连接(默认端口80)。

  3. 发送HTTP请求:浏览器构造HTTP请求报文(包含Cookie等信息)发送给服务器。

  4. 服务器处理请求:返回HTTP响应(通常包含HTML页面)。

  5. 浏览器渲染:解析HTML,加载CSS、JS、图片等资源(可能发起更多HTTP请求)。

  6. 关闭连接:TCP四次挥手释放连接(HTTP/1.1默认持久连接,可复用)。

3. HTTP版本演进

版本 特点
HTTP/1.0 短连接,每次请求需新建TCP;可设置Connection: keep-alive启用长连接。
HTTP/1.1 默认长连接(持久连接),支持管道化(同一连接发送多个请求),但队头阻塞问题依然存在。
HTTP/2.0 二进制分帧(头信息和数据体均为二进制),多路复用(一个连接并发处理多个请求),头部压缩(HPACK),服务器推送。

4. POST与GET的区别

特性 GET POST
可见性 参数在URL中可见,可被书签收藏 参数在请求体中,不可见
安全性 参数暴露,不安全(密码等不应用GET) 相对安全,但仍需加密(HTTPS)
数据长度 受URL长度限制(浏览器/服务器限制) 理论上无限制,受服务器配置限制
用途 获取资源,幂等(多次请求相同结果) 提交数据,可能改变服务器状态,非幂等
缓存 可被缓存 一般不缓存

5. HTTP长连接

HTTP长连接本质上是指TCP长连接,通过Connection: keep-alive头部实现(HTTP/1.1默认开启)。长连接允许复用同一个TCP连接传输多个HTTP请求,减少握手开销。超时时间由服务器keep-alive timeout和TCP内核参数共同决定(如tcp_keepalive_time)。

四、HTTPS与加密通信

1. HTTP存在的问题

  • 明文传输,易被窃听。

  • 未验证通信双方身份,易被冒充。

  • 无数据完整性校验,易被篡改。

2. HTTPS = HTTP + SSL/TLS

HTTPS在HTTP和TCP之间加入SSL/TLS层,提供加密、认证和完整性保护。

3. HTTPS工作流程(基于RSA握手)

  1. 客户端发起HTTPS请求,连接服务器443端口。

  2. 服务器返回数字证书(包含公钥、颁发机构、有效期等)。

  3. 客户端验证证书合法性,通过后生成随机对称密钥,用证书公钥加密发送给服务器。

  4. 服务器用私钥解密,得到对称密钥。

  5. 后续通信使用该对称密钥进行加密传输。

4. 公钥、私钥、数字签名、数字证书

  • 对称加密:加密和解密使用同一密钥,速度快,但密钥分发困难。

  • 非对称加密:公钥加密,私钥解密;私钥签名,公钥验签。解决了密钥分发问题,但速度慢。

  • 数字签名:对消息的哈希值用私钥加密,接收方用公钥解密并比对哈希值,确保消息完整性和来源可信。

  • 数字证书:由CA(证书颁发机构)签发,包含公钥、持有者信息、CA的数字签名等,用于绑定身份与公钥。

五、DNS解析过程

DNS(域名系统)将域名转换为IP地址,解析流程如下:

  1. 浏览器缓存 → 操作系统缓存 → 本地hosts文件 → 本地DNS服务器(如ISP提供的DNS)。

  2. 本地DNS服务器向根域名服务器查询,根服务器返回顶级域名服务器(如.com)地址。

  3. 本地DNS向顶级域名服务器查询,返回权威域名服务器(如baidu.com)地址。

  4. 本地DNS向权威域名服务器查询,得到最终IP地址,返回给客户端并缓存。

六、WebSocket与Socket

1. WebSocket vs HTTP

  • 通信模式:HTTP单向请求-响应;WebSocket双向全双工,连接建立后可主动推送。

  • 连接状态:HTTP无状态,WebSocket有状态(长连接)。

  • 握手方式:WebSocket基于HTTP握手(Upgrade头部升级协议)。

  • 头部开销:HTTP每次请求携带大量头部;WebSocket握手后头部极小。

2. WebSocket vs Socket

  • Socket:网络编程接口(API),封装TCP/UDP,用于进程间通信。

  • WebSocket:应用层协议,基于TCP,用于浏览器与服务器全双工通信。

联系:WebSocket底层使用Socket编程实现。

七、TCP核心机制

1. 三次握手(建立连接)

过程

  1. 客户端发送SYN=1,seq=x → SYN-SENT状态。

  2. 服务器回复SYN=1,ACK=1,seq=y,ack=x+1 → SYN-RCVD状态。

  3. 客户端发送ACK=1,seq=x+1,ack=y+1 → ESTABLISHED状态,服务器收到后也进入ESTABLISHED。

为什么是三次?

  • 防止已失效的连接请求报文突然传到服务器,造成错误(两次握手会导致服务器误建立连接)。

  • 三次握手可确保双方收发能力正常,同步初始序列号。

为什么不是两次? 如果只有两次,服务器发送确认后即认为连接建立,但客户端可能未收到确认或请求已失效,浪费资源。

为什么不是四次? 三次已足够,四次浪费。

2. 四次挥手(释放连接)

过程(假设客户端主动关闭):

  1. 客户端发送FIN=1,seq=u → FIN-WAIT-1。

  2. 服务器回复ACK=1,seq=v,ack=u+1 → CLOSE-WAIT,客户端进入FIN-WAIT-2。

  3. 服务器数据发送完毕,发送FIN=1,ACK=1,seq=w,ack=u+1 → LAST-ACK。

  4. 客户端回复ACK=1,seq=u+1,ack=w+1 → TIME-WAIT,等待2MSL后关闭;服务器收到ACK后立即关闭。

为什么需要四次? 因为TCP全双工,每个方向需单独关闭。服务器收到FIN后可能还有数据要发送,不能立即发FIN,因此ACK和FIN分开发送。

为什么TIME-WAIT等待2MSL?

  • 确保最后一个ACK能被服务器收到(若丢失,服务器重传FIN,客户端可重发ACK)。

  • 保证本次连接的所有报文在网络中消失,避免影响新连接。

3. TCP如何保证可靠传输?

  • 序列号与确认应答:每个字节编号,接收方返回ACK。

  • 超时重传:发送方启动定时器,超时未收到ACK则重传。

  • 校验和:检测数据是否损坏。

  • 流量控制:滑动窗口,避免接收方缓冲区溢出。

  • 拥塞控制:慢启动、拥塞避免、快速重传、快速恢复,适应网络负载。

  • 连接管理:三次握手、四次挥手。

  • 数据排序:接收方根据序列号重组数据。

  • 重复丢弃:丢弃重复报文。

4. 流量控制(滑动窗口示例)

发送方根据接收方通告的窗口大小调整发送速率。例如:

  • 初始窗口均为400字节。

  • 发送200字节后,窗口减小;接收方处理能力下降,窗口缩至0,发送方停止发送并定时探测。

  • 当接收方处理完毕,窗口扩大,发送方继续发送。

5. 拥塞控制

  • 慢启动:初始拥塞窗口较小,指数增长至慢启动阈值。

  • 拥塞避免:超过阈值后线性增长,遇到丢包(超时或重复ACK)时减窗。

  • 快速重传:收到3个重复ACK立即重传,不必等待超时。

  • 快速恢复:配合快速重传,将拥塞窗口减半而非降至1。

八、常见面试题补充

1. forward和redirect的区别(Servlet)

特性 forward(转发) redirect(重定向)
地址栏 不变 变为新URL
请求次数 1次 2次
数据共享 可以共享request 不能共享request
行为 服务器内部跳转 客户端重新发起请求
效率

2. Session、Cookie、Token的区别

  • Cookie:客户端保存的小文本,用于携带状态信息(如Session ID)。

  • Session:服务器端保存的用户状态数据,通过Session ID关联(通常存于Cookie)。

  • Token:无状态认证机制,服务器不保存,客户端携带加密令牌,常用于分布式系统。

分布式Session解决方案:使用Redis集中存储Session,或采用JWT等Token方案。

客户端禁用Cookie怎么办? Session ID可放在URL参数或请求头(如Authorization)中传输。

九、总结

计算机网络知识点繁多,但核心脉络清晰。掌握OSI与TCP/IP模型、TCP/UDP区别、HTTP/HTTPS原理、三次握手与四次挥手等基础,是深入理解网络通信的关键。希望本文的梳理能帮助读者构建知识体系,在面试或实际开发中游刃有余。

相关推荐
不吃西红柿的852 小时前
[职场] 内容运营求职简历范文 #笔记#职场发展
笔记·职场和发展·内容运营
似水明俊德2 小时前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
智者知已应修善业3 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
C羊驼3 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程
sheeta19983 小时前
苍穹外卖Day04笔记
笔记
今儿敲了吗7 小时前
46| FBI树
数据结构·c++·笔记·学习·算法
旺仔.2917 小时前
线程安全 详解
linux·计算机网络·安全
苦瓜小生8 小时前
【黑马点评学习笔记 | 实战篇 】| 6-Redis消息队列
redis·笔记·后端
sheeta19989 小时前
LeetCode 每日一题笔记 日期:2025.03.19 题目:3212.统计X和Y频数相等的子矩阵数量
笔记·leetcode·矩阵