[Linux网络编程]以太网封装格式及相关结构体
木草山人声明:
本文非教学资料,不涉及理论。文章只是个人的一些笔记,其中的对与错,我不清楚,因为都是从书上、资料中学到的。虽然做过实践测试,但不保证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网络编程]以太网封装格式及相关结构体相关推荐
- Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned short sa_ ...
- linux网络编程之通信协议格式
好文参考:<网路传输的三张表:MAC地址表,ARP缓存表和路由表>http://www.cnblogs.com/clovn/p/4911212.html (1)数据包封装 传输层及其一下的 ...
- Linux网络编程基础1(网络应用程序设计模式,分层模型,协议格式)
Linux网络编程基础(网络应用程序设计模式,socket编程,inet_pton,inet_ntop,服务端创建连接的过程,客户端创建连接的过程,socket函数封装) 1. 网络应用程序设计模式 ...
- Linux网络编程——黑马程序员笔记
01P-复习-Linux网络编程 02P-信号量生产者复习 03P-协议 协议: 一组规则. 04P-7层模型和4层模型及代表协议 分层模型结构: OSI七层模型: 物.数.网.传.会.表.应TCP/ ...
- linux网络编程(一)网络基础传输知识
linux网络编程(一)网络传输基础知识 一.什么是协议? 二.使用步骤 典型协议 2.网络应用程序设计模式 C/S模式 B/S模式 优缺点 3.分层模型 4.TCP/IP四层模型 通信过程 5.协议 ...
- Linux网络编程——千峰物联网笔记
B站视频:千峰物联网学科linux网络编程 网址:https://www.bilibili.com/video/BV1RJ411B761?p=1 目录 第一章:计算机网络概述 1.1计算机网络发展简史 ...
- Linux网络编程基础知识
Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...
- linux网络编程 ppt,LINUX网络编程.ppt
<LINUX网络编程.ppt>由会员分享,可在线阅读,更多相关<LINUX网络编程.ppt(47页珍藏版)>请在人人文库网上搜索. 1.LINUX网络编程,行业事业部 黄文举 ...
- 【Linux网络编程】无连接和面向连接协议
00. 目录 文章目录 00. 目录 01. 概述 02. 附录 01. 概述 网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议 ...
最新文章
- 开源应用架构之​Selenium WebDriver讲解
- mysql 田_Mysql知识总结
- Quartz-Trigger详解
- python函数def中import_在Python中使用def函数时出现名称错误
- 分类评分函数 score function
- 为什么要在沙河中设置小堤坝?
- 2019年技术盘点微服务篇(一) | 程序员硬核评测
- 寄生虫php版,-PHP版SEO最新教材版排名DeDeCms寄生虫V90繁殖
- 搭建Flink集群环境
- python读文件指定行的数据
- python3数据库框架_Python3 MySQL 数据库连接:安装pymysql(mysql数据库驱动), sqlalchemy(ORM框架)。...
- ansys与solidworks关联失败,将SolidWorks模型导入ansys划分网格总是提示错误
- fileupload控件的属性_FileUpload控件的配置 .
- ShadowGun 暗影之枪 项目源码,手机优化示例关卡
- bootstrap菜单html,Bootstrap实现下拉菜单效果
- 卡方检验四格表怎么做_运用SPSS进行医学诊断数据的Kappa一致性检验 ——【杏花开医学统计】...
- linux上传下载覆盖文件的命令
- mysql 无法创建sock,mysql.sock无法打开的问题
- 书单丨压箱底儿的10本传世计算机经典著作
- 网络能ping通,浏览器无法上网
热门文章
- 一个三十岁男人的婚姻思考
- C11全系产品涨价后 零跑汽车宣布T03全系车型调价
- 中兴通讯午后复牌:A股涨停 港股盘中涨逾53%
- 苏宁易购回应破产传闻:系谣言 已报案
- 蓝湖完成 10 亿元 C+ 轮融资,发布一站式产品设计协作工具
- 特斯拉全自动驾驶订阅包来了:199美元包月 老用户99美元
- 抖音电商发布创作者管理总则 近八万名带货达人因违规被罚
- “光棍节”变“购物节”的第12年:4982亿+2715亿!
- 高德再回应导航错误致景区严重拥堵 这次复盘了事件原因
- 百度网盘空间调整:这类用户2TB变100GB!