网络传输的前三层:
①网线直连
两台设备通信最原始的方式就是一台设备开一个网口,用网线连接起来。
缺点:随着设备增多,设备无法拥有足够多的网口,并且网线混乱,设备两两相连不现实。
②物理层:集线器
在这种情况下出现了物理层的中间设备:集线器。
每台设备只需要用网线与集线器相连,由集线器做转发,这样做就减少了网口和网线的数量。
当设备A向设备B发送数据时,数据包头部需要包含源mac地址和目的mac地址。集线器只会进行简单的转发,设备A发送的数据会发送给连接到集线器的所有设备,设备B收到数据包后根据头部的目的mac地址判断是发给自己的将数据接收,其它设备根据mac地址判断不是发给自己的将数据丢弃。
缺点:数据每次都会发送给连接在同一集线器上的所有设备,浪费大量的网络资源,同时不安全。
③数据链路层:交换机
交换机对比集线器,只会把数据发送给目的mac地址。交换机会维护一张MAC地址表,记录了mac地址和端口的对应关系。当交换机接收到数据时,会发送给目的mac地址映射的端口发送给对应的设备。
起初MAC地址表是空的,在目的mac地址在MAC地址表中,没有映射的时候,交换机会将此包发送给所有端口,将作出响应的端口更新到MAC地址表中。经过网络中机器的不断通信,MAC地址表建立完成。通过这种方式传输的小范围网络叫做以太网。
当设备越来越多时,交换机的端口也不够用了,就需要把多台交换机连接起来解决问题。
缺点:随着设备的增多,即使将多台交换机连接起来可以解决问题,但是mac地址表也会维护的越来越大,这种方式就不再能够支撑。
④网络层:路由器
路由器是一台独立的拥有MAC地址的设备,并且可以把数据包做一次转发。路由器的每一个端口都有独立的MAC地址,交换机的MAC地址表中只需要多出一条路由器的MAC地址与交换机端口的映射关系即可。
交换机通过判断两台设备是否属于同一子网,把不同子网通信的数据发送给路由器。每一台设备同时拥有自己的IP地址和MAC地址,在设备A进行通信时,设备A上需要设置默认网关,也就是在设备A中配置一个IP地址,在发给不同子网的机器时,发给这个IP地址。
路由器通过路由表判断收到的数据包该从哪个端口出去,路由表是通过多种路由算法计算得来的,路由表并不是一对一的关系。路由器将数据转发到另一交换机后,在数据链路层数据包仍需要知道目的ip地址所对应的mac地址,所以用到了arp协
议。设备A和设备B通信,那么设备A和B中都会有一张arp缓存表,记录IP与MAC地址的对应关系。与MAC地址表一样,arp缓存表一开始也是空的,设备A为了知道B的mac地址,将会广播一条arp请求,B收到请求后带上自己的MAC地址给A一个响应,A再更新自己的arp表。通过不断广播arp请求不断更新arp缓存表。
参考(一篇介绍的很详细的文章):https://mp.weixin.qq.com/s/jiPMUk6zUdOY6eKxAjNDbQ