lesson6 简单网络连接-网卡与以太网
在网络协议的四层或者七层结构中,有一层叫做物理层,具体的内容就涉及到网卡和以太网的知识。
1.以太网的基本知识
以太网是一种为多台计算机能够彼此自由和廉价地相互通信而设计的通信技术。这种网络的本质就是一根网线。下图是以太网的基本结构:
图中收发器的功能只是将不同网线之间的信号连接起来而已。因此,当一台计算机发送信号时,信号就会通过网线流过整个网络,最终到达所有的设备(大家想下高中学习的电路原理就清楚了)。信号传递是通过在MAC头部的地址来判断网络上的接收者是哪个设备的。网络发展过程中,连接网线的设备从简单的收发器到中继式集线器再到交换式集线器(俗称交换机)再到现在的路由器(当然集线器和交换机目前也是很常用的设备)。
2.将IP包转换为电信号或者光信号发送出去
IP层生成的网络包只是存放在内存中的一串数字信息,没有办法直接发送给对方。因此,需要将数字信息转换为电信号或者光信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
负责执行这一操作的是网卡,但网卡需要网卡驱动程序的支持。网卡的内部结构如下图所示:
网卡在操作系统启动时,通过调用网卡驱动程序来对其进行初始化。网卡的ROM里保存着全世界唯一的MAC地址,这是在生产网卡时写入的。初始化时将这个值读出之后存放在MAC模块中,每次使用的时MAC模块里的网卡地址信息。
3.给网络包再加3个控制数据
网卡驱动从IP模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC模块发送发包指令。接下来就轮到MAC模块进行工作了:
-
首先,MAC模块会将包从缓冲区取出,并在开头加上包头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。如下图:
-
MAC模块将数字信号转换为电信号,由PHY/MAU的信号收发模块发送出去。这里的信号转换需要时钟信号的调和:
发送信号的操作分为两种:一种是使用集线器的半双工模式(收发不能同时进行),另一种是使用交换机的全双工模式(收和发可以同时进行)。
在半双工模式中,就需要进行信号检测,遇到信号碰撞的情况会作出相应处理,具体的处理过程感兴趣的同学需自行查阅。
4.接收返回包
在使用集线器的半双工模式以太网中,一台设备发送的信号会到达连接在集线器上的所有设备。这意味着无论是不是发给自己的信号都会通过接收线路传进来。
在接收返回包时,先通过PHY/MAU模块将电信号转换为通用模式并发送给MAC模块,MAC模块在从头开始将信号转换为数字信息,并存放在缓冲区中。在到达信号末尾时,还需要检查FCS。如果FCS校验没有问题,接下来就看一下MAC头部中接收方MAC地址和网卡在初始化时分配给自己的MAC地址是否一致,决定是传递包给IP层还是丢弃包。
读取包内容并不是自主行为,我们在前面课程说到用read(…)函数时会阻塞socket操作,是通过系统中断操作来通知socket接收数据的(涉及到更底层的知识,会在以后的操作系统课程里给大家介绍)。前面讲过MAC头中有一个协议类型,IP协议用的是0x0080。
至此,将一整套网络协议栈讲解完毕。