计算机网络基础详解:从OSI模型到HTTP/HTTPS与Socket编程
计算机网络基础详解:从OSI模型到HTTP/HTTPS与Socket编程
本文适合刚接触计算机网络的小白,带你从零开始理解网络的分层模型、常见协议、浏览器访问网页的全过程,以及简单的网络编程。
OSI七层模型
OSI(Open System Interconnection)参考模型是一个理想化的网络分层模型,将网络通信划分为 七层,每层都承担不同的职责。
七层结构
-
物理层(Physical Layer)
- 任务:传输比特流(0 和 1)。
- 数据单位:比特(bit)。
- 示例:双绞线、光纤、无线电波。
- 打个比方:相当于“马路”,只负责运东西,不管东西是什么。
-
数据链路层(Data Link Layer)
- 任务:把比特组装成帧,负责差错检测、点对点传输。
- 数据单位:帧(Frame)。
- 示例:以太网、MAC地址。
- 打个比方:运输的“快递车”,每一帧就是一车货。
-
网络层(Network Layer)
- 任务:负责寻址和路由,保证数据能从源头到目的地。
- 数据单位:包(Packet / IP数据报)。
- 示例:IP、ICMP、ARP。
- 打个比方:导航系统,决定车怎么走才能到目的地。
-
传输层(Transport Layer)
- 任务:端到端的通信,保证数据可靠传输或快速传输。
- 数据单位:报文段(Segment)。
- 示例:TCP(可靠)、UDP(快速)。
- 打个比方:送快递时选择“顺丰保价”还是“普通快递”。
-
会话层(Session Layer)
- 任务:建立、管理和终止会话。
- 示例:登录系统的会话管理。
-
表示层(Presentation Layer)
- 任务:数据翻译、加密、压缩。
- 示例:JPEG、SSL、TLS。
- 打个比方:把中文翻译成英文,或者把大文件压缩成小文件。
-
应用层(Application Layer)
- 任务:直接面向用户,提供各种网络服务。
- 示例:HTTP、FTP、DNS、SMTP。
- 打个比方:外卖APP,用户通过它下单。
TCP/IP四层模型
实际工程中常用的并不是OSI七层模型,而是 TCP/IP四层模型:
- 网络接口层(对应物理层 + 数据链路层)
- 网络层(IP、ICMP、ARP)
- 传输层(TCP、UDP)
- 应用层(HTTP、FTP、DNS 等)
浏览器访问网页的全过程
当你在浏览器输入 http://www.example.com
时,发生了什么?
-
DNS解析
- 浏览器先检查本地缓存,如果没有,就向本地DNS服务器请求。
- DNS有两种查询方式:递归查询、迭代查询。
- 解析得到服务器IP地址。
-
TCP三次握手
- 客户端与服务器建立可靠连接。
- 三次握手的作用:确认双方都具备收发能力。
-
HTTP请求
- 浏览器构造HTTP请求报文并发送到服务器。
- 请求报文包括:请求行、请求头、请求体。
-
服务器处理并响应
- 服务器返回HTTP响应报文,包含状态码(200、404等)和数据。
-
浏览器渲染页面
- 浏览器解析HTML → 下载CSS/JS/图片 → 渲染页面。
HTTP与HTTPS
HTTP特点
- 简单快速。
- 无连接:每次请求都会断开连接。
- 无状态:服务器不记得客户端之前做过什么。
HTTPS特点
- 加密传输(TLS/SSL保证安全性)。
- 端口不同:HTTP是80,HTTPS是443。
- 需要证书:保证网站身份可信。
- 缺点:性能开销大,证书费用高。
常见HTTP状态码
- 200 OK:请求成功。
- 206 Partial Content:部分请求成功(断点续传)。
- 301 Moved Permanently:永久重定向。
- 302 Found:临时重定向。
- 403 Forbidden:拒绝访问。
- 404 Not Found:资源不存在。
- 500 Internal Server Error:服务器内部错误。
Socket编程入门
Socket 是网络编程的核心。以 TCP为例:
服务器端流程
- 创建套接字:
socket()
- 绑定IP和端口:
bind()
- 监听端口:
listen()
- 等待客户端连接:
accept()
- 数据收发:
send()
、recv()
- 关闭连接:
close()
客户端流程
- 创建套接字:
socket()
- 连接服务器:
connect()
- 数据收发:
send()
、recv()
- 关闭连接:
close()
总结
- OSI七层模型是理论框架,TCP/IP四层模型是实际应用。
- 浏览器访问网页的全过程涉及 DNS解析、TCP连接、HTTP请求与响应。
- HTTP简单高效,但不安全;HTTPS更安全但有性能和成本代价。
- Socket是网络编程的基石,理解
socket → bind → listen → accept
就能写最简单的服务端。