水指什么生肖| 甘油三酯高应该注意什么| 36是什么罩杯| prn是什么医嘱| 牙周炎吃什么消炎药| 喝什么去湿气最好最快| 7.20是什么星座| 保险属于什么行业| 夜间睡觉口干口苦是什么原因| 什么样的云朵| 吃什么补充胶原蛋白| 过期的维生素e有什么用途| 有时候会感到莫名的难过是什么歌| 眼镜框什么材质的好| 草莓的花是什么颜色| daily什么意思| 久负盛名的负是什么意思| 女人人中深代表什么| 脚后跟痛是什么问题| 吃什么可以自然掉体毛| iphone5什么时候出的| nnd什么意思| 本意是什么意思| 压力过大会有什么症状| 清新的什么填空| 什么是兼职| 舌头凉凉的是什么原因| 7月7号是什么星座| 马桶对着卫生间门有什么不好| 麻辣拌里面都有什么菜| 打灰是什么意思| 大象是什么意思| 肠道感染是什么原因引起的| 北面属于什么档次| 媳妇是什么意思| 梦见走错路是什么意思| iris是什么意思啊| 青少年长白头发是什么原因| 中药一般什么时候喝最好| 口腔上火了吃什么降火最快| 霉菌是什么引起的| 为什么卧室要用木地板| 前什么后什么| 小孩一到晚上就发烧是什么原因| 什么胆什么心| 女人梦见桃子预示什么| 立flag什么意思| 胆管炎吃什么药| 大便里急后重什么意思| 吃什么减肥最快| 痉挛是什么意思啊| 红茶色是什么颜色| 哏是什么意思| 鳄龟吃什么食物| 什么补钙| 哈哈是什么意思| 梦见赢钱了是什么预兆| 神机妙算是什么意思| 偶发室性期前收缩是什么意思| 车前草能治什么病| 人大是干什么的| 废品收入计入什么科目| 早上起来流鼻血是什么原因| 胃溃疡适合吃什么食物| 髂静脉在什么位置| 月子中心是做什么的| 什么而不舍| 什么人不能吃狗肉| 梦见男朋友出轨了是什么意思| 苏铁属于什么植物| 假唱是什么意思| 内心os是什么意思| 夹页念什么| 掉头发是身体缺少什么| 背包客是什么意思| 白天看见蛇有什么预兆| 防水逆什么意思| 尿酸高不能吃什么食物| 奶奶的奶奶叫什么| 丁毒豆泡酒能治什么病| 腰间盘挂什么科| 空腹血糖受损是什么意思| cho是什么| 魁罡贵人是什么意思| 主动脉夹层是什么病| 属相是什么意思| 四个龙念什么| 静待花开的前一句是什么| 一什么石头| 甲减对胎儿有什么影响| gift是什么意思| 非那雄胺片是什么药| 长期喝饮料对身体有什么危害| 低烧吃什么| 勃勃生机是什么意思| 尿频是什么意思| 吴用属什么生肖| 韩红是什么军衔| 虾仁炒什么菜好吃| 该是什么意思| 脸上长粉刺是什么原因| 感冒头疼是什么原因| 悬案是什么意思| 菊花有什么作用| 吃阿胶对女人有什么好处| 属猴是什么命| 245阳性是什么意思| sys是什么意思| 宝宝风寒感冒吃什么药最好| 关爱是什么意思| proof是什么意思| gln是什么氨基酸| 检查神经做什么检查| 心病科主要看什么病| 万艾可是什么药| 佐匹克隆片是什么药| 正常白带是什么味道| 收缩压是什么意思| 六七年属什么生肖| 经常射精有什么伤害| otc是什么意思| 女性看乳房应该挂什么科| 站姐是什么职业| 八个月宝宝可以吃什么水果| 战国时期是什么时候| iv是什么意思| 洗衣机什么牌子的好| hvp是什么病毒| 吃什么鱼最健康| 文雅什么意思| 先天愚型是什么病| 梦见打人是什么意思| 歼灭是什么意思| 为什么会突然吐血| 女人排卵期是什么时候| 脑ct都能查出什么病| 济南是什么城| 印堂发亮预兆着什么| 什么开什么笑| 葛根粉是什么| 玩游戏有什么好处| 艾叶泡脚有什么好处| poscer是什么牌子手表| 什么星座颜值最高| 什么药和酒一起吃必死| 铁蛋白低是什么意思| 什么原因导致有幽门杆菌| 西梅是什么水果| 毛峰是什么茶| 空调感冒吃什么药| 胃阳不足吃什么中成药| 缺陷的陷是什么意思| 化验血能查出什么项目| moda是什么牌子| 奶茶和奶绿有什么区别| 霸王别姬是什么意思| 鸡枞菌长在什么地方| 霉菌阴性是什么意思| 寒热重症是什么病| 2016年属什么| 纳豆是什么味道| 狮子座的幸运色是什么| 血糖高的人吃什么| 总胆红素是什么意思| 限用日期是什么意思| 血小板为什么会减少| 哺乳期能吃什么水果| 非礼什么意思| 单身为什么中指戴戒指| 心脏供血不足是什么原因引起的| 心率过快吃什么药最好| 无花果不能和什么一起吃| 多汗是什么原因| tc什么意思| 羽毛球拍磅数是什么意思| 兰州有什么特产| 小case什么意思| 茭白是什么植物| 基围虾不能和什么一起吃| 住院号是什么| 尿道炎什么症状| 曦字五行属什么| 偏光是什么意思| 晚上吃什么水果对身体好| 桎梏是什么意思| 左腰疼是什么原因| 宫颈肥大有什么症状| vmax什么意思| 石蜡是什么| 吃什么降钾最快| 什么是奇门遁甲| 胆汁反流用什么药| 情有独钟是什么意思| 假借是什么意思| 例假期间吃什么食物好| 名士手表属于什么档次| 眼睛充血是什么原因| 放下是什么意思| bb霜和cc霜有什么区别| 助产是干什么的| 孙悟空姓什么| 吃什么补雌激素| 坠积效应是什么意思| 蓝莓什么味道| 落叶像什么| 紫色加绿色是什么颜色| 得了阴虱用什么药能除根| 你想什么| 小螃蟹吃什么| 甲状腺腺体回声欠均匀是什么意思| 看腰挂什么科| 香蕉什么时候吃最好| anca医学上是什么意思| 孩子鼻子流鼻血是什么原因| 长卿是什么意思| 什么值得买官网| 肛门胀痛什么原因| txt什么意思| 琼林是什么意思| 头发少是什么原因| chemical是什么意思| 什么是远视眼| 肚脐周围痛是什么原因| 宫颈糜烂吃什么药| 宫颈炎和阴道炎有什么区别| 什么含胶原蛋白最多| ph值小于7是什么意思| 腐女是什么| 狗舔人是什么意思| 太平猴魁是什么茶| 练八段锦有什么好处| 什么酒最贵| 腰部酸胀是什么原因| 什么是福报| 卤水点豆腐的卤水是什么| 不撞南墙不回头是什么意思| 砷是什么东西| 脂肪肝是什么意思啊| 缠头是什么意思| bs是什么意思| 降火吃什么药| mens是什么意思| 烂尾是什么意思| ptsd是什么意思| 血小板低什么原因| 主动脉夹层a型是什么病| 内角是什么意思| 千什么一发| 胆红素高吃什么食物能降得快| 七八年属什么生肖| 智齿一般长在什么位置| 什么四海| 右脚后跟疼是什么原因| 喝酒不能吃什么东西| 八月份是什么季节| 暂告一段落是什么意思| 碱中毒是什么引起的| rr是什么牌子| 巨蟹女喜欢什么样的男生| 子宫病变有什么症状| 吃什么可以治痔疮| 血小板低吃什么好补| 什么是活检检查| 白蜡烛代表什么| 百度

新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 嵌入式系统中TCP/IP协议的精简与实现

嫦娥五号年底升空最新消息 航空概念股有哪些

——
作者: 时间:2025-08-04 来源:微计算机信息 收藏
百度 梦想的伟大之处不在于它注定被实现,而在于通往梦想的途中寻找到属于自己的存在价值。

摘要: 通过对的分析,结合的特点,挑选出一套精简、实用的子集,并详细介绍各协议层的实现过程。为嵌入式系统的开发提供一个较为简单且可行的思路。

关键词, UDP, ARP

1、引言

    嵌入式系统就是在嵌入式设备上实现了互联功能的系统,一般要求嵌入式设备在软件上支持TCP/IP协议栈,实现有关的协议。如何实现TCP/IP协议是嵌入式网络系统的关键技术之一,在中应用TCP/IP协议的关键是,如何设计出精简、高效的TCP/IP协议子集,以此来减少对系统资源的占用。

    目前使用广泛的TCP/IP协议栈有LWIP(Light Weight)、uIP、Linux IP等,这些协议栈具有一定的通用性,包含的协议内容比较全,同时也比较复杂。具体在移植到应用系统的时候要考虑的问题较多,各个库文件和全局变量相互交叉引用,若要针对特定系统进行精简,则牵一发而动全身,尤其是存储器的管理及上层协议与底层网络驱动的接口是两个最大的移植难题。

    为了能对TCP/IP协议有较深的了解,又利于后期进行深入研究,我们在实现一具体的Internet网络报警系统时,进行自主的嵌入式TCP/IP协议开发。下文所介绍的TCP/IP协议系统由于精简而利于实现,且无需进行内存管理,适合传送数据量不大的嵌入式系统。在实现时,只要根据相应的数据帧格式,在各层完成相应的功能即可。非常适合研究学习之用,为嵌入式网络系统的开发提供一个较为可行且简单的思路。

2、协议的分析与选择

    众所周知,TCP/IP是一个协议族,是几百种网络协议的集合。通用计算机系统有足够的资源支持协议在内核实现,但是嵌入式系统则不同,因为其CPU处理能力和系统存储能力都受到成本限制,充分利用资源、提高系统性价比是开发嵌入式应用的根本特点。所以要对TCP/IP协议进行精简以适应嵌入式系统。

    下面我们以实际的Internet网络报警系统为例,设计一个较为精简的TCP/IP协议子系统。此系统采用32位ARM结构的三星S3C440BX处理器,加SMSC公司的控制芯片LAN91C113,以及另外一些外围芯片组成。此系统要求经Internet传送一些现场采集的报警数据到远程站点,要求实时性好、传输速度快,但每次传输的数据量很少,只是简单的报警信息。根据这些要求,再经详细分析TCP/IP各协议层实现的功能,精简出的协议子集如图1:

层次

需要实现的协议

应用层

传输层

UDP

网络层

IP、ICMP中的Ping响应协议

链路层

ARP应答协议

图1 精简的TCP/IP协议子集

    首先在链路层上,由于采用以太网的接入方式,系统必须要实现IEEE802.3所规定的CDMA/CD协议。CDMA/CD协议不需用户实现,此协议只要采用通用的以太网接口芯片就可支持。其次,为了保证系统在以太网中的,系统还需实现ARP应答协议,该协议用于将IP地址映射成以太网MAC地址。ARP的执行依靠维持一张表来完成IP地址和MAC的地址的映射。

    在网络层,由于系统要求能够在Internet进行通信,因此系统要实现IP协议。IP层的代码有两个功能:验证到来的IP报文报头的正确性,并且对TCP和ICMP报文实行分流。因为不考虑IP的分片和重组,所以 IP层的代码非常的精简。为了能够测试系统与网络的连接,系统需要实现ICMP协议中的Ping应答协议,Ping应答协议主要是检查网络是否连通

    在传输层, TCP为两台主机提供面向连接的、可靠的、无重复的双向数据流传输服务,TCP协议设计了严格的3次建立连接握手过程、4次关闭连接握手过程,这些过程的实现对系统资源的耗费非常大。而UDP的实现比较简单,它在某些嵌入式Internet的应用场合可以很好地应用。考虑到系统的简化及速度的要求,采用了UDP协议,为了确保UDP数据的到达,在应用程序中采用了重复发送、回复确认的方式来保证数据的正确性。

    由于本嵌入式系统无HTTP、FTP等应用,所以应用层中的协议无需实现。

3、协议的实现

    本系统由于协议比较精简,只保留了必须使用的一些协议,所以实现过程相对简单。实现过程中的一个总目标是系统开销要少,每一层之间要相互独立,内存操作简单。为了实现每一层的独立,实现上下层之间的数据透明传输。每层之间应通过一系列的函数进行数据传递,同时为了减少由于数据拷贝引入的系统开销,系统应通过指针操作,而不是数据拷贝方式,将缓冲区中的数据沿协议栈向上传递。

    由于TCP/IP的各层协议的各种数据格式,在各种资料中都有详细说明,这里就不再一一介绍。只详细介绍总的结构、各层的功能及实现过程,为了便于调试,系统在实现时肯定是从底层开始,一层一层往上实现。

1) 首先公共数据结构的定义:如MAC地址格式、IP地址格式、系统的地址配置、缓冲区格式及大小。

    其中MAC、IP地址格式都是固定的,系统的配置用于确定系统的IP地址及端口以及MAC地址值。在本系统中由于传送的数据有限,只定义了4个用于传送和接收数据的缓冲区每个长度为150字节。

2)网络驱动接口:由于网络驱动也是我们自己编制的,所以与上层结合起来很顺利,接收时采用中断机制,当收到网络中断就读取数据,根据包的种类分别传给ARP或IP协议,由每一层自行处理数据。发送时采用查询方式,应用层准备好数据,一层层封装并向下传递,最后经由网络驱动程序发送。

3) 链路层ARP协议的实现:

    首先定义ARP数据帧头结构及ARP高速缓冲表,数据帧必须根据标准定义,高速缓冲表至少要含有IP地址及相对应的MAC地址两项。由于嵌入式系统所连接的对象数目较少且都比较固定,所以就去掉了缓冲表的定时刷新程序,这样可以大大减少系统的刷新开销。

    这一部分的主要工作是:

a、根据上层数据包中的IP地址,在高速缓冲表中查出对应的MAC地址并填入包中相应位置。若表中没有相应MAC地址,则按照格式组装一个ARP请求包并发送,以得到对方MAC地址。

b、若收到ARP应答包,则更新ARP缓存表。

主要函数有:

struct pbuf * arp_packet(struct arpdata *q)// 把要发送的ARP数据打包成网络格式字节流;

struct mac *arp_lookup (struct ip *p) // 根据IP地址在ARP缓存表中查找MAC地址,若找不到则自动向网络广播ARP请求;

void arp_input(struct pbuf *p)// 从驱动程序传入ARP帧数据,如果是ARP请求则发送一个ARP应答包,如果是ARP应答则更新ARP缓存表;

4)网络层IP协议及Ping应答的实现:

    首先定义数据结构IP及ICMP数据帧格式,这两者都要根据标准来定义。这一部分的主要工作有:

a、对上一层传下来的数据包,加上IP首部和IP校验和,发往下一层。以及对下一层传上来的数据包,进行校验和检查,若正确去掉IP首部,送往上一层。

b、为了便于测试要响应主机的PING程序,即如收到ICMP的回显请求包,则按照格式组装一个ICMP的回显应答包并发送。

主要函数有:

int ip_input(struct pbuf* p);//输入下一层的数据包,去掉IP首部传给上一层;

int ip_send_data(struct pbuf *p,int len,int type,struct ip dst_ip);//将上一层的数据加上IP首部,并向下一层发送;

void ip_packet(struct pbuf *p,struct IP_data *q,int len);//IP首部和数据打包;

U16 ip_chksum(U8 *p,int len);//IP检验和计算;

void icmp_input(struct pbuf *p) 如果ICMP的回显请求,则发一个应答包;

5)传输层UDP协议的实现:

    根据标准定义UDP数据帧格式。这一部分的主要工作有:对应用层传下来的数据包,加上UDP首部和UDP校验和,发往下一层。以及对下一层传上来的数据包,进行校验和检查,若正确去掉UDP首部,提出数据送给应用层。需注意的是,要产生一个伪首部用于UDP数据检验和计算。

主要函数有:

void udp_input(struct pbuf *p);//从下一层输入UDP数据

void udp_output(U8 *str,struct ip dst_ip,U16 dst_port);//向下一层发送UDP数据

void makeup_pheader(struct ip *p,U16 len ,U8 *q);//产生伪首部用于UDP检验和计算

U16 udp_chksum(U8 *p,int len,U8 *p1,int len1);//计算UDP检验和

6)执行过程:

    当本地系统有数据要发送时,首先在传输层将数据加上UDP首部,再到网络层加IP首部,然后到链路层从ARP表中查询相应的MAC地址,填入相应位置,并发给网络驱动程序传到以太网上。

    图2是用SPYNET软件截取的本系统启动后第一次发送一串字符的整个网络协议应答过程,由于是第一次发送, ARP表为空。所以当发送UDP数据时找不到目的IP地址对应的MAC地址,系统先发ARP请求,等对方回一个ARP应答,得到对方MAC地址,然后再发UDP数据包。

图2 一个实际UDP数据包发送全过程

4、结束语

       由于嵌入式系统发展及互联网络的普及、远程控制和信息家电的兴起,嵌入式系统与互联网络的结合逐渐成为一种新的技术发展方向,嵌入式TCP/IP协议的选择与实现是这一技术必须要面对的。很多时候在涉及TCP/IP协议时,都容易被其复杂的体系结构所迷惑,而不敢轻易动手,本文提出的这种嵌入式TCP/IP协议的选择思路及给出的一套精简TCP/IP协议子集的实现过程,对于这一方面的研究很具有参考价值。

参 考 文 献

1、李润知,岳俭,李阳阳(2003).基于Web的嵌入式网络管理系统.《计算机应用》.23(6):95-97.

2、许海燕,付炎主编(2002).嵌入式系统技术与应用.北京:机械工业出版社。

3 、(美)W.Richard Stevens著,范建华等译(2000).TCP/IP详解 卷1:协议.机械工业出版社。

4、李明,康静秋,贾智平(2002).嵌入式TCP/IP协议栈的研究与开发《计算机工程与应用》.2002(16):118-121.

5、洪锡军,汪德才(2000).基于Internet的多功能远程监控报警系统.《上海交通大学学报》.34(10):1370-1371.

tcp/ip相关文章:tcp/ip是什么




评论


相关推荐

技术专区

关闭
丁目是什么意思 间谍是什么意思 蓝莓是什么颜色 抽动症是什么引起的 roi是什么
梦见杀蛇是什么意思 高级护理是干什么的 开什么店好 心肌酶高是什么原因 bkg是什么意思
阴道瘙痒吃什么药 一什么枝条 阴道干涩是什么原因 醉清风是什么意思 糖类抗原125高是什么意思
什么是忧郁症 faye是什么意思 梦见别人买房子是什么预兆 天门冬氨酸氨基转移酶是什么 口苦口干是什么原因造成的
有且仅有什么意思hcv9jop6ns7r.cn 得寸进尺是什么生肖hcv8jop9ns7r.cn 翡翠和玉的区别是什么hcv9jop3ns4r.cn 南乳和腐乳有什么区别hcv9jop1ns8r.cn 冰箱底部漏水是什么原因hcv8jop1ns6r.cn
始于初见止于终老是什么意思hcv8jop4ns0r.cn 手胀是什么原因hcv7jop5ns0r.cn 雅诗兰黛是什么档次hcv9jop4ns1r.cn 各就各位是什么意思hcv7jop6ns2r.cn 一直发烧不退是什么原因hcv9jop3ns6r.cn
黑便是什么原因引起的hcv9jop2ns0r.cn 止咳平喘什么药最有效hcv8jop5ns4r.cn 爱的反义词是什么hcv7jop6ns9r.cn 糖尿病人早餐吃什么好520myf.com 花生不能和什么食物一起吃yanzhenzixun.com
奇异果是什么hcv9jop2ns4r.cn 3.25是什么星座hcv9jop1ns4r.cn 驴血是什么颜色96micro.com 河南古代叫什么hcv9jop6ns8r.cn 1.4是什么星座hcv8jop8ns4r.cn
百度