Mac帧封装模拟-FCS冗余码计算
来源:互联网 发布:淘宝食品流通许可证办理 编辑:程序博客网 时间:2024/05/17 20:25
一直没有时间更新博客,最近课的确重,昨天计算机网络的一个作业(Mac帧的封装)花了我一个晚上的时间,写代码写到了凌晨1点,一个Bug还是今天下午修好的。通过这次作业总结出一个道理:没有好好设计直接编码会让自己几近崩溃,代码越写越感觉混乱,越写越想全删了重来。可是今天就得交,所以硬着头皮一个个Bug修。出于想写写博客但是找不到内容的时候就把这次作业贴出来了 =.= !
我封装模拟的Mac帧格式是这样的:
同步码帧定界目的地址源地址类型IP数据包冗余码synnc_code_(7B)soh_(1B)dst_(6B)src_(6B)type_(2B)ip_packet_(46~1500B)fcs_(4B)101010...1010101011(1B)...(6B)...(6B)IP:0x0800Novell IPX: 0x8137(2B)......
我的实现是用Qt做了个界面,核心用到了Qt::QBitArray。
FCS冗余码的计算方法(MacFrame类中有CRC-16生成多项式、CRC-CCITT生成多项式、CRC-32生成多项式的FCS计算实现):
1: /*其中的enum值、调用的函数在MacFrame这个类中,可查看源代码*/
2: QBitArray MacFrame::compute_fcs() const
3: {
4: int n = MacFrame::S_DIVISOR.count();
5: QBitArray remainder(n);
6: QBitArray data = dst_;
7: //计算冗余码的时候把处前导码(同步码和帧定界)除外的其它数据都检验,故合并操作:
8: MacFrame::mergeQBitArray(data, src_); //把两个 QBitArray 合并
9: MacFrame::mergeQBitArray(data, type_);
10: MacFrame::mergeQBitArray(data, ip_packet_);
11: // n 为除数的位数,需要在检验数据 data 的后面补 n-1 位0
12: data.resize(data.size() + n - 1);
13: int size = data.size();
14:
15: for(int i = 0; i < n; i++)
16: {
17: remainder[i] = data[i]; //初始化余数
18: }
19: // 循环做模2除法
20: for(int i = n; i < size; )
21: {
22: while(remainder[0] == false)
23: {
24: for(int j = 0; j < n - 1; j++)
25: {
26: remainder[j] = remainder[j+1];
27: }
28: if(i == size)
29: {
30: goto label;
31: }
32: remainder[n-1] = data[i];
33: i++;
34: }
35: remainder ^= MacFrame::S_DIVISOR;
36: }
37: label:
38: //获取 FCS 冗余码(一共4B)
39: size = FCS_SIZE * BYTE_SIZE;
40: QBitArray fcs(size);
41: for(size--, n--; n > 0; n--, size--)
42: {
43: fcs[size] = remainder[n];
44: }
45: return fcs;
46: }
文件写入:
aaaa aaaa aaaa aa:同步码
ab:帧定界
d81d f8a3 ac34:目的地址
711f 3faf e92d:源地址
0800 : IP数据报格式
4865…2e2e:IP数据包内容
0000 b834:冗余码
软件的界面形式:
@Ggicci 本文属于个人学习笔记,如有错误,希望您能指正!转载请注明出处,谢谢 :) [CSDN博客]
- Mac帧封装模拟-FCS冗余码计算
- 循环冗余检验(CRC)求帧检验序列(FCS)
- FZU 1078 计算循环冗余码(基础题+模拟)
- 计算循环冗余码
- 循环冗余码校验码计算
- fjnu 1240 计算循环冗余码
- Problem 1078 计算循环冗余码
- 循环冗余计算的效验码
- 循环冗余码--初识与计算
- FZU 1078 计算循环冗余码
- fcs
- fcs
- C#学习之帧校验序列码FCS
- FMS(FCS)视频录制带宽计算
- 计算循环冗余校验码计算
- 如何计算CRC校验码(循环冗余检验码)
- 循环冗余校验码计算CRC
- CRC循环冗余校验计算
- 事件驱动(案例)
- 处理jsp页面显示中文乱码
- MySql字符串编码问题
- 利用js的dom树做的小实例
- 11.13js高级
- Mac帧封装模拟-FCS冗余码计算
- 黑马程序员之C#学习笔记: 使用Stream.Write方法向流中写字节数组
- DOM
- 超级牛人在华为工作十年的感悟
- 用DOM实现js涂层的创建
- 运动估计算法
- Havel-Hakimi定理(判断一个序列是否可图)
- 变量控制器_2及缓存
- 概率随机问题