现实中不都是:终端-交换机-路由器-互联网-路由器-交换机-终端。
交换机是数据链路层设备,路由器是网络层设备。
“那为什么先去在路由器封装IP再到交换机封装MAC呢?”
题主可能以为,终端(host)封装好7层(http),再用4层(TCP)封装http,成为TCP + http包裹。然后把(TCP + http)包裹扔给3层路由设备,路由设备生成IP + TCP + http Packet。再然后,路由设备再将Packet扔给二层交换机,封装成 Ethernet + IP + TCP + http Frame。最后,从交换机端口的物理层以PAM调制模式发出。
这显然是认识误区!
每个通信终端(host)独立自主实现了OSI七层功能,用户数据离开主机(Write)的过程。
http—tcp—IP
到达IP层的时候,如果主机有多个物理接口,都可以到达目的地IP。根据物理接口对应的路由优先级选择最优物理接口,可以让Packet离开。
- 如果以太网接口最优,扔给它处理,PAM调制,添加Preabmle + SFD 物理层同步信号,离开物理接口的样子是这样的;
http–tcp–IP–Ethernet–SFD–Preabmle
- 如果以Wi-Fi接口最优,扔给它处理,QPSK调制,添加STF+ LTF +Signal物理层同步信号+训练符,离开物理接口的样子是这样的;
http–tcp–IP–802.11 – Signal–LTF–STF
- 如果光纤接口最优,扔给它处理,QAM调制,添加Preabmle + SFD 物理层同步信号
离开物理接口的样子是这样的;
http–tcp–IP–Ethernet–SFD–Preabmle
已经从上文3个物理接口离开了主机的数据包裹,以不同的形式在传输介质(medium)传播,但信号总要的落地的。换句话说,总要有一台设备需要读取(Read)上文的包裹。
如果读取上文包裹的是目的主机,即目的IP == 主机本身IP的情况。
为了读取1,那么需要实现:
Preabmle–SFD–Ethernet–IP–tcp–http
神奇的一幕发生了。
如果把
http–tcp–IP–Ethernet–SFD–Preabmle
比喻成从7楼下到1楼的下楼过程,那么
Preabmle–SFD–Ethernet–IP–tcp–http
就是从1楼上到7楼的爬楼过程。
完全相逆的!
至于为何要用7层来完成这个通信过程,而不是2层,直接将用户的数据写入物理层可以吗?
当然可以。
但是,如果接收主机(Destination Host)距离源主机(Source Host)距离非常遥远,远远超出上文3种传输介质的传输距离,怎么办?
采用信号中继(Relay),每隔一端距离将衰减信号采样出来,功率放大,再调制发送出去。通过N次的中继接力,可以将信号传输到地球上的每一个角落。这不就是海底光缆的工作原理吗?
可是,如果光缆的一端仅仅连接一台主机,一条海底光缆耗费几百亿美元就为了2台主机玩对战游戏,马斯克也会觉得这是极大的资源浪费!
为了共享以上稀缺的传输介质,需要有各种各样的中继设备,中继设备的存在才使得互联网(Internet)成为可能。
依据中继设备工作楼层,大体可以分为:
物理层中继(Layer 1 Relay )
光纤中继、早期的以太网Hub, 主要为了信号跑得更远。
链路层中继(Layer 2 Relay )
二层交换机、AP、光猫、桥接模式的家庭路由器、桥接模式防火墙,一方面可以信号传输的更远,但主要是为了提供更多物理接口、虚拟接口,无限扩展Internet的势力范围。
网络层中继(Layer 3 Relay)
三层交换机、路由器、路由模式防火墙、具有路由能力的服务器。一方面可以信号传输的更远,但最最主要的是为了进行过滤(Filter)、访问控制(Access List)。
最后再回到题主的问题:“现实中不都是:终端-交换机-路由器-互联网-路由器-交换机-终端。”
这个问题描述完全正确,通过上文对各种中继设备的对比你会发现。之所以终端(Host)不直接连接路由器,而是先连二层交换机。是因为交换机有更多的端口供终端连接。
比如,一台带扩展板卡的交换机拥有512个端口,可以连接512个终端。
比如,一个无线AP,最大可以提供256个虚拟端口,最大支持连接256个终端。
而通常路由器、路由模式的防火墙就4个接口,可能扩展到8个,理论上最大可以连接8个终端。一台几万美元的路由器/防火墙就为了连接8个终端?
嗯哼!
但是,一旦直连路由器/防火墙,那么这条直连网段上只有路由器、主机,意味着在这个直连网段上主机只能与路由器通信!
神奇再次出现!
一台三层交换机充当网关,即VLAN 子接口配置IP地址充当网关。终端都没有办法直连(Direct-Connected)网关!
为什么?
因为网关是虚拟的,是软件的形式存在的!
主机的一端是硬件的接口,网关是软件形式的,自然无法直连!
怎么办?
只要终端(Host)连接该网关所在的VLAN的交换机二层端口,就可以与网关通信了。
如果一个局域网属于VLAN 10的一共2048个端口,意味着连接这2048个端口的主机,都可以与网关(VLAN 10)进行直连通信。
且,2048个主机之间也可以直连通信,无需网关的介入。
当然,如果交换机在VLAN 10开启了端口隔离(Port Isolation),那么2048个主机还能通信吗?
不能了!
在VLAN 10这个网段,2048个主机可以和谁通信?
只能和网关通信。
以上说的你都明白了吗?