木草山人声明:

本文非教学资料,不涉及理论。文章只是个人的一些笔记,其中的对与错,我不清楚,因为都是从书上、资料中学到的。虽然做过实践测试,但不保证100%正确。能力有限,错误难免,欢迎指正。

以太网MAC帧有两种标准,一种是IEEE的802.3标准,另外一种是以太网V2标准(注:来自《计算机网络》)。后者用得比较多。

不过,国外的书中找不到MAC帧这种说法,只说“以太网封装格式”。下面这张图片就是从《TCP/IP详解》中截图出来的。图片中的数字表示字节。一个IP数据包范围是46字节~1500字节,这是有根据的。

可以看到,IP包与ARP包是独立的,或者说它们下面的就是以太帧了。传输层(或以上)的各种数据包(报文)就是填充到上面那个图中的第2个框图的“IP数据报”的。

在Linux中,以太网帧头部的结构体如下:

/* 10Mb/s ethernet header */
struct ether_header
{
  u_int8_t  ether_dhost[ETH_ALEN]; /* destination eth addr */
  u_int8_t  ether_shost[ETH_ALEN]; /* source ether addr */
  u_int16_t ether_type;          /* packet type ID field */
} __attribute__ ((__packed__));

其中的ETH_ALEN为6,因为地址为6个字节,共48位——这个地址就是常说的物理地址,或MAC地址。它的第3个成员ether_type是以太帧类型,有如下这些:

/* Ethernet protocol ID's */
#define ETHERTYPE_PUP  0x0200          /* Xerox PUP */
#define ETHERTYPE_SPRITE 0x0500  /* Sprite */
#define ETHERTYPE_IP  0x0800  /* IP */
#define ETHERTYPE_ARP  0x0806  /* Address resolution */
#define ETHERTYPE_REVARP 0x8035  /* Reverse ARP */
#define ETHERTYPE_AT  0x809B  /* AppleTalk protocol */
#define ETHERTYPE_AARP  0x80F3  /* AppleTalk ARP */
#define ETHERTYPE_VLAN  0x8100  /* IEEE 802.1Q VLAN tagging */
#define ETHERTYPE_IPX  0x8137  /* IPX */
#define ETHERTYPE_IPV6  0x86dd  /* IP protocol version 6 */
#define ETHERTYPE_LOOPBACK 0x9000  /* used to test interfaces */

(注:上面2段代码片段来自<net/ethernet.h>)

加粗那三个对应着图上的那三个类型。

其实,对于打豆豆的人员来说,很多硬件相关、底层的东西我们是可以不去关注的。比如,上面的图,就是我们能看的到的,但那些数据包到了物理层,会额外加上8个字节,它是由硬件生成的,不用我们管。——一听到硬件实现、透明这些词,我们很兴奋!因为这些东西不用我们管,多好!

[Linux网络编程]以太网封装格式及相关结构体相关推荐

  1. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

  2. linux网络编程之通信协议格式

    好文参考:<网路传输的三张表:MAC地址表,ARP缓存表和路由表>http://www.cnblogs.com/clovn/p/4911212.html (1)数据包封装 传输层及其一下的 ...

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

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

  4. Linux网络编程——黑马程序员笔记

    01P-复习-Linux网络编程 02P-信号量生产者复习 03P-协议 协议: 一组规则. 04P-7层模型和4层模型及代表协议 分层模型结构: OSI七层模型: 物.数.网.传.会.表.应TCP/ ...

  5. linux网络编程(一)网络基础传输知识

    linux网络编程(一)网络传输基础知识 一.什么是协议? 二.使用步骤 典型协议 2.网络应用程序设计模式 C/S模式 B/S模式 优缺点 3.分层模型 4.TCP/IP四层模型 通信过程 5.协议 ...

  6. Linux网络编程——千峰物联网笔记

    B站视频:千峰物联网学科linux网络编程 网址:https://www.bilibili.com/video/BV1RJ411B761?p=1 目录 第一章:计算机网络概述 1.1计算机网络发展简史 ...

  7. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  8. linux网络编程 ppt,LINUX网络编程.ppt

    <LINUX网络编程.ppt>由会员分享,可在线阅读,更多相关<LINUX网络编程.ppt(47页珍藏版)>请在人人文库网上搜索. 1.LINUX网络编程,行业事业部 黄文举 ...

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

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

最新文章

  1. 开源应用架构之​Selenium WebDriver讲解
  2. mysql 田_Mysql知识总结
  3. Quartz-Trigger详解
  4. python函数def中import_在Python中使用def函数时出现名称错误
  5. 分类评分函数 score function
  6. 为什么要在沙河中设置小堤坝?
  7. 2019年技术盘点微服务篇(一) | 程序员硬核评测
  8. 寄生虫php版,-PHP版SEO最新教材版排名DeDeCms寄生虫V90繁殖
  9. 搭建Flink集群环境
  10. python读文件指定行的数据
  11. python3数据库框架_Python3 MySQL 数据库连接:安装pymysql(mysql数据库驱动), sqlalchemy(ORM框架)。...
  12. ansys与solidworks关联失败,将SolidWorks模型导入ansys划分网格总是提示错误
  13. fileupload控件的属性_FileUpload控件的配置 .
  14. ShadowGun 暗影之枪 项目源码,手机优化示例关卡
  15. bootstrap菜单html,Bootstrap实现下拉菜单效果
  16. 卡方检验四格表怎么做_运用SPSS进行医学诊断数据的Kappa一致性检验 ——【杏花开医学统计】...
  17. linux上传下载覆盖文件的命令
  18. mysql 无法创建sock,mysql.sock无法打开的问题
  19. 书单丨压箱底儿的10本传世计算机经典著作
  20. 网络能ping通,浏览器无法上网

热门文章

  1. 一个三十岁男人的婚姻思考
  2. C11全系产品涨价后 零跑汽车宣布T03全系车型调价
  3. 中兴通讯午后复牌:A股涨停 港股盘中涨逾53%
  4. 苏宁易购回应破产传闻:系谣言 已报案
  5. 蓝湖完成 10 亿元 C+ 轮融资,发布一站式产品设计协作工具
  6. 特斯拉全自动驾驶订阅包来了:199美元包月 老用户99美元
  7. 抖音电商发布创作者管理总则 近八万名带货达人因违规被罚
  8. “光棍节”变“购物节”的第12年:4982亿+2715亿!
  9. 高德再回应导航错误致景区严重拥堵 这次复盘了事件原因
  10. 百度网盘空间调整:这类用户2TB变100GB!