| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 05-从物理层到MAC层 -> 正文阅读 |
|
[网络协议]05-从物理层到MAC层 |
????????第一层(物理层)? ? ? ? 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。主要任务是确定与传输媒体接口有关的一些特性,定义标准。 ? ? ? ? 用两条网线将电脑连接起来,就组成了一个最小的局域网。集线器Hub,这种设备有多个口,可以将多台电脑连接起来,但是和交换机不同,集线器没有大脑,完全在物理层工作,它会将自己收到的每一个字节,都复制到其他端口上去。 ? ? ? ? 第二层(数据链路层)? ? ? ? Hub采取的是广播模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。需要解决几个问题: ? ? ? ? 1.这个包是发给谁的?谁应该接收? ? ? ? ? 2.大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则? ? ? ? ? 3.如果发送的时候出现错误,怎么办? ? ? ? ? 这几个问题,都是在第二层,数据链路层,也即MAC层需要解决的问题。MAC的全称是Medium Acess Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发,谁后发的问题。防止发生混乱。这解决的是第二个问题,这个问题中的规则,学名叫多路访问。有很多算法可以解决这个问题。就像车管所管束马路上跑的车。 ? ? ? ? 方式一:分多个车道,每个车道,各走各的,在计算机网络中叫作信道划分。 ? ? ? ? 方式二:单双号出行,?轮着来,在计算机网络中叫作轮流协议。 ? ? ? ? 方式三:不管三七二十一,有事儿先出门,发现堵车,就回去,错过高峰在出行,这种叫作随机接入协议。著名的以太网就是使用的这个方式。 ? ? ? ? 解决了第二个问题,就是解决了媒体接入控制的问题,MAC的问题也就解决好了,这和MAC地址没有什么关系。 ? ? ? ? 接下来解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫作链路层地址,但是因为第二层主要解决媒体接入控制的问题,所以它常被称为MAC地址。 ? ? ? ? 解决第一个问题就牵扯到了第二层的网络包格式。对于以太网,第二层的最开始,就是目标的MAC地址和源MAC地址。 ? ? ? ? 接下来的是类型,大部分的类型是IP数据包,然后IP里面包含TCP、UDP,以及HTTP等,这都是里层封装的事情。 ? ? ? ? 有了这个目标MAC地址,数据包再链路上广播,MAC的网卡才能发现,这个包是给他的,MAC的网卡把包收进来,然后打开IP包,发现IP地址也是自己的,再打开TCP包,发现端口也是自己的,也就是80,而Nginx就是监听80. ? ? ? ? 于是将请求交给Nginx,Nginx返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到MAC层。因为来的时候有源MAC地址,返回的时候,源MAC地址就变成了目标MAC地址,再返回给请求的机器。 ? ? ? ? 对于以太网,第二层的最后面是CRC,也就是循环冗余检测。通过XOR异或算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。 ? ? ? ? 这里面还有一个没有解决的问题,当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了N台机器,怎么知道每个MAC地址是谁的呢?这就是ARP协议,也就是已知IP地址,来求MAC地址的协议。 ? ? ? ? ? 在一个局域网里,当知道了IP地址,不知道MAC地址怎么办呢?靠吼来解决。 ? ? ? ? 广而告之,发送一个广播包,谁是这个IP谁来回答,具体询问和回答的报文就行下面这样: ? ? ? ? ? 为了避免每次都用ARP请求,机器本地也会进行ARP缓存。当然机器会不断的上线下线,IP也可能会变,所以ARP的MAC地址缓存过一段时间就会过期。? ? ? ? ? 局域网? ? ? ? 局域网,对于数量少的机器组网没有问题,但是一旦机器的数目增多,问题就出现了,因为Hub是广播的,不管某个接口是否需要,所有的Bit都会被发送出去,然后让主机来判断是不是需要。这种方式路上的车少就没有问题,车一多,产生冲突的概率就提高了。而且把不需要的包转发过去,纯属浪费。Hub这种不管三七二十一的转发设备是不行的,需要智能一点的,因为每个接口都只连接一台电脑,这台电脑又不怎么换IP和MAC地址,只要记住这台电脑的MAC地址,如果目标MAC地址不是这台电脑的,这个口就不用转发了。 ? ? ? ? 谁能知道目标MAC地址是否就是连接某个口的电脑的MAC地址呢?这就需要把一个能把MAC头拿下来,检查一下目标MAC地址,然后根据策略转发的设备,这个设备显然是二层设备,称之为交换机。 ? ? ? ? 交换机怎么知道每个口的电脑的MAC地址呢?这需要交换机会学习。 ? ? ? ? 一台MAC1电脑将一个包发送给另一台MAC2电脑,当这个包到达交换机的时候,一开始交换机也不知道MAC2的电脑在哪个口,所以没办法,它只能将包转发给出了来的那个口之外的其他所有的口。但是,这个时候,交换机就会记住MAC1是来自一个明确的口,以后所有包的目的地址是MAC1的,直接发送到这个口就可以了。 ? ? ? ? 当交换机作为一个关卡一样,过了一点时间之后,就有了整个网络的一个结构了,这个时候,基本上就不用广播了,全部可以准确转发。当然,每个机器的IP地址会变,所在的口也会变,因而交换机上的学习结果,我们称之为转发表,是有一个过期时间的。 ? ? ? ? 有了交换机,一般来说,接个几十台上百台机器打游戏,应该没啥问题。 ? ? ? ? 小结? ? ? ? 1.MAC层是用来解决多路访问的堵车问题; ? ? ? ? 2.ARP是通过吼的方式来寻找目标MAC地址的,吼完之后记住一段时间,这个叫做缓存; ? ? ? ? 3.交换机是有MAC地址学习能力的,学完了之后就知道谁在哪儿看了,不用广播了。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:22:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |