# 入门

# 基础

# 易混淆的名词

  • 互联网(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 四层模型,现实世界

copy from 谢希仁

# 网络设备

  • 集线器
  • 交换机
  • 路由器

# 网卡

网卡拥有 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

可预测是说我们知道数据会顺着哪条路走。分组交换就是不可预测的,不知道数据会走哪条路,甚至不知道数据能否安全到达。

# 20世纪60年代:出现分组交换(packet switching)的概念