多TCP连接

2024-09-08

多TCP连接(共4篇)

多TCP连接 篇1

0 引 言

在工业以太网络上,信号采集器作为数据服务器,必须可以支持多个并发的客户机,甚至在计划内用户只有单一客户时也要能响应(并发),并允许客户机高速的顺序关闭和重开连接,以对无发送的响应做出快速反应。对于这种并发的客户机访问,通常有两种方式解决:第一种是使用嵌入式操作系统,当有新的连接请求时,由操作系统动态建立一个任务来维持这个连接,即由每个任务来维持一个连接。其缺点是嵌入式操作系统对硬件有较高的要求,其内核也占用一定CPU资源,对软件要求也较高。第二种是模拟多任务系统,由系统预先分配一个大的数据区来存储每个客户机的连接信息及通信状态,通过数组或指针的方式进行索引查询。该方法软件编程结构较复杂,预设的客户端越多,数据区占用硬件资源越严重,达到连接数量后,就不能再为其他客户端提供数据了[1,2]。本文通过对TCP/IP协议和Modbus协议分析,提出对TCP/IP协议进行精简设计,实现基于TCP/Modbus协议的信号采集器与多台计算机通信,该方法对系统硬件要求较少,软件编程代码量小,通信响应的实时性更强,不限制连接数量。

1 Modbus/TCP协议介绍

Modbus应用层协议由美国Modicon公司于1979年开发,用于实现其PLC产品与上位机的通信。由于其简单易用,我国标准化委员会已将Modbus协议作为我国工业自动化的行业标准。1999年施奈德电气发布了TCP/Modbus协议,使得以太网上的Modbus设备可以通过502端口进行通信。

TCP/Modbus使用传输协议(TCP)进行Modbus应用协议的数据传输,使用封装的方法将Modbus参数和数据嵌入到TCP数据包中。TCP/IP协议和以太网的链路层校验机制可保证数据包传递的正确性,TCP/Modbus报文中不再存在CRC-16或LRC校验域,但添加一个Modbus应用帧头(MBAP),它对Modbus的参数及功能进行解释[3,4]。

一帧以太网数据包的大小是64~1 518 B,而TCP/Modbus协议所占用数据包的最大尺寸小于300 B。所以每一个客户机请求数据和数据服务器回应的数据均用一个以太网帧即可实现,而不用考虑正常TCP数据分组的拆分数据、分批传输及数据的完整性问题[5,6]。采集器和客户机的通信是通过TCP/Modbus协议在Internet网络上进行传输,整个网络通信采用面向多连接方式,系统原理如图1所示。

2 精简TCP/IP协议设计

通过对TCP/IP协议分析发现,在网络数据传输过程中,客户机向采集器所发送的以太网数据帧中包含MAC地址、IP地址、端口号、标志位、序列号等信息[7]。根据这些信息,经过计算整理后,采集器可以产生回应数据包,不需要保存各客户端的状态与连接信息,从而保证每一个数据包都能得到正确回应,这样就使采集器不再限制客户机的连接数量。这种数据的请求与回应体现在TCP 通讯中的三个过程:连接的建立、数据的传输、连接的关闭。对于回应数据包中的MAC地址、IP地址、端口号这些信息,可以在接收的数据包中得到,其他数据可通过接收到的数据计算获得,其中主要改变的数据有:标志位、序列号和确认号等。以下对客户机和采集器之间通信的三个过程中数据包的产生进行论述。

2.1 第一个过程:连接的建立

客户端连接请求:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,同步标志位被置位,初始序列号是客户端随机产生的一个值,确认号是 0。

服务器回应:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,同步标志位和确认标志位被置位,序列号是服务器随机产生的一个值,确认号是客户端的初始序列号+1。

客户端确认:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,确认标志位被置位,序列号是上一个同步请求数据包中的确认号值,确认号是服务器的初始序列号+1。连接建立完成,即“三次握手”完成。

2.2 第二个过程:数据的传输

客户端数据请求:客户端向服务器发送一个带有TCP/Modbus的数据包,该数据包中的序列号和确认号与建立连接第三步的数据包中的序列号和确认号相同。

服务器数据回应:服务器收到该数据包后,分析数据的命令信息,正确后向客户机发送一个确认数据包和回应数据包,在确认数据包中,确认标志位被置位,序列号是上一个数据包中的确认号值,而确认号为客户端发送的上一个数据包中的序列号+该数据包中所带数据的大小。在回应数据包中,确认标志位被置位,序列号和确认号与确认数据包中的序列号和确认号相同。

2.3 第三个过程:关闭连接

关闭连接过程分为服务器请求关闭和客户端请求关闭,作为信号采集服务器不必主动关闭连接。客户端关闭TCP连接请求,即客户端数据包中结束标志位被置位。服务器收到客户端发送的终止数据包后,将对客户端发送确认信息,以关闭该方向上的 TCP 连接。这时在数据包中,同步标志位和确认标志位被置位,序列号为接收数据包中的确认号值,而确认号为接收数据包中的序列号+1。

通过以上对TCP/IP协议的精简,可以通过编程来实现服务器与客户端的通信过程,且对客户机的数量没有限制。

3 信号采集器硬件组成

为了增强采集器的功能并减小硬件设计复杂程度,降低成本,CPU选用片上资源丰富的高速 SoC C8051F020 单片机。该款单片机的主要资源有:8个12位SARADC;8位ADC,可编程转换速率最大500 KSPS;两个12位DAC,可以同步输出,用于产生无抖动波形;电压基准;4 KB RAM;64 KB FLASH存储器;两个UART串口;硬件SMBus。信号采集器硬件原理框图如图2所示。

存储器选用24LC04,主要用于存放IP地址、MAC地址、采样周期、有关硬件设置信息及数据处理所设定的参数等。为扩展C8051F020的内存,采用IS62LV2568数据存储器,存储空间为256 KB;以太网控制器采用新型独立控制芯片CP2200,它符合IEEE 802.3协议,内置10 Mb/s以太网物理层器件PHY及媒介接入控制器MAC;以太网接口器件采用PRJ系列的PRJ-010型变压器[8];RS 232接口芯片选用智能的RS 232收发器SP3223;RS 485接口芯片选用SP3485;日历时钟芯片采用工业级S-3539A;信号处理电路由阻容滤波电路、精密电阻、差分运放组成,将外部输入差分信号(4~20 mA)转换成符合CPU内A/D转换器所要求的范围内。电源电路主要有降压型开关稳压器LM2576-5和AS1117/3.3组成,为整个硬件系统提供5 V和3.3 V直流电压[9]。

4 软件设计

信号采集器可通过以太网接口、RS 232接口和RS 485接口与客户机或其他智能设备相通信。当采用RS 232接口和RS 485接口连接其他智能设备时,可为其编写相应的服务和配置程序进行数据采集。模拟信号进行数字采集处理电路处理后,接入单片机内部集成的A/D转换模块进行数据采集。采集到的全部数据统一存储到预先分配好的内存中,为采集器与客户机之间通信提供源数据[10]。本文主要介绍采集器与客户机之间进行TCP/Modbus协议通信的实现过程,即对客户机所发送的以太网帧做出正确回应。软件流程图如图3所示。

根据对TCP/Modbus协议分析,采集器只需对三种以太网数据包产生回应,即可实现与客户机的通信过程:连接请求的回应;数据请求的回应;关闭连接请求的回应。现就关键代码进行分析:HandleethPCK()函数对全部以太网数据包进行处理,并对正确的数据包进行回应,此函数包含TCP协议通讯的三个过程。

5 结 语

采用精简TCP/Modbus协议的信号采集器通过20台客户机测试,每台客户机每50 ms发送一次数据请求,客户机的全部请求均能得到正确响应,没有发现数据包丢失,实现了采集器和客户机之间无差错的远程以太网通信。本文设计的信号采集器性价比高,实施成本低,该设计方法目前已成功应用于大庆某电厂的数据采集服务器中。本设计方法通过以太网通讯,传输距离远,可在Internet涉及到的任何地方实现远程监控功能;可利用现有网络设施,通用性强;可以将此设计方法应用于各种需要网络监控功能的电器设备中。

摘要:进行了基于Modbus协议和TCP/IP协议相结合的远程网络通信协议的研究。在详细分析TCP/IP协议和Modbus协议的基础上,提出对TCP/IP协议进行精简的设计方法,设计了基于TCP/Modbus协议的面向多连接信号采集器,重点分析了信号采集器和多台计算机通过Internet传输数据的方法。该设计方法能实现及时可靠的TCP/Modbus通信,此协议对系统的硬件和软件要求较低,并成功应用于工程实际,对基于TCP/Modbus协议的工业以太网络的具体应用具有一定的现实意义。

关键词:Modbus协议,TCP/IP协议,多连接,以太网数据帧

参考文献

[1]潘洪跃.基于Modbus协议通信的设计与实现[J].计量技术,2002(4):35-36.

[2]徐涛,闫科.基于Modbus协议的串行接口实现与DCS通信[J].工业控制计算机,2002,15(3):56-57.

[3]姜斌.基于Modbus/TCP工业以太网协议的温度采集网络设计[D].大连:大连海事学院,2007.

[4]蒋近,毛六平,戴瑜兴.基于Modbus和TCP/IP协议的远程网络通信[J].低压电器,2005(1):43-46.

[5]段宁华.网络基础与应用实务教程[M].北京:清华大学出版社,2006.

[6]刘衍珩,康辉,魏达,等.计算机网络[M].北京:科学出版社,2007.

[7]STEVENS R W.TCP/IPIllustrated Volume I:The Proto-cols[M].Beijing:China Machine Press,2000:24-98.

[8]童长飞.C8051F系列单片机开发与C语言编程[M].北京:北京航空航天大学出版社,2005.

[9]胡伟,季晓衡.单片机C程序设计及应用实例[M].北京:人民邮电出版社,2003.

[10]潘琢金,孙德龙,夏秀峰.C8051F单片机应用解析[M].北京:北京航空航天大学出版社,2002.

多TCP连接 篇2

网络编程中最基本的概念就是面向连接 (connection-oriented) 和无连接 (connectionless) 协议。尽管本质上来说, 两者之间的区别并不难理解, 但对那些刚刚开始进行网络编程的人来说, 却是个很容易混淆的问题。面向连接和无连接协议可以, 而且通常也确实会共享同一条物理介质。

无连接协议中的分组被称为数据报 (datagram) , 每个分组都是独立寻址, 并由应用程序发送的。从协议的角度来看, 每个数据报都是一个独立的实体, 与在两个相同的对等实体之间传送的任何其他数据报都没有关系。

通常这就意味着客户端和服务器不会进行长期的对话--客户端发起一条请求, 服务器回送一个应答。这还意味着协议很可能是不可靠的。也就是说, 网络会尽最大努力传送每一个数据报, 但并不保证数据报不丢失、不延迟或者不错序传输。

另一方面, 面向连接的协议则维护了分组之间的状态, 使用这种协议的应用程序通常都会进行长期的对话。记住这些状态, 协议就可以提供可靠的传输。典型的面向连接协议有三个阶段。第一阶段, 在对等实体间建立连接。接下来是数据传输阶段, 在这个阶段中, 数据在对等实体间传输。最后, 当对等实体完成数据传输时, 连接被拆除。

一种标准的类比是:使用面向连接的协议就像打电话, 而使用无连接协议就像寄信。给朋友寄信时, 每封信都是一个独立寻址且自包含的实体。邮局不会维护以往通信者的历史记录--也就是说, 它不会维护信件之间的状态。邮局也不保证信件不丢失、不延迟、不错序。这种方式就对应于无连接协议发送数据报的方式。

这种类比虽然很形象, 但并不是非常贴切的。电话系统有实际的物理连接。而我们的"连接"则完全是想象的--它只是由两端记录的状态构成的。为了说明这一点, 我们来看看当一个空闲连接一端的主机崩溃并重启时会发生什么情况。

2 TCPIP协议应用

既然无连接协议有这么多的缺点, 大家可能会奇怪, 为什么还要使用这种协议呢?我们会看到, 在很多情况下, 使用无连接协议构建应用程序都是有意义的。但更重要的是, 无连接协议是构建面向连接协议的基础。为了更具体地说明这个问题, 来看看TCP/IP协议族, TCP/IP基于一个4层的协议栈。

栈的底部是接口层, 直接与硬件相连。栈的顶部是应用程序, 比如Telnet、ftp和其他标准的以及用户编写的应用程序。因此, IP是构建整个TCP/IP协议族的基础。但IP提供的是一种尽力而为的、不可靠的无连接服务。它接收来自其上层的分组, 将它们封装在一个IP分组中, 根据路由为分组选择正确的硬件接口, 从这个接口将分组发送出去。一旦将分组发送出去了, IP就不再关心这个分组了。和所有无连接协议一样, 它将分组发送出去之后就不再记得这个分组了。

现在我们来看看TCP是怎样利用这种简单的无连接服务来提供可靠的面向连接服务的。TCP的分组被称为段 (segment) , 是放在IP数据报中发送的, 因此, 根本无法假定这些分组会抵达目的地, 更不用说保证分组无损坏且以原来的顺序到达了。

首先, 它为TCP段中的数据提供了校验和。这样有助于确保抵达目的地的数据在传输过程中不会被网络损坏。

第二, 它为每字节分配了一个序列号, 这样, 如果数据抵达目的地时真的错序了, 接收端也能够按照恰当的顺序将其重装起来。

第三, TCP提供了一种确认-重传机制, 以确保最终每个段都会被传送出去。

确认/重试机制是到目前为止我们讨论的三种附加机制中最复杂的一种, 我们来研究一下它是怎样工作的。

TCP连接的每一端都维护了一个接收窗口 (receive window) , 接收窗口就是可以从对等实体接收的数据序列号范围。最小值表示窗口的左边界, 是所期望的下一字节的序列号。最大值表示窗口的右边界, 是TCP缓冲区空间所能容纳字节的最大编号。使用接收窗口而不只是所期望的下一字节计数器, 就可以通过流量控制来提高可靠性。流量控制机制可以防止TCP传输的数据使其对等实体的缓冲区空间溢出。

我们要注意这样一个事实:RTO定时器超时并不意味着原来的数据没有到达目的地。有可能是ACK丢失了, 或者原来的段在网络中延迟的时间太长, 以至于在其ACK到达之前RTO定时器就超时了。但这并不会造成什么问题, 因为如果原来的数据确实到达了, 那么重传的数据就会处于接收端TCP接收窗口范围之外, 会被丢弃。

IP地址 (这些地址通常都是以因特网标准的点分十进制表示法给出的) 用来将一个IP数据报传送给一台特定的主机。数据报到达目的主机时, 还需要将其数据传送给恰当的应用程序。例如, 一个UDP分组的目标可能是回声服务, 而另一个的目标则可能是时间查询服务。分组到达时, 内核会搜索其套接字列表, 查找一个与分组中的协议、地址和端口号相匹配的套接字。如果找到了匹配的套接字, 就由指定的协议 (在我们所讨论的情形中, 就是TCP或UDP) 来处理数据, 并将这些数据提供给所有打开了匹配套接字的应用程序。

3小结

总之, 在本文中, 我们研究了无连接和面向连接协议的区别。可知道, 不可靠的无连接数据报协议是构建可靠的面向连接协议的基础, 还简单介绍了可靠的TCP协议是如何构建在不可靠的IP协议上的。对TCP来说, 连接完全是想象的。它是由端点所记忆的状态组成的, 并不存在"物理"连接, 而打电话的时候是有物理连接的。

参考文献

[1]朱加强编著.计算机网络技术[D].北大燕工教育研究院, 2007 (06) .

[2]魏大新, 李育龙编著.Cisco网络技术教程 (第2版) [M].北京:电子工业出版社, 2007 (04) .

[3]陈涓, 赵振平译.TCP/IP高效编程:改善网络程序的44个技巧[M].北京:人民邮电出版社, 2011 (04) .

[4]王达编著.网络工程师必读——网络工程基础[M].北京:电子工业出版社, 2006 (07) .

多TCP连接 篇3

1 TCP的工作原理

在TCP/IP的参考模型中,应用程序处在应用层,应用层下面分别是传输层、网络层、网络接口层。传输层通过两种核心协议,为应用层提供会话和数据报通信服务。即TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)。TCP协议是一种面向连接的可靠传输协议,其工作原理是两个进程在利用TCP协议通信前必须先建立TCP协议连接;UDP是面向非连接的,即传送数据前不需要建立连接。该文讨论的是基于TCP的Socket通信。

2 Socket通信机制

为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用Socket。Socket的出现,使程序员可以很方便地访问Tcp/Ip,从而开发各种网络应用的程序。在网络通信中Socket可以理解为客户端或服务器端的一个特殊对象,Socket通常也称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket和Server Socket类中封装了实现Socket通信的主要方法,通信过程中有两个关键的方法:get Input Stream()和get Output Stream()。前者得到的是一个输入流,后者得到是一个输出流。客户与服务器可调用各自的get Input Stream()和get Output Stream()方法,实现服务器与客户端一对一的流式传输。一个完整的Socket通信程序一般包括以下几个步骤:

1)创建Socket。

2)打开连接到Socket的输入输出流。

3)按照一定的协议对Socket进行读/写操作。

4)关闭Socket。

3 服务器端程序编写:

Java使用专门建立Socket服务器的类Server Socket来创建服务器对象,Server Socket server=new Server Socket(int port),这里提供了一个端口作为参数,要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip作为保留端口,例如:Http使用80端口。因此我们所分配的端口只能是1024之后的。

建立服务器端的Socket对象步骤如下:

1)创建一个服务器端套接字,并绑定到指定端口上;

Server Socket ss=new Server Socket(int port),

2)调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。

Socket s=ss.accept();

3)调用Socket类的get Output Stream()和get Input Stream获取输出流和输入流,开始网络数据的发送和接收。

4)最后关闭通信套接字。os.close();is.close();s.close();

4 客户端程序编写

客户端应用程序和服务器端很相似,

1)调用Socket()创建一个流套接字,并连接到服务器端;

Socket s=new Socket(Inet Address.get By Name(“服务器的主机名”),port);

2)调用Socket类的get Output Stream()和get Input Stream获取输出流和输入流,开始网络数据的发送和接收。

3)最后关闭通信套接字。os.close();is.close();s.close();

5 实现多线程通信

通常服务器程序必须同时为多个客户端提供服务,为达到这个目的,我们要使用多线程的机制,每当客户端提出请求后,服务器程序就会产生一个线程来用来和这个客户端建立一个套接字连接。多线程是Java提供的一个重要机制,支持多个程序并发执行。

1)多线程Socket通信的服务器端程序:

2)为了证实服务器代码能为多个客户端提供服务,下面的程序将创建多个线程,并同相同的服务建立连接。

多线程Socket通信的客户端程序:

6 测试

此程序在MyEclipse6.5和jdk1.5环境下运行,图1是服务器启动后的状态。图2是服务器运行中的状态。图3是客户端运行中的状态。

7 结束语

Java是一种优秀的编程语言,具有可移植性、面向对象、多线程、简单性、解释性、安全性等优点,广泛应用于网络开发环境中。基于TCP的Socket通信,保证了网络通信的准确性、及时性。本文就其如何进行多线程通信作了介绍,并通过一个实例,介绍了多线程通信的具体实现。

摘要:在基于TCP的网络应用开发中,Socket是一种流的机制,线程通过Socket进行数据流的读取和发送,该文阐述了Socket编程的方法和步骤,并实现了基于TCP的Socket多线程通信。

关键词:TCP/IP,socket,多线程

参考文献

[1]李芝兴.Java程序设计之网络编程[M].北京:清华大学出版社,2006.

[2]李新良,罗戈夕.用Socket的编程机制实现网上交谈[J].电脑知识与技术,2006(29).

[3]王静,曲凤娟.基于Socket的多用户并发通信的设计[J].福建电脑,2007(3):164.

[4]陈小艳.用Java实现多线程Socket通信[J].湖北广播电视大学学报,2008(1).

多TCP连接 篇4

关键词:网络编码,无线网络,TCP,多路径

0引言

无线网状网络 ( WMN) 正逐渐成为连接社区的下一代系统[1]。由于这些网络的不断扩增, 用户将会需要更灵活的应用, 如视频流和Vo IP。不幸的是, 在WMN中TCP的性能下降得非常快[2]。当在无线网络环境中数据包丢失时, TCP认为丢失是由拥塞引起的, 并触发拥塞控制机制, 从而降低发送速率, 以适应新的网络环境。然而实际的网络容量并没有改变, 因此网络没有得到充分利用。解决此问题的一个最典型的方法, 就是在无线网状网中采用多路径传输。其中一个例子是Horizon[3]实现了一种拥塞控制机制, 但它没有任何可靠性, 每一次都是由TCP层重传来恢复丢包的。

采用多路径传输以及逐跳编码方式, 大大提高了网络传输的吞吐量, 并增加网络传输的可靠性。

1系统模型

多路径传输面临了一个更深一层的挑战, 如图1所示, 源节点S可以通过3个中间节点A、B和C向目的节点D发送数据包。假设S发送3个数据包P1、P2和P3, 3个中间节点接收到如图1所示的数据包。这种情况3个中间节点需要相互协作调度数据包, 使目的节点接收到没有重复的数据包。

网络编码[4 - 6]可以有效解决中间节点的协作和分组调度问题。在上述例子中, 每个中间节点可以采用网络编码技术, 发送它们所自收到数据包的线性组合。当目的节点收到3个线性组合时, 就可以恢复出原始的数据包。

典型的网络编码技术是按块划分数据包的[7], 相同组中数据包的线性组合为一个编码的数据包。 比如说MORE[8], 源节点必须等到它收到一个组中的所有数据包后, 才可以发送数据包, 由此带来了编码延迟, 接收节点只有等到收到一定数量的线性组合才能够解码出原始的数据包。此外, 编码操作带来的延迟, 对无线网络环境中TCP的性能产生了很大的负面影响。

为了避免这种编码延迟, 文献[9]提出了在线编码方案, 源节点编码来自TCP拥塞窗口的数据包, 接收节点确认它收到的每一个新的线性组合, 即使接收节点不能立刻解码出原始的数据包。这种方法给出了一个全新演绎的ACK, 并允许TCP滑动窗口中数据包参与编码。然而这种方案是单路径, 并且只是在端到端上执行编码操作。把该方法称作为TCP-ARQ。

综上考虑, 在现有标准协议的基础上, 设计一种新的基于网络编码的多路径TCP传输方案, 即把网络编码与多路径路由相结合, 提高了TCP在无线mesh网中传输的吞吐量。该协议位于TCP层与IP层的中间。其特点如下:

1在无线mesh网络中不同路径中采用多路径在线编码方案, 即让中间节点也参与编码, 消除由于编码带来的延迟;

2设计一种算法估计网络中的丢包率, 调整发送线性组合数据包的速率;

3采用一种混合的基于信用的算法, 即每个节点分布式计算其产生线性组合数据包的速率;

4采用一种基于背压式的拥塞控制机制。

使用ns - 2. 35网络模拟器, 对所提出的NC- MPTCP进行仿真。仿真结果表明, 该协议由于采用多路径传输以及逐跳编码方式而更为高效, 并能够取得更高的吞吐量。

2基于网络编码的多路径TCP的设计

2. 1多路径在线编码方案

在多路径编码方案中, 使用了文献[9]中相似的方法, 但是有一些本质的不同。首先, TCP-ARQ仅仅使用单路径传输, 利用无线mesh网络中多路径的特点, 沿着多路径发送数据包。其次, 在TCP- ARQ中, 中间节点仅仅转发从上一跳节点接收到的数据包, 编码操作仅仅是在端到端上执行的。在设计方案中, 中间节点对其从上一跳节点接收到的数据包进行再编码, 每一跳都以此类推。下一节, 将会详细介绍多路径在线编码方案。

2. 2在线丢包估计和速率自适应

为了恢复丢失的数据包, 节点应该以何种速率发送线性组合的数据包, 仍然是一个开放性的课题。 如果速率太低, 由于无线介质的不可靠性, 接收器可能无法解码。另一方面, 如果速率太高, 节点可能会收到冗余线性组合, 消耗网络资源。此外, 由于无线信道的质量是随着时间的变化而变化的, 考虑到当前通道条件, 节点发送编码的数据包的速度需要频繁地更新。考虑到这些因素, 引进一种估计任意两个节点间的丢包率的算法, 并分别计算的每个节点应发送线性组合的速率, 从而达到速率的自适应。

为了评估丢包率, 每一个节点Nk应该包含以下信息:

1 pi: 发送到其下游邻居节点Ni的数据包的id清单;

2 ri: 下游邻居节点Ni记录其从上游节点Nk接收的数据包的总数;

3 skl: 当前节点Nk从其上游邻居节点Nl接收的最后一个数据包的id;

4 tkl: 当前Nk从其上游邻居节点Nl接收到的数据包的总数。

当节点Nk发送一个数据到包下游节点Ni时, 会更新pi清单。当节点Nk接收从其上游邻居节点Nl发送过来的一个新的数据包时, 会更新skl与tkl。 即使接收的数据包不是最新的, 也会进行相应的更新。

由于无线媒介的广播特性, 一个节点可以侦听到其下游邻居节点。利用此特性, 当Nk发送数据包时, 上游节点Nl可以在发送数据包的包头中背负着skl和tkl的信息。然后, 它的上游节点可以获得此数据包并且找到它们可以用于估计丢包率的信息。然而, 目的节点不发送任何线性组合的数据包, 之前的方法不能被使用。此时目的节点应发送TCP ACKs到发送节点, 因此目的节点也让这些数据包背负着skl和tkl等信息。

一旦节点Nk接收到来自其的下一跳节点Ni的反馈信息, 它将更新每一跳对应的相应的信息, 并且计算其到下一条数据包的丢包率。按照算法1, 如果一个节点确定一个数据包丢失时, 它将发送一个冗余的线性组合数据包并根据评估的丢包率来调整发送速率。Nk节点的丢包率: lossk= ∏jn= 1hlosskj, 其中nh表示下游中间节点nk的个数。

算法1: 节点Nk使用从Ni接收到的反馈信息, 评估从Nk向Ni发送数据过程中数据的丢包率, losski。

1 if节点Nk从下游节点邻居Ni接收到sik、tikthen

2计算Nk向Ni发送数据包的数目, ws= C , 其中C = {pi ( j) / pi ( j) ≤sik, j = 1: size (pi) }

3计算Ni已经收到的从Nk发送过来的数据包, wr←tik- ri

5 ri←tik

6擦除pi ( j) for which pi ( j) ≤sik

7 end if

根据图1的拓扑图, 设计评估丢包算法, 让2个中间节点发送数据包到目的节点。对于理想的曲线, 节点以最佳的被给出的冗余度速率发送数据包。 对于实际曲线, 节点以设计的算法1评估丢包率。 由图2可以看出, 吞吐量跟最佳的曲线很逼近。因此, 设计的算法很精确, 并且由于数据包背负着所需要的信息, 而没有给网路带来任何的负荷。

2. 3混合的基于信用的方案

多路径并行传输时, 给每条路径分配多少数据流是非常关键的。例如在图1中, 如果节点A、B和C每从目的节点收到一个数据包时, 就产生一个线性组合数据包, 将会导致发送速率增大以至于目的节点收到多个重复的数据包。

为了解决此问题, 文献[7]和文献[8]把网络中的发送每一个数据包与一个信用相结合, 而这个信用由源节点生成, 被发送到下游节点, 在目的节点中被使用。在提出的协议中, 混合的基于信用的方案主要包括2部分。第一, 信用由源节点产生并转移到转发器中, 跟文献[7]和文献[8]所提出的方案一样。第二, 中间节点侦听到一个数据包的丢失时也能产生一个信用, 该信用跟已有的不同。在文献[7]和文献[8]方案的基础上进行了改进, 使得中间节点侦听到数据包的丢失时, 也能够产生信用。因此, 每个节点能够评估恢复丢失的数据包所需节点的发送数据包的速率。

2. 4拥塞控制

在无线mesh网络中使用多路径传输方案, 多条数据流可以共用相同的节点, 保护每条路径的公平性以及负载均衡是非常关键的。为此, 引进一种拥塞控制机制, 基于背压式方法论[10]包选择一个发送者, 允许节点在临近节点不拥挤的情况下发送数据包。以队列长度的大小为拥塞控制的标准, 如果队列中的数据包越多, 则这个节点的拥塞度就越大。 对于这种拥塞控制机制, 节点Nk使得每一条数据流保持以下信息:

1一个输出队列, 即输出缓冲区i, i = 1: nf, 其中nf是节点Nk发出数据流的数量;

2每一条数据流的下一跳节点的队列大小, qij, i = 1: nhi, nhi是Nk为发送数据流i可选择的下一跳的数量。

在无线媒介中, 当节点有机会发送一个数据包时, 首先会选择一条具有最大的输出缓存队列的数据流发送数据包。一旦选择好了数据流, 只要背压式条件成立, Nk将会选择具有最短的输出队列的节点Nh作为发送者。接着, Nk从其输出缓存中移除第一个数据包, 并把这个数据包的id添加到发送到节点Nk的数据包id的清单ph中。同时, 在这些数据包的头部添加它们当前所在节点的队列大小qfk, 用于计算背压的大小。其上游邻居节点Nl将会在数据包的头部添加收到最一个数据包的id、skl以及收到数据包的总数tkl, 用于评估丢包。最后, Nk发送这些数据包。

2. 5系统设计

对每个流f的每个节点都保持一个编码缓存和一个输出缓存。编码缓存存储用于编码的数据包。 在源节点存储原始的未编码的数据包, 而其他的节点存储线性组合的数据包。输出缓存存储编码后并将会被发送到网络中的数据包。当一个节点可以发送数据包时, 数据包将会被从输出缓存中移除。这种情况下, 节点将会使上述拥塞控制数据调度算法, 选择一条数据流f和一个合适的发送者Nh。然后, 节点从输出缓存中移除第一个数据包, 并更新节点Nh的状态信息, 最后发送数据包。

源节点: 当一个流f产生原始数据包时, 源节点把它存储在编码缓存中, 并执行在线编码方案, 即当它收到一个新的数据包的时候就产一个新的线性组合。为了产生一个编码的数据包, 源节点混合编码缓存中的所有数据包并把产生的线性组合存储在输出缓存。当源节点接收到流f的一个TCP ACK, 就把原有的数据包从编码缓存中移除, 同时滑动编码窗口。

中间节点: 当中间节点Nk收到流f的一个编码的数据包线性组合LCr时, 它首先会从编码缓存区中移除那些比LCr更古老的数据包的线性组合。然后, 更新发送LCr的上游邻居节点的状态, 比如接收到最后一个数据包的id、skl以及收到数据包的总数tkl。如果编码的数据包是全新的, Nk把它存储在编码缓存f中, 否则把它丢弃。当中间节点接收到一个信用时就产生并发一个最原始的数据包的线性组合。

目的节点: 当目的节点收到流f的一个线性组合数据包时, 它将更新发送者的最后收到一个数据包的id以及收到数据包的总数。仅仅当收到的线性组合与之前收到成线性独立的关系时, 目的节点才会存储接收到的编码的数据包。由于源节点执行在线编码方案, 则目的节点也应该是实时的解码原始的数据包, 如果解码成功则把解码的数据包发送到TCP层, 反之, 目的节点向源节点发送当前接收数据包的情况。

3性能评估

采用NS 2. 35于网络编码的MPTCP进行仿真。 拓扑结构如图1所示。2个FTP应用用于源节点和目的节点之间的通信。它们使用含网络编码的TCP和无网络编码的TCP。 其中一条链路带宽为1. 5 Mbps, 另外一条链路带宽为1 Mbp s, 链路的缓存大小为200。目的节点的TCP窗口设置100个数据报文, 数据报文大小为1 000字节。根据MPTCP的主要功能, 将基于网络编码的MPTCP传输方法, 即NC-MPTCP和文献[11]提出的端到端的网络编码操作 ( MPTCP/NC end-to-end) , 中间节点仅仅转发收到的数据包以及单独采用多路径技术[12]等, 进行丢包率、吞吐量和源节点的发送速率的相关比较。

让中间节点参与编码操作的网络的丢包率如图3所示, 比仅仅在端到端上采用网络编码以及只采用多路径传输技术的要低。

在丢包率增加的情况下, 图4表明NC- MPTCP的吞吐量的变化不大, 比仅仅在端到端上采用网络编码的吞吐量要高, 然而MPTCP在丢包率4% 时, 吞吐量开始急剧下降。

源节点的速率变化快慢反映了拥塞机制的好坏。从图5可以看出NC-MPTCP能更好地进行负载均衡, 在链路上发生拥塞的机会更少, 所以源节点的速率变化不大, 比仅仅在端到端上采用网络编码的拥塞控制机制更高效, 而MPTCP的速率变化太大, 因此需要一个更好的拥塞控制机制调整节点发送数据包的速率。

4结束语

提出了一个新的基于网络编码的MPTCP, 即NC-MPTCP, 把在线编码方案和多路径路由技术相结合, 让中间节点参与编码操作, 大大地提高了TCP在无线mesh网络有损环境中的性能。NC-MPTCP设计了一种在线算法来评估当前网络的丢包情况, 并根据丢包大小调整节点发送线性组合数据包的速率, 并在TCP反馈机制的基础上, 让目的节点确认它收到的每一个线性独立的数据包, 而不是解码收到的线性组合。这些设计的特点实现了NC-MPTCP与TCP之间的无缝融合。通过大量的仿真证明NC- MPTCP可以提高网络的吞吐量以及网络传输的效率。

参考文献

[1]AKYILDIZ I F, WANG X.A Survey on Wireless Mesh Networks[J].Communications Magazine, IEEE, 2005, 43 (9) :S23-S30.

[2]BALAKRISHNAN H, PADMANABHAN V N, SESHAN S, et al.A Comparison of Mechanisms for Improving TCP Performance over Wireless Links[J].Networking, IEEE/ACM Transactions on, 1997, 5 (6) :756-769.

[3]RADUNOVIB, GKANTSIDIS C, GUNAWARDENA D, et al.Horizon:Balancing TCP over Multiple Paths in Wireless Mesh Network[C]∥Proceedings of the 14th ACM international conference on Mobile computing and networking.ACM, 2008:247-258.

[4]AHLSWEDE R, CAI N, LI S Y R, et al.Network Information Flow[J].Information Theory, IEEE Transactions on, 2000, 46 (4) :1204-1216.

[5]AL HAMRA A, BARAKAT C, TURLETTI T.Network Coding for Wireless Mesh Networks:a Case Study[C]∥Proceedings of the 2006 International Symposium on on World of Wireless, Mobile and Multimedia Networks.IEEE Computer Society, 2006:103-114.

[6]KATTI S, KATABI D, BALAKRISHNAN H, et al.Symbollevel Network Coding for Wireless Mesh Networks[J].ACM SIGCOMM Computer Communication Review, 2008, 38 (4) :401-412.

[7]RADUNOVIC B, GKANTSIDIS C, KEY P, et al.Multipath Code Casting for Wireless Mesh Networks[C]∥CoNext, New York, USA, 2007:1-12.

[8]CHACHULSKI S, JENNINGS M, KATTI S, et al.Trading Structure for Randomness in Wireless Opportunistic Routing[J].ACM SIGCOMM Computer Communication Review, 2007, 37 (04) :169-180.

[9]SUNDARARAJAN J K, SHAH D, MDARD M, et al.Network Coding Meets TCP[C]∥INFOCOM 2009, IEEE.IEEE, 2009:280-288.

【多TCP连接】推荐阅读:

电气连接05-15

液压连接05-28

自动连接05-29

焊接连接06-08

测试连接06-10

新型连接06-28

问题连接07-30

通信连接08-11

连接结构08-14

连接保护09-01

上一篇:建筑电气设计常见问题下一篇:理解因式分解的意义