好的,我们来系统梳理一下 计算机网络原理(Computer Network Principles),并结合一些代码示例(Python 网络编程)来加深理解。内容会覆盖基础概念、网络体系结构、协议、数据传输、路由和网络安全。
一、计算机网络的定义
计算机网络是由多台计算机及其他设备通过通信介质相互连接,能够实现 资源共享、信息交换和远程通信 的系统。
核心特点:
- 互联互通:不同设备和系统可以通信。
- 资源共享:硬件、软件、数据等可以共享。
- 分布式处理:任务可在网络节点分布处理。
- 可扩展性:可以随时增加或减少网络节点。
二、网络体系结构
- OSI七层模型(理论模型)
层级 | 功能 | 示例协议/技术 |
---|---|---|
7. 应用层 | 为应用提供服务 | HTTP, FTP, SMTP, DNS |
6. 表示层 | 数据格式转换、加密 | JPEG, SSL/TLS |
5. 会话层 | 会话管理 | RPC, NetBIOS |
4. 传输层 | 端到端通信,可靠性控制 | TCP, UDP |
3. 网络层 | 路由选择与逻辑地址 | IP, ICMP |
2. 数据链路层 | 物理寻址,帧传输 | Ethernet, PPP |
1. 物理层 | 传输比特流 | 光纤, 网线, 无线 |
- TCP/IP模型(实际应用)
- 应用层、传输层、网络层、链路层
三、网络基本概念
- IP 地址与子网
- IPv4:32位地址(如 192.168.1.1)
- IPv6:128位地址(如 2001:0db8::1)
- 子网掩码、CIDR 表示法(/24)
- 端口号
- 用于标识应用进程
- TCP/UDP端口范围:0–65535
- 常用端口:HTTP 80, HTTPS 443, SSH 22
- MAC 地址
- 数据链路层物理地址,唯一标识网络接口
- 6字节,16进制表示(如 00:1A:2B:3C:4D:5E)
- DNS(域名解析)
- 域名 → IP 地址
- 支持负载均衡和缓存
四、数据传输原理
- 传输方式
- 面向连接(TCP):可靠传输,保证顺序
- 无连接(UDP):快速传输,无保证
- 流量控制
- TCP 滑动窗口机制
- 差错控制
- 校验和、CRC、确认应答(ACK)/超时重传
- 路由与转发
- 静态路由 vs 动态路由(RIP, OSPF, BGP)
- 路由选择算法:最短路径算法(Dijkstra)
五、网络协议示例
- HTTP 请求示例(Python)
import requests
response = requests.get("http://www.example.com")
print(response.status_code)
print(response.text[:200]) # 前200字符
- TCP 套接字通信(Python)
服务器端:
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 12345))
server.listen(1)
print("等待客户端连接...")
conn, addr = server.accept()
print("连接来自:", addr)
data = conn.recv(1024)
print("收到:", data.decode())
conn.send(b"Hello, Client!")
conn.close()
客户端:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 12345))
client.send(b"Hello, Server!")
data = client.recv(1024)
print("收到:", data.decode())
client.close()
- UDP 套接字通信(Python)
import socket
# UDP 服务器
udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_server.bind(('127.0.0.1', 12346))
data, addr = udp_server.recvfrom(1024)
print("收到:", data.decode(), "来自", addr)
udp_server.sendto(b"Hello UDP Client", addr)
六、网络安全
- 加密技术
- 对称加密:AES
- 非对称加密:RSA
- HTTPS 使用 TLS/SSL
- 认证与授权
- 用户名/密码
- Token / OAuth2
- 防火墙与入侵检测
- IP 地址过滤、端口限制
- IDS/IPS 系统
- 常见攻击
- 中间人攻击、DDoS 攻击、SQL注入、ARP欺骗
七、常见网络工具
- ping:测试连通性
- traceroute / tracert:路由追踪
- netstat:端口和连接状态
- Wireshark:抓包分析
八、总结
计算机网络原理核心知识点:
- 网络体系结构与分层模型(OSI / TCP-IP)
- IP、MAC、端口、DNS 等基础概念
- 数据传输机制:TCP/UDP、流量控制、差错控制
- 路由与网络协议(HTTP, FTP, SMTP, DNS, DHCP)
- 网络编程实践(Socket、HTTP请求)
- 网络安全基础(加密、认证、防护、攻击防范)
好的,我来帮你写一个 完整的 Python 网络编程示例,涵盖以下内容:
- TCP 客户端-服务器通信
- UDP 客户端-服务器通信
- HTTP 请求演示
- 简单加密通信(AES 对称加密)
这个示例可以让你直接实践计算机网络原理。
1. 安装依赖
pip install requests pycryptodome
2. TCP 客户端-服务器示例
TCP 服务器(tcp_server.py)
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 12345))
server.listen(1)
print("TCP服务器已启动,等待连接...")
conn, addr = server.accept()
print("连接来自:", addr)
while True:
data = conn.recv(1024)
if not data:
break
print("收到:", data.decode())
conn.send(b"TCP服务器回复: " + data)
conn.close()
TCP 客户端(tcp_client.py)
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 12345))
while True:
msg = input("发送消息: ")
if msg.lower() == "exit":
break
client.send(msg.encode())
data = client.recv(1024)
print("收到:", data.decode())
client.close()
3. UDP 客户端-服务器示例
UDP 服务器(udp_server.py)
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 12346))
print("UDP服务器已启动,等待数据...")
while True:
data, addr = server.recvfrom(1024)
print("收到:", data.decode(), "来自", addr)
server.sendto(b"UDP服务器回复: " + data, addr)
UDP 客户端(udp_client.py)
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
msg = input("发送消息: ")
if msg.lower() == "exit":
break
client.sendto(msg.encode(), ('127.0.0.1', 12346))
data, _ = client.recvfrom(1024)
print("收到:", data.decode())
4. HTTP 请求示例
import requests
url = "http://httpbin.org/get" # 测试用HTTP接口
response = requests.get(url)
print("状态码:", response.status_code)
print("响应内容:", response.text[:200])
5. 简单加密通信(AES 对称加密)
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
key = b"1234567890123456" # 16字节密钥
data = "Hello Network Security"
# 加密
cipher = AES.new(key, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(data.encode(), AES.block_size))
iv = base64.b64encode(cipher.iv).decode('utf-8')
ct = base64.b64encode(ct_bytes).decode('utf-8')
print(f"加密结果: IV={iv} 密文={ct}")
# 解密
iv = base64.b64decode(iv)
ct = base64.b64decode(ct)
cipher_dec = AES.new(key, AES.MODE_CBC, iv)
pt = unpad(cipher_dec.decrypt(ct), AES.block_size)
print("解密结果:", pt.decode())
✅ 说明
- TCP 和 UDP 示例演示了 面向连接和无连接通信。
- HTTP 请求示例演示了 应用层协议的使用。
- AES 示例展示了 加密通信,对应网络安全中的数据保密性。
发表回复