windows访问共享目录使用的是一个叫SMB的应用层协议,这是一个工作在TCP/IP层之上的协议。从输入局域网共享目录机器名开始,你电脑悄悄地帮你做了如下的若干事情:

    • 向对方电脑的IP地址发送一个合适的SMB数据包
    • 传输层将这个数据包作为数据包含在在自己的TCP数据块里,加上自己的头信息,重要信息是加上SMB的协议端口
    • 通过ARP协议找到相应的MAC地址后(但一般这个都已经在arp-cache里面了),在链路层包中填上MAC地址
    • 交给物理层真正的运输出去。

    那么当对端的网卡怎样在网络上收到这么一个包呢,它是如何知道网络上那么多的包,哪一个是发给自己的呢?当然是通过MAC地址,网卡驱动程序在对比了MAC地址之后,发现和自己MAC地址相匹配包会产生一个中断告诉CPU去读取这个包并向上传递。所以当对端主机检测到相应的包之后他会这样默默的做很多事情:

    • 链路层对比MAC地址,然后将自己的数据链路头信息去掉,交给网络层
    • 网络层程序读取IP地址并且对比,如果可以让其通过,去掉自己IP头信息,将数据包交给传输层
    • 应用层拿到数据后根据自己的需要进行处理
      看到这个步骤,对于2,3可能会产生疑问,既然MAC地址是唯一的,保证了可以筛选到合适的数据包,为什么到上一层还要有一次网络层的筛选呢?难道一个MAC地址还能对应多个IP地址?在一般情况下,这是不可能的,如果真的一个MAC地址对应了多个IP地址的话,那么一般情况下你可能是遭遇了ARP欺骗了。那么IP层的过滤一般有什么用呢?答案是防火墙,防火墙一般都会工作在这一层,因为IP数据包里拥有一些,具体的技术就比较多了,可以去google一下。

    其实从一个电脑接上网络开始系统就默默的做比上面这个几个步骤更多的步骤,因为很多协议都没有具体介绍,所以在后面介绍到合适的时候,再回来利用这个例子来阐述一下当你刚装好系统,插上网线的那一刹那到访问一个共享目录都发生了些啥。