作者: 一了 <[email protected]> 日期: 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 的一些功能. 学以致用, 用是最好的老师, 用到哪儿学到哪儿, 这样效果是最好的.