# 入门
# 基础
# 易混淆的名词
- 互联网(internet),指的是网络的网络,英文小写字母开头,中文采用意译;它可以将多个隔离的网络连接起来,例如公司办公网就是一种互联网,它连接了多个办公楼的网络;
- 因特网(Internet)是专有名词,所以英文大写开头,中文采用音译;它是目前最大的互联网,它把全球的网络连接了起来;
- 局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)和城域网(Metropolitan Area Network,MAN),这几个网络的区别是它们范围不同,中文采用意译;
- 以太网(Ethernet)是专有名词,所以英文大写开头,中文采用音译;以太网是局域网的一种,它还有另一个名字:IEEE 802.3,它非常厉害打败了历史上的其它局域网技术,是今天的主流;今天只要你插上网线那一定就是连入了以太网;如果你用手机连了WiFi,WiFi也是一种局域网,WiFi的另一个名字是:IEEE 802.11;可以说今天的局域网技术几乎被以太网和WiFi垄断了;
# 体系结构/五层模型
计算机网络体系结构
- OSI 七层模型,只是建议标准,事实上没人用
- 五层模型,只是教学上用
- TCP/IP 四层模型,现实世界
# 网络设备
- 集线器
- 交换机
- 路由器
# 网卡
网卡拥有 MAC 地址,是二层设备,一台电脑上可能会有多张网卡 (有线、无线、USB 设备、虚拟网卡)。
网卡只会接收发给自身 MAC 地址的数据包,这些数据包会被传给 CPU 处理,其它数据包会被网卡丢弃不经过 CPU。如果你正在做网络嗅探/抓包,则需要打开网卡的混杂模式,这样才能收到所有数据包。
TIP
你可以使用 libpcap/WinPcap 开启网卡的混杂模式。
# 网络编程
- Node.js 中通过
require('net')
访问 TCP - C++ 中通过
libnet/libpcap/WinPcap
访问 IP - Node.js 中通过
require('http')
访问 HTTP
# 网络嗅探/抓包
# 计算机网络发展史
# 20世纪60年代以前:电话网络
这种技术被称为电路交换,需要给通信双方建立一条连接,这个连接是物理上真实存在的(例如一条电路)。每个实体占用固定的带宽,即便打电话时一个字不说也会占用整条连接的资源。这种网络是可预测的,数据沿着预定的路线传输。在通信结束后需要清理连接,以便把资源让给别人。
TIP
可预测是说我们知道数据会顺着哪条路走。分组交换就是不可预测的,不知道数据会走哪条路,甚至不知道数据能否安全到达。