Linux网络-MAC协议

  • 零、前言
  • 一、数据链路层
  • 二、以太网协议
    • 1、认识以太网
    • 2、以太网原理
    • 3、以太网格式
    • 4、MAC地址
    • 5、认识MTU
  • 三、ARP协议
  • 四、RARP协议

零、前言

本章主要讲解Linux网络中的数据链路层-以太网协议

一、数据链路层

  • 示图:

  1. 数据传输大部分是跨网段进行的,而多个主机共同组成一个网段,不同的网段通过路由器连接(路由器同样也是主机),所以数据跨网段传输实质就是数据在主机间传输
  2. 网络层IP提供的是跨网络发送数据的能力,而链路层解决的则是两台主机在同网段间的通信问题,即用于两个设备(同一种数据链路节点)之间的数据传递

二、以太网协议

1、认识以太网

  1. “以太网” 不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容
  2. 例如规定了网络拓扑结构,访问控制方式,传输速率等,例如以太网中的网线必须使用双绞线,传输速率有10M, 100M, 1000M等
  3. 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等
  • 常见局域网技术:
  1. 以太网:以太网是一种计算机局域网技术,一种应用最普遍的局域网技术
  2. 令牌环网:令牌环网常用于IBM系统中,在这种网络中有一种专门的帧称为“令牌”,在环路上持续地传输来确定一个节点何时可以发送包
  3. 无线LAN/WAN:无线局域网是有线网络的补充和扩展,现在已经是计算机网络的一个重要组织部分

注:虽然网络中各个局域网所采用的通信技术可能的不同的,但是IP屏蔽了底层网络的差异(数据进行路由选择时需要通过IP层,IP层根据分发的局域网的技术进行对应的封装),对于网络通信双方的IP层及其往上的协议来说,它们并不需要关心底层具体使用的是哪种局域网技术

2、以太网原理

  1. 以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据,只不过每个主机都只关心发送给自己的数据罢了
  2. 因为以太网共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰,数据相互碰撞后成为垃圾数据
  3. 站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用
  4. 局域网中的每个主机发送出去的数据与其他主机发送的数据产生了碰撞,就会执行碰撞避免算法,等待一段时间后再进行数据重发

注:网络抓包不仅能够抓到发送给自己的报文数据,也能抓取到发给别人的报文数据,实际就是因为在进行网络抓包时,主机将从局域网中收到的所有报文数据都向上交付了而已;网卡有一种模式叫做混杂模式,被设置为混杂模式的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它

3、以太网格式

  • 示图:

  • 说明:
  1. 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
  2. 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  3. 帧末尾是CRC校验码

注:收到MAC帧后,对收到的MAC帧进行CRC校验,如果校验失败则说明数据发送过程中产生了碰撞

  • MAC帧如何将报头与有效载荷进行分离:

以太网MAC帧的帧头和帧尾都是固定长度的,因此当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了

  • MAC帧如何决定将有效载荷交付:

在MAC帧的帧头当中有2个字节的类型字段,因此在分离出报头和有效载荷后,根据该字段将有效载荷交付给对应的上层协议即可

4、MAC地址

  • MAC地址:
  1. MAC地址用来识别数据链路层中相连的节点
  2. 长度为48位,即6个字节,一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  3. 在网卡出厂时就确定了, 不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
  • 理解MAC地址和IP地址:
  1. IP地址描述的是路途总体的起点和终点(标识数据的发起位置和目标位置)
  2. MAC地址描述的是路途上的每一个区间的起点和终点(标识数据发出到接收中途经过的位置)

注:源IP地址和目的IP地址可以理解成是不会变化的,而数据源MAC地址和目的MAC地址都会变化;实际数据在路由过程中,源IP地址和目的IP地址也可能会发生变化(NAT技术)

5、认识MTU

  • MTU概念:
  1. MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制
  2. 以太网帧中的数据长度规定最小46字节,最大1500字节;ARP数据包的长度不够46字节,要在后面补填充位
  3. 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  4. 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)
  • MTU对IP协议的影响:
  1. 由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包
  2. 将较大的IP包分成多个小包, 并给每个小包打上标签
  3. 每个小包IP协议头的 16位标识(id) 都是相同的
  4. 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0)
  5. 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层
  6. 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败,但是IP层不会负责重新传输数据(TCP协议会负责进行丢包重传)

  • MTU对UDP协议的影响:
  1. 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败
  2. 那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了(并且UDP不会进行丢包重传)
  • MTU对于TCP协议的影响:
  1. TCP的一个数据报也不能无限大,还是受制于MTU,TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size)
  2. TCP在建立连接的过程中, 通信双方会进行MSS协商
  3. 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
  4. 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  5. 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS
  6. MSS的值就是在TCP首部的40字节变长选项中(kind=2)
  • MSS和MTU的关系:

  • 查看硬件地址和MTU:

使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU

三、ARP协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议

  • 示图:

  • ARP协议的作用:
  1. ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
  2. 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
  3. 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃,因此在通讯前必须获得目的主机的硬件地址
  • ARP协议的工作流程:

  • 过程说明:
  1. 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
  2. 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  3. 实际不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a命令进行查看
  • ARP数据报的格式:

  • 说明:
  1. 硬件类型指链路层网络类型,1为以太网
  2. 协议类型指要转换的地址类型,0x0800为IP地址
  3. 硬件地址长度对于以太网地址为6字节
  4. 协议地址长度对于和IP地址为4字节
  5. op字段为1表示ARP请求,op字段为2表示ARP应答

注:源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的

  • 在进行局域网通信时,为什么不直接以广播的方式发送数据:
  1. 对于局域网当中的大多数主机来说,收到的这个报文其实早就应该被丢弃,而现在这个报文却交付到了IP层,这对网络资源和系统资源来说都是一种浪费
  2. 如果无脑使用广播的方式来进行数据的发送,会使得广播和单播的概念变得模糊不清,你明明是想发送数据给局域网当中的一台主机,但你却采用了广播的方式,这显然是不合理的

注: ARP属于局域网通信的协议标准,因此一台主机不能跨网络向另一台主机发起ARP请求

四、RARP协议

  1. RARP(Reverse Address Resolution Protocol,反向地址转换协议),是根据MAC地址获取IP地址的一个TCP/IP协议

  2. 也就是说,某些情况下我们可能只知道一台主机的MAC地址,此时要得知该主机的IP地址就可以使用RARP协议

  3. 理论上来说,RARP协议一定比ARP协议简单,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了

Linux网络-MAC协议相关推荐

  1. 论文笔记-高速无人机网络MAC协议

    参考文献: 常扬, 陈建民, 马鹏飞. 高速无人机网络MAC协议设计与性能分析[J]. 无线电工程, 2011(03):27-30. 注意: 文中双引号斜体部分为引用论文原文 论文背景 需要一套快速展 ...

  2. Linux网络-IP协议

    文章目录 零.前言 一.网络层 理解路由选择 二.IP协议 三.网段划分 四.IP地址数量限制 五.私有和公网IP地址 NAT技术 六.路由 零.前言 本章主要讲解学习网络层的作用, 深入理解IP协议 ...

  3. 基于异步竞争的无线传感器网络MAC层协议介绍(X-MAC ContikiMAC)

    基于异步竞争的无线传感器网络MAC层协议介绍(X-MAC ContikiMAC) 无线传感器网络(wireless sensor networks, WSN)节点由电池供电,其能力非常有限,同时由于工 ...

  4. Linux 网络编程基础-socket

    标题文章目录 Linux 网络基础 分层模型结构: C/S 模型:client-server B/S模型:browser-server 以太网帧和ARP协议 IP 协议 UDP 协议 TCP 协议 网 ...

  5. 【Linux网络编程】原始套接字实例:MAC 头部报文分析

    通过<Linux网络编程--原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? MAC 头部(有线 ...

  6. 嵌入式linux ntpd命令,嵌入式Linux网络编程之:实验内容——NTP协议实现

    本文引用地址:http://www.eepw.com.cn/article/257114.htm 10.4实验内容--NTP协议实现 1.实验目的 通过实现NTP协议的练习,进一步掌握Linux网络编 ...

  7. Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)

    Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...

  8. Linux网络服务-Web Service之【HTTP协议简介】(一)

    一.什么是HTTP? 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议.设计HTTP最初的目的是为了提供一种发布和接收 ...

  9. 【Linux网络编程】无连接和面向连接协议

    00. 目录 文章目录 00. 目录 01. 概述 02. 附录 01. 概述 网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议 ...

  10. 苹果mac电脑修改并快速linux网络配置

    mac电脑配置linux网络配置 说明:有小伙伴拥有mac电脑但是配置linux的网络时候总是找不到网卡和ip配置,话不多说我们开始吧- 如何快速配置网关和ip 查看ens33网络配置文件并修改BOO ...

最新文章

  1. pip包管理工具-install执行流程简单查看
  2. Bootstrap栅格布局系统的特点
  3. 解决 'config.h' file not found。升级xcode 新版本导致旧的RN项目打开报错 解决方法。...
  4. 【架构】学习余额宝背后的服务治理架构
  5. 飞鸽快递系统代码_自动售卖机、视觉+重力柜、自动寻址机、智能寄存柜解决方案及整套源代码...
  6. MVC把表格导出到Excel
  7. 文本多标签分类python_Scikitlearn多标签分类
  8. Linux上Oracle 11g安装步骤图解(超详细图文教程)附带导入数据和新建数据库教程
  9. 【转】ASP.NET MVC 3 Service Location, Part 5: IDependencyResolver
  10. 组装式AI落地新模式,降低企业AI试错成本
  11. Hive 之 排序和reduce设置
  12. phonegap安装 环境搭建与配置详解(3.4 完整版 提供下载地址)
  13. python3爬虫-通过requests爬取图虫网
  14. 计算机 管理策略,有关管理组策略管理模板的建议 (.adm) 文件
  15. 短视频剪辑的小技巧分享,助你剪出令人印象深刻的片段,吸粉引流
  16. 圆锥曲线之用齐次法求解直线过定点问题
  17. 学习Struts2框架笔记-第2天
  18. MOSS系列之三列表和文档库[转帖]
  19. 服务器性能差用cdn有用吗,CDN加速有用吗?对网站有什么好处?
  20. 开发一个商城需要多少钱 做一个电商网站大概多少钱

热门文章

  1. python词云制作(最全最详细的教程)
  2. SHELL脚本PPT脚本
  3. java jdk生成安卓app证书
  4. A-GPS学习笔记(二) 之SUPL
  5. 利用Python生成钢琴音色
  6. 使用SmartUpload上传文件报错
  7. 如何安装WinDriver—linux 系统下和Windows系统下———官网中文教程
  8. 编译原理 实验2《预测分析法设计与实现》
  9. 钢绞线的弹性模量的计算方法_钢绞线弹性模量的理论计算及其影响因素分析
  10. C# 实现多种语言切换,通过VS实现