Skip to content

E12. 网络模型

2.1. 端口监听隔离运行环境

端口是网络通信的“门牌号”,若多个程序争夺同一端口,网络服务将崩溃!

2.1.1. 常见程序端口示例

程序类型默认端口用途描述
HTTP 服务80Web 浏览器访问网页
HTTPS 服务443加密的 Web 通信
MySQL 数据库3306关系型数据库通信
SSH 服务22远程安全登录
Redis 缓存6379内存数据库

2.1.2. 端口冲突解决方案

bash
# 检查端口占用(Linux)
sudo ss -tulnp | grep 8000

# 修改程序端口配置(以 uwsgi 为例)
# 原配置:uwsgi --http-socket :8000
# 新配置:uwsgi --http-socket :8080

容器化隔离方案

bash
# Docker 示例:通过端口映射隔离服务
docker run -p 8000:80 --name webapp1 my_webapp
docker run -p 8080:80 --name webapp2 my_webapp

2.2. 80 端口和 443 端口

2.2.1. 核心区别

端口协议加密性场景示例
80HTTP普通网页浏览
443HTTPS金融交易、用户登录

2.2.2. HTTPS 必须签名的原因

bash
# 生成自签名证书(示例)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

# Nginx 配置 HTTPS(片段)
server {
    listen 443 ssl;
    ssl_certificate /path/cert.pem;
    ssl_certificate_key /path/key.pem;
}

WARNING

直接使用自签名证书会导致浏览器警告!生产环境需购买商业证书(如 Let's Encrypt 免费证书)。

2.3. 局域网中的通信稳定且延迟低

2.3.1. 局域网优势

  • 低延迟:设备间物理距离短(通常 <100 米),信号衰减小。
  • 高带宽:局域网通常采用千兆/万兆以太网,传输速率快。
  • 无路由损耗:数据直接在本地路由器内转发,无需经过运营商网络。

2.3.2. 典型场景

bash
# 局域网文件共享(Samba)
# 服务器端配置:
sudo nano /etc/samba/smb.conf
[shared] path = /shared/directory writable = yes

# 客户端访问:
smbclient //192.168.1.100/shared -U username

2.4. 公网通信不稳定且延迟高

2.4.1. 公网通信挑战

  • 高延迟:数据需经过多级路由器,传输距离可能跨越大陆/海洋。
  • 丢包风险:运营商网络拥塞或设备故障可能导致数据丢失。
  • 不可靠性:极端情况下(如海底光缆中断)可能完全中断。

2.4.2. 应对策略

bash
# 使用 TCP 重传机制(示例)
nc -zv 8.8.8.8 53  # 测试 DNS 服务可达性
curl --connect-timeout 5 --max-time 10 http://example.com  # 设置超时

TIP

编程最佳实践:在代码中添加重试逻辑和超时控制!

python
import requests
try:
    response = requests.get('https://api.example.com', timeout=5)
except requests.exceptions.RequestException as e:
    print("网络异常,重试...")

2.5. 公网带宽与流量是运营商掌管的付费资源

2.5.1. 带宽与流量定义

  • 带宽:单位时间内可传输的最大数据量(如 100Mbps = 每秒 12.5MB)。
  • 流量:实际传输的数据总量(如 1TB/月)。

2.5.2. 典型定价方案(国内云服务商)

资源类型价格示例(2025)计费方式
共享带宽$0.005/MB按实际流量计费
独享带宽$0.01/MB包年包月预付费
跨境带宽$0.03/MB高于国内带宽

2.5.3. 运营商收费原因

  • 基础设施成本:骨干网、海底光缆建设维护费用。
  • 流量峰值管理:需预留冗余带宽应对突发流量。
  • 服务保障:SLA(服务等级协议)承诺的可用性需付费支持。

知识回顾

  1. 端口隔离:通过修改端口配置或使用容器化部署避免冲突。
  2. HTTPS 必要性:443 端口需 SSL 证书,保护数据隐私。
  3. 网络环境差异:局域网稳定低延迟,公网需设计重试机制。
  4. 带宽流量成本:公网资源按需付费,需合理规划预算。

课后练习

  1. (单选)以下哪个端口通常用于加密的 Web 通信?

    • A. 80
    • B. 22
    • C. 443
    • D. 3306
  2. (操作)编写一个 Python 脚本,每 5 秒检测公网服务器 80 端口是否可达。

  3. (计算)假设某网站日均流量 10GB,按 $0.01/MB 计费,年成本是多少?

参考答案
  1. C
  2. 示例代码:
    python
    import socket
    import time
    
    while True:
        try:
            sock = socket.create_connection(('example.com', 80), 2)
            print("端口 80 可达!")
        except Exception as e:
            print("端口 80 不可达!")
        time.sleep(5)
  3. 年成本 = 10GB × 365 × $0.01/MB = $36,500 (注意:1GB = 1024MB,需修正单位换算!)

扩展阅读

Built by Vitepress | Apache 2.0 Licensed