从小网络开始
当两台计算机想要互相通信时,只需要在它们之间添加一条信道
当
- 有多个端口
,每个端口和一条信道 相连 - 每次从端口
收到消息 ,会无条件转发给 - 多台计算机同时发消息会造成相互干扰,导致数据紊乱
所以我们可以用交换机
有多个端口
,每个端口和一条信道 相连 内部维护了一个MAC地址表
MAC地址是每张网卡的唯一标志
以下图为例,其MAC地址表完整状态下应该为:
MAC地址 端口 BL:AC:K0
PU:RP:LE
GR:RE:N0
OR:AN:GE
MAC地址表是动态自动维护的(通过泛洪),也可以手动配置
支持广播和单点转发
- 广播:从
收到消息 后,发现 是一条广播消息,则会转发给 - 单点转发:从
收到消息 后,在自己的MAC表中,找到消息 携带的目标MAC地址对应的端口
- 广播:从
记不住网卡MAC地址...
上述的通信方式,是和网卡强相关的,如果我不知道目标的网卡,或者与我通信的计算机的网卡被更换了,似乎就只能通过和目标直接线下协商,才能建立通信了
为了分离网卡对通信的强绑定,我们抽象出了一个叫做IP地址的东西,这样我只需要知道IP地址就能和目标进行通信了,即使对方更换了网卡,只要IP地址没有变化,都能继续通信,而确保我能通过对方IP地址获取对方MAC地址的协议叫做ARP协议。ARP协议涉及到一个ARP记录表,是存放在本机上的
稍微大一点的网络
我们可以继续尝试在交换机网络
不过我们很快遇到了瓶颈:
- 交换机的MAC地址表大小有限制,不能记录下全网每台MAC对应的端口
- 在广播时,全网泛洪让网络效率非常糟糕
于是我们希望把网络隔离开,将网络分成不同的网段,交换机只用来传输同一网段的信息,于是子网掩码
这样计算机可以通过
路由器维护了一个叫做路由表的东西,有不同的协议(OSPF,BGP)来自动维护路由表,保证
传输层
当消息
不过面对复杂的网络环境,UDP协议并不稳定,我们希望有一种协议能保证消息可靠到达,基于此愿景诞生了TCP协议,TCP协议需要解决:连接建立,连接关闭,数据分包,分包确认应答,重传分包,分包整理,控制传输速度(滑动窗口,拥塞控制)
应用层
UDP和TCP是应用层协议的根基
graph TB
TCP-->HTTP
TCP-->HTTPS
TCP-->FTP
TCP-->POP3
TCP-->...
graph TB
UDP-->NFS
UDP-->TFTP
UDP-->SNMP
UDP-->DHCP
UDP-->...
IPv4告急
随着网络继续扩大,IPv4不够用了,于是我们让内网的所有计算机共有一个公网IP,由路由器
内网IP | 内网端口 | 公网端口 |
---|---|---|
192...1 | 1000 | 555 |
192...2 | 1000 | 666 |
这就是NAT协议