2021-05-12

如何设计网络?(微信公众号低并发编程)

一台电脑孤苦伶仃,两台电脑如何实现通信?很自然地想到在2台电脑之间连一根网线,

第一层:当有3台电脑时,自然想到  当电脑越来越多,需要越来越多的网线,网线太密集了,且网口也太多了,这时我们想到把这些混乱的线集中放在一个设备中,由这个设备集中转发,这样网口、网线数量就没那么多了,看上去也比较舒服。

这个设备就叫做集线器。它只是将电信号无脑地转发到所有出口(不做任何处理),做的工作比较傻瓜,就把它定义在了物理层。       

由于转发到了所有出口,那计算机如何知道数据包是不是发给自己的呢?现在就需要给每个计算机分配一个更高端的名字称为MAC地址(全局唯一的名字)。加入你的MAC地址是 aa-aa-aa-aa-aa,你的伙伴MAC地址是 bb-bb-bb-bb-bb-bb,以此类推,不重复就好。你在给他发送数据包时在头部拼接一个这样结构的数据,

他在收到数据包后,根据MAC地址信息,判断这个数据包的信息发给自己的,就收下。其他发现数据包不是发给自己的,就丢弃。 这种方式会有安全问题,也不节省网络资源。

 

第二层:要是有一种设备收到数据包之后,就知道要发给谁就好了,这种工作稍微智能化一点,把它定义在数据链路层,这种设备叫交换机。可是交换机收到数据表怎么知道要发给谁呢?在交换机中有一张表,叫MAC地址表,上面标明了每台计算的MAC地址以及端口。你发送出了一个数据包,达到交换机,发现目标机器的MAC地址被映射到了端口1上,于是把数据从1号端口发给了目标机器。通过这样传输方式而组成的小网络叫作以太网。

但是,这样的MAC地址表如何建立起来?过程大概像第一层的方式,根据目标MAC地址,如果哪个端口有相应,就把这个端口和目标MAC地址写进表中。

当计算机再增多,交换机的端口也不够用了,又想到交换机之间的互联。

左边的交换机

右边的交换机

当计算机数量增多时,这种方式也不太好了

第三层:可不可以把两个交换机之间的线换成一个有自己MAC地址,并且能转发数据包的设备?把这个设备定义为路由器,定义在网络层。

每个路由器都有自己的MAC地址表!

路由器也有路由表,路由表根据路由协议制定,比较难,一般都会直接给出。

假设A发给F:1.A 的IP地址和F的IP地址与子网掩码相与,发现不相等,A将数据包发给默认网关。

                       2.A通过ARP协议找到默认网关的MAC地址ABAB。

                       3.A将源MAC地址与网关MAC地址封装在数据链路层头部。

                      4.交换机收到数据包后,发现目标MAC是ABAB,转发给路由器1

                      5.路由器1收到数据包后,发现目标IP,查看路由表,发现下一跳地址是192.168.100.5

                      6.查看路由表,发现匹配到端口2,将端口2MAC地址封装在数据链路层,再把包从端口2发出去。

                 7.路由器2收到数据包后,发现目标IP,查看路由表,匹配到端口1,数据包由端口1发出去。

                8.   此时路由器2需要知道192.18.2.2的MAC地址,查看其arp缓存,找到其MAC地址为FFF,将其封装在数据链路层头部,并从端口1发送数据包。

                

                9.交换机3收到了数据包,发现目标MAC地址是FFF,查寻其MAC地址表,匹配到端口6,于是从6号端口发送数据包。

               10.最终F收到了数据包!并且发现目标MAC地址就是自己,于是收下了这个包。

总结:电脑视角:首先要知道发送方和接收方的IP

                             通过子网掩码判断二者是否在同一个子网

                             在同一个子网,就查看ARP缓存表,获取接收方的MAC地址,扔出去

                             不在同一个子网,就通过ARP获取默认网关的MAC地址直接扔出去

           交换机视角:收到的数据包必须有目标MAC地址

                                通过MAC地址表查看映射关系

                                查到了就从对应的端口发出去

                                查不到就说有端口发出去

            路由器视角:收到的数据包必须含有目标IP地址

                                  通过路由表查看映射关系

                                  查到了就从对应端口发出去

                                  查不到就返回一个路由不可到达的数据包

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值