好的,我们来系统梳理一下 计算机网络原理(Computer Network Principles),并结合一些代码示例(Python 网络编程)来加深理解。内容会覆盖基础概念、网络体系结构、协议、数据传输、路由和网络安全。


一、计算机网络的定义

计算机网络是由多台计算机及其他设备通过通信介质相互连接,能够实现 资源共享、信息交换和远程通信 的系统。

核心特点:

  1. 互联互通:不同设备和系统可以通信。
  2. 资源共享:硬件、软件、数据等可以共享。
  3. 分布式处理:任务可在网络节点分布处理。
  4. 可扩展性:可以随时增加或减少网络节点。

二、网络体系结构

  1. OSI七层模型(理论模型)
层级功能示例协议/技术
7. 应用层为应用提供服务HTTP, FTP, SMTP, DNS
6. 表示层数据格式转换、加密JPEG, SSL/TLS
5. 会话层会话管理RPC, NetBIOS
4. 传输层端到端通信,可靠性控制TCP, UDP
3. 网络层路由选择与逻辑地址IP, ICMP
2. 数据链路层物理寻址,帧传输Ethernet, PPP
1. 物理层传输比特流光纤, 网线, 无线
  1. TCP/IP模型(实际应用)
    • 应用层、传输层、网络层、链路层

三、网络基本概念

  1. IP 地址与子网
    • IPv4:32位地址(如 192.168.1.1)
    • IPv6:128位地址(如 2001:0db8::1)
    • 子网掩码、CIDR 表示法(/24)
  2. 端口号
    • 用于标识应用进程
    • TCP/UDP端口范围:0–65535
    • 常用端口:HTTP 80, HTTPS 443, SSH 22
  3. MAC 地址
    • 数据链路层物理地址,唯一标识网络接口
    • 6字节,16进制表示(如 00:1A:2B:3C:4D:5E)
  4. DNS(域名解析)
    • 域名 → IP 地址
    • 支持负载均衡和缓存

四、数据传输原理

  1. 传输方式
    • 面向连接(TCP):可靠传输,保证顺序
    • 无连接(UDP):快速传输,无保证
  2. 流量控制
    • TCP 滑动窗口机制
  3. 差错控制
    • 校验和、CRC、确认应答(ACK)/超时重传
  4. 路由与转发
    • 静态路由 vs 动态路由(RIP, OSPF, BGP)
    • 路由选择算法:最短路径算法(Dijkstra)

五、网络协议示例

  1. HTTP 请求示例(Python)
import requests

response = requests.get("http://www.example.com")
print(response.status_code)
print(response.text[:200])  # 前200字符

  1. 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()

  1. 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)


六、网络安全

  1. 加密技术
    • 对称加密:AES
    • 非对称加密:RSA
    • HTTPS 使用 TLS/SSL
  2. 认证与授权
    • 用户名/密码
    • Token / OAuth2
  3. 防火墙与入侵检测
    • IP 地址过滤、端口限制
    • IDS/IPS 系统
  4. 常见攻击
    • 中间人攻击、DDoS 攻击、SQL注入、ARP欺骗

七、常见网络工具

  • ping:测试连通性
  • traceroute / tracert:路由追踪
  • netstat:端口和连接状态
  • Wireshark:抓包分析

八、总结

计算机网络原理核心知识点:

  1. 网络体系结构与分层模型(OSI / TCP-IP)
  2. IP、MAC、端口、DNS 等基础概念
  3. 数据传输机制:TCP/UDP、流量控制、差错控制
  4. 路由与网络协议(HTTP, FTP, SMTP, DNS, DHCP)
  5. 网络编程实践(Socket、HTTP请求)
  6. 网络安全基础(加密、认证、防护、攻击防范)

好的,我来帮你写一个 完整的 Python 网络编程示例,涵盖以下内容:

  1. TCP 客户端-服务器通信
  2. UDP 客户端-服务器通信
  3. HTTP 请求演示
  4. 简单加密通信(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())


说明

  1. TCP 和 UDP 示例演示了 面向连接和无连接通信
  2. HTTP 请求示例演示了 应用层协议的使用。
  3. AES 示例展示了 加密通信,对应网络安全中的数据保密性。