CN103873474A - 基于Windows的TCP/IP协议的网络传输方法 - Google Patents
基于Windows的TCP/IP协议的网络传输方法 Download PDFInfo
- Publication number
- CN103873474A CN103873474A CN201410120252.8A CN201410120252A CN103873474A CN 103873474 A CN103873474 A CN 103873474A CN 201410120252 A CN201410120252 A CN 201410120252A CN 103873474 A CN103873474 A CN 103873474A
- Authority
- CN
- China
- Prior art keywords
- data
- inner nuclear
- thread
- application layer
- nuclear layer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明属于软件开发设计领域,具体涉及一种基于Windows的TCP/IP协议的网络传输方法。该方法包括以下步骤:1)应用层调用内核层的操作系统功能;2)应用层和内核层对接:3)内核层检测网络端口的信号;4)数据传输。通过采用AcceptEx异步连接机制使得连接处理可以使用较少的线程处理大量的客户连接;同时,数据传输时数据接收线程(I/O工作线程)和数据处理线程(工作者线程)分开的方式大大减轻了I/O操作的负担,也解决了大并发连接处理阻塞问题。
Description
技术领域
本发明属于软件开发设计领域,具体涉及一种基于Windows的TCP/IP协议的网络传输方法。
背景技术
TCP/IP协议是当前广域网和局域网通用的网络协议,在基于windows操作系统的网络数据传输软件设计和编码过程中,设计者可以采用多种传输方法(如常规的多线程socket阻塞式设计、异步选择I/O复用机制WSAAsynSelect、完成端口网络方法I/O Completion Port等)、使用各种现有的框架(如MFC、.NET FCL等)或者控件,但不论如何选择,传统的阻塞式/异步选择机制是无法与高性能的完成端口机制相比。而且在众多的基于完成端口设计出的网络数据传输方法中,如何高效地解决各种数据处理问题需要进一步完善传输方法。
TCP/IP协议上的传统阻塞式输方法一般采用简单的多线程C/S握手机制,工作过程属于阻塞式传输;阻塞式传输方法,从使用可用的socket开始到最后数据获取完成才会返回,中间的过程完全阻塞。对于一次数据获取过程来说,只能处理一个套接字。图1是该传输方法的原理图。
异步选择I/O复用机制方法采用的是多线程非阻塞注册集合式连接管理方式,属于异步并发消息(事件)式方法,其消息(事件)的触发是有很多条件限制的,而且注册集合中有数量限制,即无法进行大并发数据连接和接收管理。异步select方法,分两个过程,进行两次系统调用,select过程先阻塞,直到有活动的套接字才返回。可以处理多个套接字,但数量有限。图2是该传输方法的原理图。图6-a为该传输方法的数据处理方式示意图。
发明内容
本发明提出了一种基于Windows的TCP/IP协议的网络传输方法,解决了现有网络传输方法中无法高效地解决各种数据处理问题。
本发明的具体技术方案:
一种基于Windows的TCP/IP协议的网络传输方法,其特征在于:包括以下步骤:
1)应用层调用内核层的操作系统功能;
2)应用层和内核层对接:
2.1)应用层向内核层提供功能接口,开辟线程池、缓冲池,并向内核层提出网络传输需求;
2.2)应用层向内核层投递多个AcceptEx异步连接请求;
2.3)应用层向内核层投递多个数据接收请求;
3)内核层检测网络端口的信号;
4)数据传输:
A)若信号为“连接请求”,则内核层从缓冲池中取出一个AcceptEx异步连接进行连接请求处理,并保持此连接;内核层利用上述连接进行数据发送或者接收;若连接中止,则内核层将取出的连接位置返回连接缓冲池中,等待下一个指令;
B)若信号为“发送请求”,则应用层将数据打包后通过步骤2.1提供的接口,传输给内核层,内核层通过硬件端口发送数据;
C)若信号为“接收请求”,则内核层通过步骤2.1提供的接口,输传数据给应用层,应用层进行数据处理;具体步骤如下:
应用层提供的数据接收处理模块在独立的线程中,内核层数据传输到达之后,应用层从线程池中取出一个线程并唤醒此线程,利用此线程进行处理并将数据放入缓冲池中,从而进行下一步的数据处理;在数据缓冲的同时,应用层向内核层投递新的数据接收请求,则内核层立即返回并等待接收另一个数据包。
根据上述方法所述:当进行步骤4的C中出现“数据粘包”时:具体解决步骤如下:
1)应用层根据数据包头中数据包的大小,并利用数据缓冲池中已有的数据块序列号对粘包情况进行判读;
2)应用层从线程池中取出一个线程,在此线程中根据数据包的数据结构对数据块剥离;
3)若零散数据块已经能构成完整数据包,则打包这些数据块形成完整数据包;若数据仍然不完整,则将此数据块放入缓冲池中并编号等待下次数据包。
本发明的优点在于:
1、本发明采用AcceptEx异步连接机制,相比Accept阻塞连接,AcceptEx属于异步连接,而且可以完成:接受连接、返回连接的本地和远程地址、获取第一个数据块三个任务,从而使得连接处理可以使用较少的线程处理大量的客户连接。
2、本发明在处理接收的数据包时,一方面采用增加数据头部便于接收时确认数据包大小,另一方面在接收数据时采用数据缓冲,从而进行多次数据拼接操作,直到完整数据包接收完毕。因此,该方法可解决粘包数据分离并完整接收;解决常见的TCP数据包粘包问题。
3、本发明中在数据传输时数据接收线程(I/O工作线程)和数据处理线程(工作者线程)分开的方式,在接收到数据接收完成通知后立即唤醒工作者线程处理数据,之后释放I/O工作线程用于处理其它数据接收通知,这种方式大大减轻了I/O操作的负担,也解决了大并发连接处理阻塞问题。
4、本发明方法可以在Windows2000或者Windows NT系统上使用,系统CPU数量或者核数越多运行越高效。
附图说明
图1是现有阻塞式数据传输方法流程图。
图2是现有异步select I/O复用数据传输方法流程图。
图3是本发明数据传输方法流程图。
图4是本发明数据传输方法的工作原理图。
图5是本发明数据读取数据流示意图。
图6-a为全异步I/O数据传输方法传统数据处理方式示意图。
图6-b为本发明方法的数据处理方式示意图。
具体实施方式
本申请为了解决现有网络传输方法中无法高效地解决各种数据处理的问题,提出了采用AcceptEx异步连接机制、数据传输时采用数据接收线程(I/O工作线程)和数据处理线程(工作者线程)分开的方式的一种基于Windows的TCP/IP协议的网络传输方法。以下结合附图3、4、6-b对该方法进行详细描述。
一种基于Windows的TCP/IP协议的网络传输方法,具体包括以下步骤:
步骤1)应用层调用内核层的操作系统功能;
具体的说:该步骤是利用操作系统的高效IO数据处理能力,应用层调用操作系统的IOCP系统函数与内核层进行交互,实现高效网络数据传输处理。
步骤2)应用层和内核层对接:
具体的说:应用层和内核层对接的前提是应用层必须提供接口函数和资源,以便内核层操作,具体如下述步骤:
步骤2.1)应用层向内核层提供功能接口,开辟线程池、缓冲池,并向内核层提出网络传输需求;
步骤2.2)应用层直接向内核层投递多个AcceptEx异步连接请求;
步骤2.3)应用层直接向内核层投递多个数据接收请求;
步骤3)内核层检测网络端口的信号;所有和其它设备的网络信息交互都交由内核层处理,内核层负责和硬件驱动程序交互。具体实现的方法是操作系统自己实现,使用本方法的用户不用理会它如何实现,只需关心结果。
步骤4)数据传输:
A)若信号为“连接请求”,则内核层从缓冲池中取出一个AcceptEx异步连接进行连接请求处理,并保持此连接;内核层利用上述连接进行数据发送或者接收;若连接中止,则内核层将取出的连接位置返回连接缓冲池中,等待下一个指令;从事网络通讯的技术人员都基于TCP的网络数据处理的第一步必须建立连接,而AcceptEx既可以实现连接,也可以获取对方信息并取得第一个数据块。而且不论连接成立与否,立即返回进行其它操作,而不会阻塞系统。
B)若信号为“发送请求”,则应用层将数据打包后通过步骤2.1提供的接口,传输给内核层,内核层通过硬件端口发送数据;用户在应用层发送数据到其它设备。应用层只需直接将数据和发送请求一并交予内核层处理,之后立即返回,可进行其它操作。
C)若信号为“接收请求”,则内核层通过步骤2.1提供的接口,输传数据给应用层,应用层进行数据处理;
具体步骤如下:应用层提供的数据接收处理模块在独立的线程中,内核层数据传输到达之后,应用层从线程池中取出一个线程并唤醒此线程,利用此线程进行处理并将数据放入缓冲池中,从而进行下一步的数据处理;在数据缓冲的同时,应用层向内核层投递新的数据接收请求,则内核层立即返回并等待接收另一个数据包。
在上述过程中,内核层接收到的数据可能会出现粘包问题,而且数据处理过程可能会占用较长时间和较多资源。
解决该问题的步骤具体如下:
步骤1)应用层根据数据包头中数据包的大小,并利用数据缓冲池中已有的数据块序列号对粘包情况进行判读;
步骤2)应用层从线程池中取出一个线程,在此线程中根据数据包的数据结构对数据块剥离;
步骤3)若零散数据块已经能构成完整数据包,则打包这些数据块形成完整数据包;若数据仍然不完整,则将此数据块放入缓冲池中并编号等待下次数据包。
Claims (2)
1.一种基于Windows的TCP/IP协议的网络传输方法,其特征在于:包括以下步骤:
1)应用层调用内核层的操作系统功能;
2)应用层和内核层对接:
2.1)应用层向内核层提供功能接口,开辟线程池、缓冲池,并向内核层提出网络传输需求;
2.2)应用层直接向内核层投递多个AcceptEx异步连接请求;
2.3)应用层直接向内核层投递多个数据接收请求;
3)内核层检测网络端口的信号;
4)数据传输:
A)若信号为“连接请求”,则内核层从缓冲池中取出一个AcceptEx异步连接进行连接请求处理,并保持此连接;内核层利用上述连接进行数据发送或者接收;若连接中止,则内核层将取出的连接位置返回连接缓冲池中,等待下一个指令;
B)若信号为“发送请求”,则应用层将数据打包后通过步骤2.1提供的接口,传输给内核层,内核层通过硬件端口发送数据;
C)若信号为“接收请求”,则内核层通过步骤2.1提供的接口,输传数据给应用层,应用层进行数据处理;具体步骤如下:
应用层提供的数据接收处理模块在独立的线程中,内核层数据传输到达之后,应用层从线程池中取出一个线程并唤醒此线程,利用此线程进行处理并将数据放入缓冲池中,从而进行下一步的数据处理;在数据缓冲的同时,应用层向内核层投递新的数据接收请求,则内核层立即返回并等待接收另一个数据包。
2.根据权利要求1所述的基于Windows的TCP/IP协议的网络传输方法,其特征在于:当进行步骤4的C中出现“数据粘包”时:具体解决步骤如下:
1)应用层根据数据包头中数据包的大小,并利用数据缓冲池中已有的数据块序列号对粘包情况进行判读;
2)应用层从线程池中取出一个线程,在此线程中根据数据包的数据结构对数据块剥离;
3)若零散数据块已经能构成完整数据包,则打包这些数据块形成完整数据包;若数据仍然不完整,则将此数据块放入缓冲池中并编号等待下次数据包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410120252.8A CN103873474B (zh) | 2014-03-27 | 2014-03-27 | 基于Windows的TCP/IP协议的网络传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410120252.8A CN103873474B (zh) | 2014-03-27 | 2014-03-27 | 基于Windows的TCP/IP协议的网络传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103873474A true CN103873474A (zh) | 2014-06-18 |
CN103873474B CN103873474B (zh) | 2017-05-17 |
Family
ID=50911601
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410120252.8A Active CN103873474B (zh) | 2014-03-27 | 2014-03-27 | 基于Windows的TCP/IP协议的网络传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103873474B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094988A (zh) * | 2015-08-13 | 2015-11-25 | 深圳市金蝶中间件有限公司 | 基于http请求的数据处理方法和装置 |
CN105786447A (zh) * | 2014-12-26 | 2016-07-20 | 乐视网信息技术(北京)股份有限公司 | 服务器处理数据的方法、装置及服务器 |
CN107666474A (zh) * | 2016-07-30 | 2018-02-06 | 华为技术有限公司 | 一种网络报文处理方法、装置及网络服务器 |
CN112261031A (zh) * | 2020-10-19 | 2021-01-22 | 腾讯科技(深圳)有限公司 | Tcp协议栈的更新方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1655129A (zh) * | 2005-02-25 | 2005-08-17 | 清华大学 | Windows平台下动态管理存储资源的通用方法 |
US20080114882A1 (en) * | 2006-11-13 | 2008-05-15 | David Alan Christenson | Multiplexing Multiple Client Connections in a Single Socket |
-
2014
- 2014-03-27 CN CN201410120252.8A patent/CN103873474B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1655129A (zh) * | 2005-02-25 | 2005-08-17 | 清华大学 | Windows平台下动态管理存储资源的通用方法 |
US20080114882A1 (en) * | 2006-11-13 | 2008-05-15 | David Alan Christenson | Multiplexing Multiple Client Connections in a Single Socket |
Non-Patent Citations (1)
Title |
---|
刘磊等: "Windows 系统网络通信层性能及方法研究", 《计算机应用》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786447A (zh) * | 2014-12-26 | 2016-07-20 | 乐视网信息技术(北京)股份有限公司 | 服务器处理数据的方法、装置及服务器 |
CN105094988A (zh) * | 2015-08-13 | 2015-11-25 | 深圳市金蝶中间件有限公司 | 基于http请求的数据处理方法和装置 |
CN107666474A (zh) * | 2016-07-30 | 2018-02-06 | 华为技术有限公司 | 一种网络报文处理方法、装置及网络服务器 |
CN107666474B (zh) * | 2016-07-30 | 2021-04-20 | 华为技术有限公司 | 一种网络报文处理方法、装置及网络服务器 |
US11218570B2 (en) | 2016-07-30 | 2022-01-04 | Huawei Technologies Co., Ltd. | Network packet processing method and apparatus and network server |
US11689646B2 (en) | 2016-07-30 | 2023-06-27 | Huawei Technologies Co., Ltd. | Network packet processing method and apparatus and network server |
CN112261031A (zh) * | 2020-10-19 | 2021-01-22 | 腾讯科技(深圳)有限公司 | Tcp协议栈的更新方法、装置、设备及存储介质 |
CN112261031B (zh) * | 2020-10-19 | 2023-08-29 | 腾讯科技(深圳)有限公司 | Tcp协议栈的更新方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103873474B (zh) | 2017-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102377814B (zh) | 针对嵌入式操作系统的远程协助服务方法 | |
CN103873474A (zh) | 基于Windows的TCP/IP协议的网络传输方法 | |
CN103218337B (zh) | 基于wishbone总线实现主与主、从与从通信的片上系统和方法 | |
CN102323894B (zh) | 企业分布式应用间实现非阻塞方式相互调用的系统及方法 | |
CN103095703B (zh) | 一种实现网络与串口数据交互的方法、设备及系统 | |
CN102819512A (zh) | 一种基于spi的全双工通信装置及其方法 | |
CN101697536A (zh) | 穿透正向物理隔离装置大数据量实时传输的方法 | |
CN105404788B (zh) | 一种分布式医疗诊断系统 | |
CN104270344B (zh) | 万兆网闸 | |
WO2016099357A1 (en) | Methods and first network node for managing a stream control transmission protocol association | |
CN105282128A (zh) | 一种基于长连接的双向调用方法及系统 | |
CN105808364B (zh) | 融合PC系统和android系统的双系统通信方法和系统 | |
CN105743951A (zh) | 一种数据发送、接收的方法及装置 | |
CN102811152A (zh) | 一种多主总线网络通讯实时交易数据交换实现方法 | |
CN106357773A (zh) | 一种基于SSHv2协议的远程协助系统 | |
CN106789099A (zh) | 基于pcie的高速隔离网络方法及终端 | |
CN106027305A (zh) | 一种基于arm的相同ip的双机热备的方法 | |
CN203151670U (zh) | 基于网络视频节点的分布式拼接控制显示系统 | |
CN104850518A (zh) | 远程登入电脑的方法 | |
CN104021196A (zh) | 一种针对System V消息队列的I/O复用方法 | |
CN102546659A (zh) | 面向远过程调用的持久tcp连接方法 | |
CN105471718A (zh) | 一种全双工消息队列的实现方法 | |
CN102790663A (zh) | 一种应用于vlbi硬件相关处理机的全硬件网络接口 | |
CN103984544A (zh) | 一种避免任务同时执行的方法 | |
CN106411616B (zh) | 一种通过1553b总线管理以太网终端的装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |