zoukankan      html  css  js  c++  java
  • tcp/ip 卷一 读书笔记(3)为什么既要有IP地址又要有MAC地址

    网络层

    首先明确一点,并不是所有的网络之间传输数据都需要mac地址和ip地址,比如说点对点线路之间的通信就没有MAC地址,网络层使用ipx协议时就没有ip地址,但是在当前的主流网络中,我们都使用ip地址和mac地址

    既然mac地址唯一,为什么还要有IP地址?

    之前我们提到,mac地址是唯一的,那理论上,在任何两个设备之间,我应该都可以通过mac地址发送数据,为什么还需要ip地址?

    mac地址就好像个人的身份证号,人的身份证号和人户口所在的城市,出生的日期有关,但是和人所在的位置没有关系,人是会移动的,知道一个人的身份证号,并不能找到它这个人,mac地址类似,它是和设备的生产者,批次,日期之类的关联起来,知道一个设备的mac,并不能在网络中将数据发送给它,除非它和发送方的在同一个网络内。

    所以要实现机器之间的通信,我们还需要有ip地址的概念,ip地址表达的是当前机器在网络中的位置,类似于城市名+道路号+门牌号的概念。通过ip层的寻址,我们能知道按何种路径在全世界任意两台Internet上的的机器间传输数据。

    mac地址通常是不变的,ip地址是可变的,尤其是移动设备,ip地址会经常变更。

    mac地址的设计不携带设备在网络中的位置信息,想要通过mac地址通信,我们得在所有的设备上维护一张很大的表,记录所有mac地址路由在当前位置的的下一跳,这显然是不合理的。

    既然能通过ip地址发送数据,为什么要有mac地址

    既然ip地址有位置信息,而且在一个网络中也是唯一的,那么我们为什么不完全通过ip地址通信,抛弃mac地址呢?或者说,合并ip层和mac层的功能。

    • 历史原因
      最初的链路层协议是和ip地址无关的,没有网络层方面的设定,只有物理层和链路层,最初也只有集线器,没有交换机路由器,服务器之间传输数据全靠mac地址。在没有ip地址之前,mac地址已经在使用了。现在到处都在用的二层交换机,就是根据mac地址转发数据。

    • 设计的原因
      现在这样设计是好的设计,链路层的实现不需要考虑数据之间的转发,网络层的实现不需要考虑物层的影响。

    也就是说,理论上可行,目前无太大意义,反而有坏处。

  • 相关阅读:
    ActiveMQ( 一) 同步,异步,阻塞 JMS 消息模型
    rocketmq (一)运行原理以及使用问题
    Springboot+ActiveMQ(ActiveMQ消息持久化,保证JMS的可靠性,消费者幂等性)
    ActiveMQ(下载,启动,java程序中 如何操作)
    ActiveMQ(为什么要使用消息中间件,JMS传输模型)
    java(线程池的创建方式,和线程池的原理)
    java多线程
    Zookeeper实现负载均衡
    Zookeeper实现分布式锁
    SpringCloud-断路器(Hystrix)
  • 原文地址:https://www.cnblogs.com/zhangyufei/p/5565646.html
Copyright © 2011-2022 走看看