当前位置:首页 > 嵌入式 > 嵌入式教程

(1)TCB

TCP模块中有一个TCB(传输控制模块,Transmit Control Block),它用于记录TCP协议运行过程中的 变量。对于有多个连接的TCP,每个连接都有一个TCB,这里只有一个。TCB结构的定义包括这个连接使用 的源端口、目的端口、目的IP、序号、应答序号、对方窗口大小、己方窗口大小、TCP状态、TOP输入/输出队列、应用层输出队列、TCP的重传有关变量。

(2)rap状态转化(状态:能够对其产生影响的事件)

在特定的rap状态下,相应的事件触发相应的动作和相应的状态转化。状态转化如下:

(3)接收流程

TCPIn()进程是主接收流程。TCPIn进程查看TOP输入队列中是否有元素,有则提取并从队列中删除。 然后看校验和是否正确,再看端口是否正确,调用TCPPortOK函数。TCPPortOK函数,首先看是否为SYN包 ,对这种包都不加以拒绝,否则要求不在closed和listen状态,并且源目的端口和目的IP地址要正确才 接收。

接着调用TCPExpectedPacket来看收到的这个包的序号是否是自己想要的序号,复杂的TCP协议只要序号 落在窗口范围内就接收,这里为了简便只允许接收特定序号的包。如果以上的检测都通过,则说明是一 个所希望的包。用新接收的包调用TCPReceiveRenew函数来更新TCB的值,TCPReceiveRenew函数主要用来 更新应答序号、释放重发队列中被应答的元素(以后说明),以及事件处理和状态转化。在

处理中,有些状态要判断是否是对方发来的第一个包,如果是则要Initial ack,即初始化AckSequence ,对于Establish状态还要判断是否发送应答包。

接下来,如果这个包中含有数据则调用TCPOnReceive,用户在这个函数中处理接收。TCPIn函数在最后 无论如何要释放这个包。

(4)发送流程

TCPOut是发送主进程。首先它检测是否有TOP包要重发(以后说明),然后要求rap不处于closed, listen,synrecvd,synsent状态,这些状态不能发送数据。接着看重传队列是否很满,再看应用层输出 队列中是否有元素,有则用TCPSendPacket发送此包。

TCPSendPacket函数负责发送一个TOP包。它首先判断page是否合法,因为很多地方使用TCPSendPacket (TCPAllocateWithoutData(),TCP_ACK);的形式,所以可能TCPAllocateWithoutData没能分配到内存 ;page非法则退出,这里的非法退出可能导致协议失败,但是在内存够用的情况下不会发生。然后将包 写入重传队列,填写TCP头;接着更新Sequence,填写IP头的目的IP,再写入TCP输出队列。

(5)定时重发

符合条件if(DataSize!=0|| (TCPFlag& (TOP_SYN丨TOP_FIN))!=0)的TCP需要重发。重发思路 如下:

将所有发送的数据包都写入重发队列QueueRetransmit,其中包括需要重发的和不需要重发的TCP包,并 将TCP包的序号写入SequenceOfRetransmit,将是否需要重发标志写入FlagOfRetransmit。如图1所示, 图中第二个序号为2100、3003的包是不需要重发的。


 图1 定时重传队列

(6)窗口大小选择

本地窗口固定为TCP_SOURCE_WINDOWS,这是为了避免TCP复杂的窗口算法。这里选择窗口大小一般比较 小。TCP只接收一个包,给予应答后才能接收另一个包,而一般的TCP都是一次发送多个的,如果对方发 来多个,这里只好抛弃,最好是对方不会一次发送多个。如果将窗口大小设得很小,则对方认为内存小 ,只连续发一个或很少。

(7)如果给对方的应答包丢失

比如发一个应答,希望对方发来序号为1000的包,但是这个包丢失,对方将不断地重发上一个包(例 如序号为900的包),则不断抛弃这个包(只接收一个指定序号为1000的包),协议出错。

(8)应用层分包

应用层定义的包和接收情况如图2所示


 图2 应用层定义的包和接收

阴影部分表示新接收到的数据,即buff~buff+size内存区的内容。它是第1个包的末尾和第2个包的开 始。这就是说一次接收的不一定是一个完整的包,但是有时需要接收到一个完整的包时才能处理这个包 。这就是应用层分包问题,做法如下。

从包的type字段可以知道这个类型的包大小为PacketTypeToSize(type),所以应该接

收PacketTypeToSize(type)以后再处理这个包。接收完PacketTypeToSize(type)个字节以后,下一 个一定是下一个包的type字段,然后又可以从PacketTypeToSize(typo)得到需要接收的字节数。

欢迎转载,信息来源维库电子市场网()



ks99

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭