ip模块中存储的是一堆数字信号,网卡内部会把数字信号转换成电信号或者光信号在网线中传输。
网卡只是一个硬件,需要驱动程序去操作他,计算机中已经把主流网卡的驱动程序(不只是网卡的,还有鼠标,键盘这些硬件都需要驱动程序去操作运行)内置到计算机中了。
网卡的初始化
网卡和其他硬件一样,通上电之后需要完成初始化操作才能正常工作。
网卡mac模块设置mac地址
这些操作包括硬件错误检查、初始设置等步骤,这些步骤对于很多其他硬件也是共通的,但也有一些操作是以太网特有的,那就是在控制以太网收发操作的MAC模块中设置MAC地址。
mac地址会在网卡生产时写入网卡rom中。操作系统完成初始化之后,网卡的驱动程序会去读取网卡的mac地址并保存到自己mac模块中, 当完成这些初始化操作后就可以接受ip模块的委托了
mac模块的mac地址并不一定是网卡rom中的mac,也可以通过命令手动设置网卡mac模块的mac地址
组装控制信息
网卡的mac模块负责两部分:
1.驱动程序初始化时会取出网卡rom的mac地址并设置到mac模块之后填充。mac地址是tcpip模块从mac模块中取出的
2.ip协议通过本地路由表找到发送方的ip地址,并将数据传递给网卡,ip模块发送的数据会保存到网卡的缓冲区中;什么时候读取缓冲区进行数据发送呢? 网卡的mac模块会读取缓冲区数据 并将数字信号转换为通用信号并借助mai模块转换为网卡传输的数据格式并发送到网线中
添加报头起始帧和fcs
网卡会取出缓冲区的数据并切割,为每部分的头部填充包头和起始帧;尾部添加验证是否短缺的尾部(检测错误的帧校验序列)
为什么需要添加报头和起始帧呢?
报头
报头是一段长度为52bit, 01交替出现的数字信号,当用电信号来表示数字信号时,是通过高低电压的方式来判断的。其实他有一个作用是为了观察时钟信号的频率的(为了之后还原 原始数字信号的),之后讲解
起始帧
当56位的报头数据结束后,开始发送起始帧,起始帧末尾的两位都是1也就是末尾有两段是高电压,和之前的电路不同,因此当识别到这个不同的电路时,就知道接下来是真实的数据了,用来表示包起始位置的标记
起始帧后面就是ip模块发送的数据了(从网卡的缓冲区中取数据)
叠加时钟信号识别原始数据
但是真实的情况是并没有图中的那条界限去分割这些电信号(比如出现连续为1或连续为0的情况时接受方不知道该怎么切割信号还原),因此会将数字信号和时钟信号(时钟信号是固定频率固定信号)进行叠加然后发送,接收方只要知道了时钟信号的发送频率然后根据图中右下角的表和最终收到的信号对比就可以还原拿到原始的数字信号。
如何确定时钟信号的频率~报头
时钟信号是以10 Mbit/s或者100 Mbit/s这种固定频率进行变化的, 因此我们不能一开始就发送包的数据,需要观察一段时间时钟信号发送的频率。所以要在包前面加上一段用来测量时钟信号的特殊信号,这就是报头的作用。
「如果在包信号结束之后,继续传输时钟信号,就可以保持时钟同步的状态,下一个包就无需重新进行同步。有些通信方式采用了这样的设计,但以太网的包结束之后时钟信号也跟着结束了,没有通过这种方式来保持时钟同步,因此需要在每个包的前面加上报头,用来进行时钟同步。」
如何保持时钟信号同步_每个包头部都加报头
如果在包信号结束之后,继续传输时钟信号,就可以保持时钟同步的状态,下一个包就无需重新进行同步。有些通信方式采用了这样的设计,但以太网的包结束之后时钟信号也跟着结束了,没有通过这种方式来保持时钟同步,因此需要在每个包的前面加上报头,用来进行时钟同步。
fcs末尾校验序列
fcs用来检查包传输过程中因噪声导致的波形紊乱、数据错误,它是一串32比特的序列, 是根据包中所有的内容带入一个公式中计算出来的序列。当电信号中有一个比特位发生变化(可能是受到了电磁干扰,附近电信号的干扰)那么计算出来的值就会有变化。当接收方计算出来的fcs和发送方的fcs不一致时,就代表信号受到了干扰。
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表