自学编程难不难系列 之 网络 ..

作者: 一了 <1liao3@funlang.org>
日期: 2021-03-28 凌晨

本篇是 自学编程难不难系列 的第十三篇。




网络
 本质
  转发
   在每个层叫的名字不同
  封包
   对比 物理世界
    物理世界如集装箱, 大的套小的
    网络世界是相反的, 小的套大的
 分层
  核心层
   IP
    IP地址+端口
     掩码/网络规模
    转发 叫 路由
     网关
      ping
  传输层
   UDP
    数据 叫 包
     包有最大尺寸
    感觉像扔沙包
    有组播和广播
    转发 叫 代理
   TCP
    数据 叫 流
     应用层约定包长
    类似有线传输
    转发 叫 代理
  应用层
   HTTP/FTP/SMTP/DNS/DHCP/...
   C/S 结构
    应用层代理/网关
   加密协议
    TLS 1.0/1.1/1.2/1.3
    数字证书
 代理
  Socks
   TCP 代理
    UDP 代理
  HTTP
   正向代理/匿名代理/透明代理/应用网关
   反向代理
    Nginx
     缓存限流
   隧道 - CONNECT
  NAT
   临时
    打洞
   永久
  VPN
   OpenVPN
 HTTP
  1.0/1.1/2.0 用 TCP
   3.0 用 UDP/QUIC
  发 和 回
   命令 GET/POST/HEAD/OPTIONS 等
   回 101/200/206/302/304/40x/50x
   跨站处理
    幂等处理
  头 和 体
   头格式 name: value
  Etag 和 gzip 压缩
   Etag 可以用作 cookie
  HTTPS 用了 TLS
  Websocket 等于是 TCP
 FTP
  多种模式, 命令和数据端口是否分开
 SMTP
  转发 是 常规操作, 跟邮寄业务类似
 DNS
  UDP/TCP 53/5353
  树状寻址
   WHOIS
    A/CNAME/NS/MX 记录
  hosts 文件
   域名污染
 DHCP
  MAC/IP
   UDP 67/68广播寻址, ARP 确认冲突
 工具
  Fiddler/SmartSniff/WireShark/netstat/telnet/SSH/...


记得第一次接触网络是在 96年, Netware 内网工作站, 当时一不小心进去系统把管理员和学生账号的密码都改掉了, 老师没办法找到我, 我只好假装蒙对密码, 让系统能进去.

跟网络相关的, 还有一次是用来做数据库复制, 见 自学编程难不难系列 之 数据库复制.

后来第一次写网络程序是用 VB 写一个小的聊天程序, 那是 2000年的事了. 再后来用 Delphi, 也是写了好几个用 UDP 的网络程序, 特别是那个智能票箱系统, 各站点及服务器之间全部是用 UDP 通信.

有一次做一个电子书程序, 用 DHCP 来发现即时连进来的电子书, 通过 67端口, 可以立即发现新来的电子书硬件, 可以管理电子书.

Fun 语言原来是主要用来写 Windows 客户端的, 在不得已的情况下, 几乎完整实现 客户端/服务端 TCP/UDP/HTTP Client/HTTP Server/WebSocket 等功能, 甚至还做了 Gzip 支持.

也在一些需要用到的地方, 部分实现了 FTP/POP/SMTP 的一些功能.

学以致用, 用是最好的老师, 用到哪儿学到哪儿, 这样效果是最好的.