首先要清楚的是,真正在网络中跑的报文,其实都是数据帧(IP报文是要给到数据链路层的)
认识以太网
以太网不是一种具体的网络,而是一种技术标准;它完整规定了物理层介质和信号、数据链路层的帧格式,以及介质访问控制方式(CSMA/CD或全双工)。只要这三者中的核心规范(尤其是访问控制方式和帧格式)有一个不符,就不是标准以太网。
平常听到的以太网规定了网络拓扑结构、传输速率等,也是对的。但是要清楚,网络拓扑结构、传输速率这些并不是以太网的硬性规定,也就是说不是使用了它们,所以使用的局域网就是以太网(没法成为以太网的身份认证),因为它们是衍生结果,比如网络拓扑结构,它是以太网物理层介质选择结果(是因为以太网物理层使用了这种介质,所以使用的这种网络拓扑结构)
以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网、无线LAN等
以太网帧格式
目的地址和源地址就是mac地址(网卡的硬件地址)
类型字段有三个值,分别为 IP(0800)、ARP(0806)、RARP(8035)
帧末尾是CRC校验码
帧的总长度有限制,数据部分得在46字节-1500字节之间
上图中的 PAD 就是填充部分,主要作用就是将数据部分扩充到46字节
接收方,如何分离报头和有效载荷
目的地址和源地址作为mac地址是固定大小的,固定长度的首和尾,根据长度直接分离就好
接收方,如何分用
类型就会告诉接收方,到底是交付给网络层,还是arp,rarp
访问控制方式(CSMA/CD)
要发送的主机准备发送前,先听信道是否有载波;信道空闲后,必须连续听满 96 比特(IFG)且在此期间不能听到任何杂音,才敢发;一旦在此期间听到载波,计时器立即归零,重新开始监听,直到载波消失,重新等待96比特
载波就是网线上跑的电
网卡开始发送数据帧后,会采用边发边听的措施(冲突检测),它会持续做两件事
- 发送自己的信号:把数据帧的比特流转换成电信号(或光信号)推到线缆上。
- 监听线缆上的信号:实时比对线缆上的信号波形与自己的发送波形是否一致。
如果监听到的信号与自己的信号一致就代表没有发生碰撞,网卡会持续发送完整个数据帧
如果监听到的信号与自己的信号不一致就会立即停止发送数据帧,就会立即发送拥塞信号(目的是为了通知当前所有正在发送的主机信道发生碰撞了,同时覆盖残留信号),然后发生碰撞的主机就会启动退避算法(根据当前帧的重传次数,随机抽取时间槽数(每个时间槽51.2微秒),然后倒计时),倒计时结束就会重新回到发送前状态(开始监听载波+IFG等待)
需要注意的是,如果碰撞发生在发送前期(64字节内),网卡可以及时检测到,但如果超过64字节才发生碰撞,此时检测窗口已过,网卡会无视这个碰撞继续发送(将数据帧长度最短设置为64字节,就是因为避免网卡发送完数据帧了才意识到数据发生碰撞(因为一旦网卡发送完数据帧就会将缓冲区清空))
同时单个数据帧长度不能过长,这是为了避免导致网络拥塞,因此就有了MTU(最大传输单元)
如果主机数增加的特别多,发生碰撞的概率也会增加
为了让主机数量太多也不要让网络流量降低的太快,就有了交换机
交换机可以把局域网划分,就是划分碰撞域
划分成A区域和B区域,A区域内的主机之间通信,交换机识别到就不会将报文给到区域B,区域B就不会受到影响,此时区域A和区域B内的主机可以彼此同时通信
一个区域内的可能会互相影响,但是影响远比整个局域网要小得多
局域网内怎么将报文给到下一跳
在同一个网段当中,必须要有一种技术,能够把下一跳IP转化成为下一跳主机的mac地址
这种局域网技术就是ARP(地址解析协议)
它属于数据链路层的协议,但是在封装mac帧之上,在网络层以下
ARP协议的基本原理
ARP的过程就是,先广播再一对一发送的过程
ARP大小是固定28字节
arp报文格式如图所示
硬件类型:链路层网络类型,1代表以太网
协议类型:要转换成为mac地址的网络层地址类型,0x0800为IP地址
硬件地址长度:链路层网络所要求的mac地址长度
协议地址长度:网络层IP地址长度
op(选项)字段:为1表示ARP请求,为2表示ARP应答
可以注意到arp报文里也包含了源mac地址和目的mac地址,好像和以太网的帧头的源mac地址和目的mac地址重复了,但是仍然是必须的。因为一个用来在数据链路层进行解析,一个在ARP层进行解析。主要是为了保证链路层是其他类型的网络时也不会出现问题(其它链路层网络不一定会在报头加上mac地址)
接收方数据链路层查看报头发现类型字段为0806,就会将有效载荷交给ARP层,ARP层首先会看op(选项),如果是请求,就会去看目的IP地址,查看是不是自己的IP地址,如果是就会去查看发送端IP地址,构建应答
应答报文是一对一通信,目的mac地址就是固定对象(发送方的mac地址)不再是广播地址,发送端mac地址就是自己
接收方接收到应答之后,给到arp层,arp会先看op,然后就去看发送端IP地址和发送端 mac地址
arp返回之后,mac和ip的映射关系就会被os缓存起来,防止频繁发送arp报文
arp缓存的存储时间长度一般是以分钟为单位
因为IP和mac不一定一直保持关系,它们是变化的,所以不能一直缓存,得缓存新的
主要是因为主机每次连网,都会申请IP,主机的IP是会变的
逆地址解析协议(rarp):知道mac,不知道IP
可以做arp欺诈,不停的给某个主机发送arp应答报文,由于arp缓存只会记录最新的信息,就导致发送信息时就会给到另一台主机
这种方式就是中间人攻击