如何从链路层收到的数据报中访问IP层和TCP层头信息?
来源:互联网 发布:软件开发前端 编辑:程序博客网 时间:2024/04/30 21:08
从网卡开始收数据包开始跟踪一个数据包的接受过程,到ip_rcp()这个函数的时候,他的第一句话是中第一行struct iphdr *iph=skb->nh.iph
可是我看的源码中并没有给skb->nh.iph赋值,有的只是赋了skb->dev之类的,所以这里这个skb->nh.iph是不能用的,我觉得。
不知道他是在那给赋值的,高手看一下:)
2.6.9 dev.c
netif_receive_skb()
skb->h.raw = skb->nh.raw = skb->data;
=========================================
自己的评论:
网卡接收到数据后,在接收函数中分配一个skb的空间,把数据从网卡芯片上的buffer拷贝到skb->data为起始地址的内存中,此时skb->data中是以目的MAC地址,源MAC地址起始的MAC帧。此时skb结构中其它变量为0。但是上面的那个赋值语句将h和nh中指针的位置设置成与skb->data相同,也就是
此时(链路层)skb->data指向了MAC头,IP层头部,TCP层头部。
这就意味着这个时候如果你想访问h(tcp头)中的变量,必须这样:
struct tcphdr *temp;
temp = (struct tcphdr *)((char *)skb->data + sizeof(struct iphdr));
此时temp的指针指向了数据报中TCP头结构--struct tcphdr。
如果你想访问IP头信息,则 struct iphdr *iph = skb->nh.iph
此时iph指向了IP头结构---struct iphdr。
在eth_trans_type的开始去掉mac头后,上传到IP层,IP层负责接收的函数是
ip_rcv()。
- 如何从链路层收到的数据报中访问IP层和TCP层头信息?
- IP数据报在各层的信息格式
- 网络层-IP数据报的格式
- OSI七层和TCP/IP四层的关系
- 【计算机网络】——TCP/IP网络层,IP地址,IP协议,IP数据报的分片及组装详解
- 网络层-3、IP数据报结构和IP分片
- TCP/IP第四层--传输层TCP数据报文详解
- TCP/IP第四层--传输层TCP数据报文详解
- TCP/IP-网络访问层详解
- TCP/IP (三) ---- 网络访问层
- 【Java】业务层和数据访问层的区别
- TCP/IP协议族中各层相关协议的头和数据段信息
- TCP/IP四层模型中协议的格式
- TCP/IP四层模型中协议的格式
- Linux从用户层到内核层系列 - TCP/IP协议栈部分系列4: IP层IP封包中TTL值何时修改
- FrameCountry数据访问层架构日志信息
- OSI七层模型和TCP/IP四层模型
- TCP/IP四层模型和OSI七层模型
- 偶尔想到的
- QQ娱乐窍门
- how to use usb device in linux version 3.00.14(1)-release (i386-redhat-linux-gnu)
- 天热了,心静了,四月过去了
- 发薪水了
- 如何从链路层收到的数据报中访问IP层和TCP层头信息?
- D3D学习笔记(初始化Direct3D-1)
- linux的网络设计与实现
- 利用delphi实现MSN(一)
- 最近晚上睡不着,严重失眠,收集了些催眠的方法,希望有个好睡眠
- 入门及配置
- 开始→运行→输入的命令集锦
- 好网址
- [转贴]美丽的童话——"游戏学院"真相探访