自学编程难不难系列 之 网络 ..
作者: 一了 <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 的一些功能.
学以致用, 用是最好的老师, 用到哪儿学到哪儿, 这样效果是最好的.