raw socket

###1. raw socket 常用的网络编程都是在应用层的报文的收发操作,, 这些数据包都是由系统中的协议栈来处理,用户只需要填充应用层报文即可,由系统完成底层报文头的填充并发送, 在某些情况下需要执行更底层的操作,比如修改报文头、避开系统的协议栈, 这个时候就需要使用其他的方式来实现 在linux上, 支持2种raw socket AF_INET 协议族的 SOCK_RAW 类型的socket,实现了IP 层的raw socket AF_PACKET 协议族的 SOCK_RAW和 SOCK_DGRAM类型的socket, 实现了数据链路层的raw socket ###2. AF_INET raw socket AF_INET 支持 SOCK_RAW 类型的原始套接字, 支持IP协议之上的协议类型, 例如tcp, udp, icmp等等, 创建方式类似于 socket(AF_INET, SOCK_RAW, IPPROTO_TCP) 注意最后的 protocol...

struct sk_buff

###1. struct sk_buff sk_buff是Linux网络代码中最重要的结构体之一。它是Linux在其协议栈里传送的结构体,也就是所谓的“包”,在其中包含了各层协议的头部的指针,比如ethernet, ip ,tcp ,udp等等,linux中还定义了一堆sk_buff的相关操作函数 ###2. sk_buff 成员 struct sk_buff { /* These two members must be first. */ struct sk_buff *next; // 用于串联struct sk_buff, 形成双向链表 struct sk_buff *prev; // 用于串联struct sk_buff, 形成双向链表 ktime_t tstamp; // 数据到达的时间戳, 通常由...

wifi 与 以太网

###1. 局域网技术 几种局域网技术如下: 以太网(Ethernet) 令牌环网 FDDI 网 ATM 网 无线局域网(WLAN) ###2. 2种以太网标准 请先阅读 “network” 分类中的 “以太网帧格式” 这一章 在IEEE制定以太网标准之前, DEC, Intel Xeron 制定了 Ethernet I 和 Ethernet II的标准, 并且被 TCP/IP 选作局域网的标准 后续, IEEE退出了 IEEE802.3/802.2 LLC 以及 IEEE802.3/802.2 SNAP 以太网标准, 但是设备厂商为了考虑与旧设备的兼容性, 并未积极使用...

以太网帧格式

###1. 以太网 以太网是局域网技术中的一种, 几种局域网技术如下: 以太网(Ethernet) 令牌环网 FDDI 网 ATM 网 无线局域网(WLAN) 由于以太网使用普遍、发展迅速,以至于人们将”以太网”当作了”局域网”的代名词,并且以太网是当今 TCP/IP 网络协议采用的局域网技术(注意wifi将以太网帧作为其payload来传递) ###2. 以太网帧的历史 1980年 : DEC, Intel Xeron 制定了 Ethernet I 的标准 使用Xerox PARC提出的3Mbps CSMA/CD以太网标准的封装格式 1982年 : DEC, Intel Xeron 又制定了 Ethernet II 的标准 (cisco将其命名为ARPA) 相比Ethernet I,...

MAC 地址

###1. mac 地址 MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置,采用十六进制数表示,共六个字节 例如 45-67-89-ab-cd-ef ###2. mac地址的分配 mac地址的前3个字节由 IEEE分配给设备制造商,作为组织唯一标识符(OUI, Organizationally unique identifier), 后3个字节由各设备厂商自行分配, 例如 45-67-89-ab-cd-ef 则前三个字节 45-67-89 由IEEE分配, 而后3个字节 ab-cd-ef 则由设备厂商来分配 关于IEEE为厂商分配的OUI, 可以查询 IEEE分配的MAC OUI ####3. mac 地址的传送顺序 仍旧以如下的mac地址为例 45-67-89-ab-cd-ef 对应的二进制表示为 0100 0101 - 0110...