黨 琦**,茍茹君1,3,董廣然,季茂鵬
(1.西安衛(wèi)星測控中心,西安 710043;2.航天器在軌故障診斷與維修重點(diǎn)實(shí)驗(yàn)室,西安 710043; 3.宇航動(dòng)力學(xué)國家重點(diǎn)實(shí)驗(yàn)室,西安 710043)
多目標(biāo)控制系統(tǒng)中TCP粘包問題的解決方法*
黨 琦**1,2,茍茹君1,3,董廣然1,2,季茂鵬1,2
(1.西安衛(wèi)星測控中心,西安 710043;2.航天器在軌故障診斷與維修重點(diǎn)實(shí)驗(yàn)室,西安 710043; 3.宇航動(dòng)力學(xué)國家重點(diǎn)實(shí)驗(yàn)室,西安 710043)
測控設(shè)備采用傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)作為基礎(chǔ)協(xié)議,進(jìn)行遙控多通道并行工作時(shí)易造成網(wǎng)絡(luò)數(shù)據(jù)粘包。針對此問題,在對TCP協(xié)議特點(diǎn)進(jìn)行分析的基礎(chǔ)上,通過討論TCP編程模型和流交付模型,研究了發(fā)生TCP數(shù)據(jù)流粘包時(shí)的網(wǎng)絡(luò)數(shù)據(jù)特征,并分析了發(fā)生網(wǎng)絡(luò)粘包的原因,提出了局域網(wǎng)環(huán)境下采用短連接、發(fā)送端及格式數(shù)據(jù)組包3種解決網(wǎng)絡(luò)粘包的方法。實(shí)際測試結(jié)果證明了這3種方法的適應(yīng)性及格式數(shù)據(jù)方法還原TCP網(wǎng)絡(luò)數(shù)據(jù)包的有效性,可為基于TCP應(yīng)用軟件開發(fā)提供借鑒。
多目標(biāo)控制系統(tǒng);TCP數(shù)據(jù)流;網(wǎng)絡(luò)粘包;網(wǎng)絡(luò)程序設(shè)計(jì)
隨著信息技術(shù)的發(fā)展,以傳輸控制協(xié)議/網(wǎng)際協(xié)議(Transmission Control Protocol/Internet Protocol,TCP/IP)為基礎(chǔ)的現(xiàn)代網(wǎng)絡(luò)技術(shù),已經(jīng)滲透到各種設(shè)備的控制和相互間的信息傳輸中,并逐步演變成為一種重要的基礎(chǔ)設(shè)施[1]。TCP/IP是一個(gè)由多種協(xié)議組成的協(xié)議族(Protocol Family)[2],它是一種開放的標(biāo)準(zhǔn),可以用來連接各種來自不同廠商的機(jī)器,因此,越來越多的網(wǎng)絡(luò)和網(wǎng)絡(luò)應(yīng)用程序采用了TCP/IP協(xié)議[3]。分層協(xié)議[4]簡化了系統(tǒng)之間的編程模型,降低了互聯(lián)成本,用戶可以根據(jù)業(yè)務(wù)需求選擇使用不同的協(xié)議。在實(shí)時(shí)數(shù)據(jù)傳輸、多媒體會(huì)議、數(shù)據(jù)拷貝等諸多方面,廣泛使用用戶數(shù)據(jù)報(bào)(User Datagram Protocol,UDP),在信息可靠傳輸要求較高的應(yīng)用中,普遍使用了傳輸控制協(xié)議(Transmission Control Protocol,TCP),我國的航天測控網(wǎng)在構(gòu)建中也采用了IP網(wǎng)絡(luò)技術(shù)[5]。
TCP和UDP協(xié)議都基于IP層,但是TCP協(xié)議提供了一種面向連接的、可靠的字節(jié)流服務(wù)[3-4,6-7],數(shù)據(jù)以字節(jié)流的形式傳遞給接收者,讀取TCP數(shù)據(jù)和讀取串口數(shù)據(jù)一樣,無法預(yù)知一次讀調(diào)用會(huì)返回多少字節(jié)[3]。因此,在使用TCP協(xié)議進(jìn)行信息傳輸?shù)倪^程中,經(jīng)常會(huì)產(chǎn)生粘包和拆包現(xiàn)象。
本文對TCP協(xié)議進(jìn)行了研究,分析了易產(chǎn)生網(wǎng)絡(luò)粘包和拆包的原因,并結(jié)合工作經(jīng)驗(yàn),設(shè)計(jì)了解決TCP粘包和拆包的方法。
我國航天測控系統(tǒng)經(jīng)過50多年的發(fā)展,具備了對載人飛船和各類不同軌道衛(wèi)星的發(fā)射、在軌運(yùn)行以及返回測控能力[8]。隨著技術(shù)的發(fā)展,我國的航天測控網(wǎng)正逐步向開放式、網(wǎng)絡(luò)化轉(zhuǎn)型。新一代測控網(wǎng)基于成熟的IP網(wǎng)絡(luò)技術(shù)進(jìn)行構(gòu)建,采用的是TCP/IP協(xié)議[9-10]。受通信帶寬、網(wǎng)絡(luò)時(shí)延以及協(xié)議特性的限制,一般從控制中心到測控站信息傳輸處理系統(tǒng)[9]之間的信息傳輸采用UDP協(xié)議,從測站信息傳輸處理系統(tǒng)到多功能數(shù)字基帶設(shè)備[11]的對航天器的指令信息,一般采用TCP協(xié)議。
空間交會(huì)對接[12]、衛(wèi)星編隊(duì)[13]等測控需求,催生了單臺(tái)設(shè)備在同一波束內(nèi)對多目標(biāo)進(jìn)行測控的技術(shù)發(fā)展。但是,由于存在多中心并行控制,以及TCP流傳輸?shù)奶攸c(diǎn),很容易導(dǎo)致TCP粘包。多目標(biāo)控制系統(tǒng)參見圖1。
圖1 多目標(biāo)控制系統(tǒng)模型示意圖Fig.1 Schematic diagram of multi-object control system model
3.1TCP編程模型
TCP是面向連接的協(xié)議,使用TCP的兩個(gè)應(yīng)用在彼此交換數(shù)據(jù)前必須先建立一個(gè)TCP連接[4],常采用的編程模型是客戶-服務(wù)器(Client-Server)模型[16-17],如圖2所示。
圖2 TCP編程模型Fig.2 TCP programming model
3.2TCP流交付模型
采用TCP協(xié)議進(jìn)行數(shù)據(jù)交換雙方之間好像被一個(gè)“管道”所連接,客戶發(fā)起對等通信,服務(wù)器無限等待接收客戶通信請求[2]。發(fā)送方寫入字節(jié)流,接收方讀取字節(jié)流[3,16]。流交付模型參見圖3。
圖3 流的交付示意圖Fig.3 Diagram of stream delivery
為了說明TCP粘包現(xiàn)象,我們假設(shè)在主機(jī)A和主機(jī)B的應(yīng)用程序之間建立一條TCP連接。另外,為簡化問題,假設(shè)主機(jī)A要發(fā)送兩條報(bào)文,并兩次調(diào)用send,每條報(bào)文調(diào)用一次,如圖4(a)所示。
圖4 報(bào)文發(fā)送及可能的封裝方式Fig.4 Message transmission and possible encapsulation
在主機(jī)A調(diào)用send時(shí),send通常只是把數(shù)據(jù)復(fù)制到主機(jī)A的TCP/IP棧中就返回了,需要立即發(fā)送多少數(shù)據(jù)最終由TCP依據(jù)發(fā)送窗口、擁塞窗口、路徑上的最大傳輸單元以及連接的輸出隊(duì)列中有多少數(shù)據(jù)決定[3]。在不考慮出錯(cuò)和EOF,并且假設(shè)應(yīng)用程序讀取了所有可讀的數(shù)據(jù),主機(jī)B讀取報(bào)文時(shí),會(huì)出現(xiàn)如圖4所示的4種情況。
(1)正常情況
第一次正常讀取了報(bào)文M1,第二次讀取了報(bào)文M2,如圖4(b)-(1)。
(2)雙包粘合
一次讀取了報(bào)文M1和報(bào)文M2粘合在一起的整包數(shù)據(jù),如圖4(b)-(2)。
(3)第一包部分?jǐn)?shù)據(jù)和第二包數(shù)據(jù)粘合
第一次讀取了報(bào)文M1的部分?jǐn)?shù)據(jù)M11,第二次讀取了報(bào)文M1報(bào)文剩余數(shù)據(jù)M12及報(bào)文M2全部,如圖4(b)-(3)。
(4)第一包和第二包部分?jǐn)?shù)據(jù)粘合。
第一次讀取了報(bào)文M1的所有數(shù)據(jù)以及報(bào)文M2的部分?jǐn)?shù)據(jù)M21,第二次讀取了報(bào)文M2剩余數(shù)據(jù)M22,如圖4(b)-(4)。
3.3TCP粘包的原因分析
對于圖4所示的現(xiàn)象,我們逐一進(jìn)行分析。
(1)正常情況
每個(gè)報(bào)文的發(fā)送、接收都很及時(shí),系統(tǒng)能夠像UDP一樣及時(shí)處理報(bào)文。
(2)雙包粘合
發(fā)送粘包或接收緩存區(qū)積壓,此時(shí)一次讀取了兩個(gè)完整的報(bào)文,需要考慮解包問題。
(3)第一包部分?jǐn)?shù)據(jù)和第二包數(shù)據(jù)粘合
讀取比發(fā)送快,第一次讀取取到了不完整的報(bào)文。
(4)第一包和第二包部分?jǐn)?shù)據(jù)粘合
發(fā)送粘包或接收緩存區(qū)積壓。
通過上述分析發(fā)現(xiàn),在不考慮最大報(bào)文段長度(Maximum Segment Size,MSS)分段以及最大傳輸單元(Maximum Transmission Unit,MTU)分片[4]的情況下,產(chǎn)生TCP網(wǎng)絡(luò)粘包和拆包的原因并不復(fù)雜,不外乎兩種情況[17],一是發(fā)送端進(jìn)行緩沖造成發(fā)送緩沖區(qū)粘包,二是接收方接收不及時(shí)造成緩沖區(qū)粘包和拆包。
盡管TCP網(wǎng)絡(luò)粘包和拆包的原因比較簡單,但是要解決粘包和拆包,需要從下列幾個(gè)方面去做工作:
(1)短連接方法——每次發(fā)數(shù)之前建立連接,數(shù)據(jù)發(fā)送完成后撤銷連接,這樣就不會(huì)形成粘包;
(2)發(fā)送端方法——發(fā)送端強(qiáng)制取消數(shù)據(jù)緩沖,接收端優(yōu)化、精簡接收進(jìn)/線程或網(wǎng)絡(luò)通信模型,提高報(bào)文接收效率;
(3)格式數(shù)據(jù)方法——采用有格式報(bào)文結(jié)構(gòu),接收端采用阻塞方法分段讀取數(shù)據(jù)或使用數(shù)據(jù)緩存+組包法實(shí)現(xiàn)數(shù)據(jù)還原。
4.1短連接方式
在每次需要發(fā)送報(bào)文時(shí),才與對方建立TCP連接,報(bào)文發(fā)送完成后即關(guān)閉連接。因?yàn)槊看沃话l(fā)送一個(gè)報(bào)文,所以不會(huì)出現(xiàn)粘包現(xiàn)象。這種方法僅僅適用于客戶端向服務(wù)器發(fā)送信息、服務(wù)器無反饋的場合。
4.2發(fā)送端方法
對于發(fā)送端引起的粘包,用戶可通過編程設(shè)置來避免,TCP提供了強(qiáng)制數(shù)據(jù)立即傳送的push操作指令,TCP收到該操作指令后,立即將本段數(shù)據(jù)發(fā)送出去,而不必等待發(fā)送緩沖區(qū)滿。
4.2.1Nagle算法
Nagle算法最早是由John Nagle在1984年提出的[3],它要求在一個(gè)TCP連接上最多只能有一個(gè)未被確認(rèn)的未完成的小分組,在該分組的確認(rèn)到達(dá)之前不能發(fā)送其他的小分組。Nagle算法的優(yōu)點(diǎn)是確認(rèn)到達(dá)得越快,數(shù)據(jù)也就發(fā)送得越快。而在希望減少微小分組數(shù)目的低速廣域網(wǎng)上,則會(huì)發(fā)送更少的分組[4]。這正是造成發(fā)送端數(shù)據(jù)粘包的原因。
4.2.2關(guān)閉Nagle算法
局域網(wǎng)內(nèi)一般不會(huì)出現(xiàn)擁塞,微小分組(tinygram)通常也不會(huì)引起麻煩[3],因此可以關(guān)閉局域網(wǎng)中的Nagle算法。Socket API提供了關(guān)閉Nagle算法的選項(xiàng),可以避免發(fā)送方引起的粘包。具體代碼如下:
……
DWORDdwErrorCode = 0;
BOOLbSet = TRUE;
dwErrorCode =setsockopt(m_hSocket,IPPROTO_TCP,TCP_NODELAY,(char*)&bSet,sizeof(BOOL));
if(dwErrorCode==SOCKET_ERROR)
{
//錯(cuò)誤處理
……
關(guān)鍵詞是文獻(xiàn)內(nèi)容的高度濃縮和精煉,其涌現(xiàn)的頻次越高,表明其表達(dá)的研究主題熱度越高,而高頻關(guān)鍵詞集中體現(xiàn)的是某研究領(lǐng)域的研究熱點(diǎn)和趨勢。此外,本部分主要分析指標(biāo)為關(guān)鍵詞頻次和中心度,中心度表示在網(wǎng)絡(luò)中節(jié)點(diǎn)的關(guān)鍵性作用,直接反映了對應(yīng)關(guān)鍵詞在整個(gè)研究網(wǎng)絡(luò)中媒介能力以及資源調(diào)控的支點(diǎn)。
}
……
4.3格式數(shù)據(jù)方法
格式數(shù)據(jù)方法是通信雙方約定信息格式,接收端的網(wǎng)絡(luò)讀取模型或數(shù)據(jù)處理模型根據(jù)數(shù)據(jù)邊界特征還原數(shù)據(jù)包的一種方法,包括分段讀取法和組包法。組包法是在數(shù)據(jù)邊界特征的基礎(chǔ)上,充分利用數(shù)據(jù)緩沖實(shí)現(xiàn)數(shù)據(jù)邊接收邊還原。它屬于有界數(shù)據(jù)方法的一種,設(shè)置數(shù)據(jù)結(jié)束符與其類似。為了說明下列問題,我們定義報(bào)文頭格式如下:
typedef struct tagFrameHead
{
DWORDm_dwTime;// 生成時(shí)間
DWORDm_dwSource;// 來源
DWORDm_dwSize;// 長度
}FRAMEHEAD。
4.3.1分段讀取法
分段讀取法是利用Socket應(yīng)用程序編程接口(Application Programming Interface,API)以同步讀取的方式,將報(bào)文按照結(jié)構(gòu)定義人為分兩次讀取的方法:
(1)第一次,僅僅讀取16個(gè)字節(jié)(報(bào)頭長度),獲取報(bào)頭中信息實(shí)際長度;
(2)第二次讀取長度為信息實(shí)際長度(報(bào)文信息內(nèi)容),通過這種手段來避免粘包。
這種方法實(shí)現(xiàn)簡單,分段讀取的代碼片段如下:
……
int nFHeadLen = sizeof(FRAMEHEAD);
int nRetLen = 0;
nRetLen = recv(m_hSocket,(char*)&m_cBuffRcv[0],nFHeadLen,0);
if(nRetLen <= 0)
{
……//連接斷開,重連或做退出處理
continue;
}
//接收到數(shù)據(jù)進(jìn)行相應(yīng)處理
if(nRetLen == nFHeadLen)
{
// 獲取信息字段長度
int nLen = *(UINT*)&m_cBuffRcv[12];
int nRet = 0;
// 繼續(xù)讀取數(shù)據(jù)信息字段內(nèi)容
nRet = recv(m_hSocket,(char*)&m_cBuffRcv[nFHeadLen],nLen,0);
if(nRet == *(UINT*)&m_cBuffRcv[12])
{
nRetLen += nLen;
}
}
// 全幀信息處理
……
4.3.2組包法
組包法也是由接收方控制的方法,該方法的主要思想是在接收預(yù)處理單元定義一個(gè)數(shù)據(jù)接收緩沖區(qū),一邊接收一邊判斷緩沖區(qū)數(shù)據(jù)是否滿足包頭大小,如果滿足包頭大小,則判斷緩沖區(qū)剩下數(shù)據(jù)是否滿足包體大小,如果滿足則提取數(shù)據(jù)進(jìn)行處理。它的原理和分段讀取法是一致的,但是組包法更加靈活,可以充分運(yùn)用各種網(wǎng)絡(luò)編程模型,特別是非阻塞異步I/O方式,能夠提高網(wǎng)絡(luò)通信的效率。組包法的編程模型和主要處理流程參見圖5。
圖5 組包法編程模型和主要處理流程Fig.5 Packet programming model and prime processing flow
5.1測試環(huán)境
在測試中,機(jī)器B為服務(wù)端,等待連接并接收數(shù)據(jù);機(jī)器A為客戶端,發(fā)起連接并發(fā)送數(shù)據(jù)。機(jī)器A、B具體配置參見表1。
表1 測試用計(jì)算機(jī)配置表Tab.1 Configuration of the test computer
5.2短連接測試
機(jī)器A在每次發(fā)送數(shù)據(jù)前,先連接到服務(wù)器(機(jī)器B),而后發(fā)送一包數(shù)據(jù),數(shù)據(jù)發(fā)送完畢即刻關(guān)閉連接,在這種情況下不會(huì)出現(xiàn)網(wǎng)絡(luò)粘包現(xiàn)象。但是這種方法只有在數(shù)據(jù)單向傳輸時(shí)具有可操作性,而且連接的瞬時(shí)建立不論對服務(wù)端還是客戶端程序的可靠性都是一種挑戰(zhàn)。特別是對實(shí)時(shí)控制系統(tǒng),瞬時(shí)連接引入了整個(gè)系統(tǒng)的不確定性。
5.3發(fā)送端方法測試
圖6是發(fā)送端禁用Nagle算法前后用WireShark工具軟件的抓包比對結(jié)果。雖然在關(guān)閉Nagle算法后進(jìn)行的實(shí)驗(yàn)中沒有出現(xiàn)粘包,但該方法只是解決了發(fā)端不粘包的問題,而當(dāng)發(fā)端發(fā)送頻率較高,或由于網(wǎng)絡(luò)突發(fā)使某個(gè)時(shí)間段數(shù)據(jù)包到達(dá)收端較快時(shí),就會(huì)出現(xiàn)收端來不及接收而導(dǎo)致的網(wǎng)絡(luò)粘包,因此該方法不能完全解決粘包問題。
(a)開啟Nagle算法時(shí)Wireshark抓包結(jié)果
(b)關(guān)閉Nagle算法時(shí)Wireshark抓包結(jié)果圖6 發(fā)送端禁用Nagle算法前后Wireshark抓包結(jié)果Fig.6 Wireshark capture results before and after Nagle algorithm is closed
5.4格式數(shù)據(jù)方法測試
不論發(fā)端是否禁止Nagle算法,也不論收端采用分段讀取法還是組包法,都能正確的還原數(shù)據(jù)包,沒有出現(xiàn)粘包現(xiàn)象。但是分段讀取法使得網(wǎng)絡(luò)接收和信息處理的耦合比較大,而采用組包法,網(wǎng)絡(luò)通信可以采用通用的模型,組包由數(shù)據(jù)預(yù)處理實(shí)現(xiàn),提高了軟件復(fù)用及處理效率。
本文對TCP協(xié)議的特點(diǎn)及編程模型進(jìn)行了分析,研究了在不考慮MSS分段和MTU分片情況下產(chǎn)生網(wǎng)絡(luò)粘包、拆包的原因,并給出了針對性的解決方法。從測試情況可以看出:
(1)短連接雖然也可以解決粘包問題,瞬時(shí)的連接對雙方軟件的可靠性要求比較高,不建議使用;
(2)關(guān)閉Nagle算法只能避免發(fā)送方引起的粘包,不能解決全系統(tǒng)的問題,但是在局域網(wǎng)內(nèi),可以在發(fā)端關(guān)閉Nagle算法以提高信息發(fā)送的實(shí)時(shí)性;
(3)采用格式數(shù)據(jù)的方法需要收端進(jìn)行分段讀取或組包還原,無論哪種方法,都可以有效解決網(wǎng)絡(luò)粘包問題,從軟件結(jié)構(gòu)上講,筆者更傾向于組包法。
另外,由于TCP協(xié)議本身的局限,在實(shí)時(shí)控制系統(tǒng)中使用TCP協(xié)議時(shí),用戶需要進(jìn)行?;钐讲椋员WC需要發(fā)送數(shù)據(jù)時(shí)連接可用。
[1] 竹下隆史,村山公保,荒井透,等.圖解TCP/IP[M].烏尼日其其格,譯. 5版.北京:人民郵電出版社,2013.
[2] 王雷. TCP/IP網(wǎng)絡(luò)編程技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2012.
[3] SNADER J C. TCP/IP高效編程——改善網(wǎng)絡(luò)程序的44個(gè)技巧[M].陳涓,趙振平,譯.北京:人民郵電出版社,2011.
[4] STEVENS W R. TCP/IP協(xié)議詳解卷1:協(xié)議[M].范建華,胥光輝,張濤,等,譯.北京:機(jī)械工業(yè)出版社,2014.
[5] 李衛(wèi)平,黨琦,陳剛. 自適應(yīng)雙平面信息無縫傳輸實(shí)現(xiàn)方法研究[J].飛行器測控學(xué)報(bào),2011,30(2):33-36. LI Weiping,DANG Qi,CHEN Gang. Adaptive method of double plane information non-loss transmission[J].Journal of Spacecraft TT&C Technology,2011,30(2):33-36.(in Chinese)
[6] COMER D E. 用TCP/IP進(jìn)行網(wǎng)際互連第1卷:原理、協(xié)議與結(jié)構(gòu)[M].林瑤,蔣慧,杜蔚軒,等,譯. 4版.北京:電子工業(yè)出版社,2001.
[7] 中嶋謙互. 網(wǎng)絡(luò)游戲核心技術(shù)與實(shí)戰(zhàn)[M].毛姝文,田劍,譯. 北京:人民郵電出版社,2011.
[8] 于志堅(jiān).我國航天測控系統(tǒng)的現(xiàn)狀與發(fā)展[J].中國工程科學(xué),2006,8(10):42-46. YU Zhijian. Status quo and development of spaceflight TT&C systems[J].Engineering Science,2006,8(10):42-46.(in Chinese)
[9] 黨琦,王崇暉,董廣然,等. 一種航天測控站數(shù)據(jù)傳輸處理系統(tǒng)構(gòu)件化實(shí)現(xiàn)[J].電訊技術(shù),2015,55(10):1141-1145. DANG Qi,WANG Chonghui,DONG Guangran,et al.A component-based realization on the data transmission & processing system in aerospace TT&C stations[J].Telecommunication Engineering,2015,55(10):1141-1145.(in Chinese)
[10] 王瑋,和應(yīng)民. 測控網(wǎng)中TCP協(xié)議的研究與仿真[J].應(yīng)用科技,2008,35(4):48-52. WANG Wei,HE Yingmin. Research and simulation of TCP in the space TT&C net[J].Applied Science and Technology,2008,35(4):48-52.(in Chinese)
[11] 劉軍,王軼,馬明,等. 典型測控系統(tǒng)自動(dòng)化運(yùn)行的設(shè)計(jì)與實(shí)現(xiàn)[J].電訊技術(shù),2006,46(5):197-199. LIU Jun,WANG Yi,MA Ming,et al.Automatically running a representative TT&C system:design and realization[J].Telecommunication Engineering,2006,46(5):197-199.(in Chinese)
[12] 王忠貴. 交會(huì)對接任務(wù)天基雙目標(biāo)測控通信設(shè)計(jì)[J].飛行器測控學(xué)報(bào),2012,31(3):1-5. WANG Zhonggui. Design of a space-based dual-object TT&C system for China’s first rendezvous and docking mission[J].Journal of Spacecraft TT&C Technology,2012,31(3):1-5.(in Chinese)
[13] 劉建平,劉帆,谷小松,等. 面向編隊(duì)衛(wèi)星群的單波束多目標(biāo)測控資源調(diào)度方法[J].宇航動(dòng)力學(xué)學(xué)報(bào),2011,1(2):87-92. LIU Jianping,LIU Fan,GU Xiaosong,et al.A scheduling method of single-beam multi-target mechanical scanning TT&C resources for formation satellites cluster[J].Journal of Astrodynamics,2011,1(2):87-92.(in Chinese)
[14] 宋敬彬,孫海濱. Linux網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社,2010.
[15] TANENBAUM A S,WETHERALL D J. 計(jì)算機(jī)網(wǎng)絡(luò)[M].嚴(yán)偉,潘愛民,譯. 5版. 北京:清華大學(xué)出版社,2012.
[16] FOROUZAN B A. TCP/IP協(xié)議族[M].王海,張娟,朱曉陽,等,譯. 4版.北京:清華大學(xué)出版社,2011.
[17] 李林峰. Netty權(quán)威指南[M].北京:電子工業(yè)出版社,2014.
MethodsforSolvingTCPStickyPacketProbleminMulti-objectControlSystems
DANG Qi1,2,GOU Rujun1,3,DONG Guangran1,2,JI Maopeng1,2
(1.Xi′an Satellite Control Center,Xi′an 710043,China; 2.Key Laboratory for Fault Diagnosis & Maintenance of Spacecraft in Orbit,Xi′an 710043,China; 3.State Key Laboratory of Astronautic Dynamics,Xi′an 710043,China)
It′s easy to cause the problem of network data sticking when the tracking,telemetry and command(TT&C) equipment works in multi-channel and parallel state by using transmission control protocol/Internet protocol(TCP/IP) as the basis protocol.According to the analysis of TCP features,through discussion of the TCP program model and stream delivery model,the network data features have being researched when TCP data stream stick happens,and the cause of data stream stick is analyzed. Three methods for solving the problem are given by short links,transmitter side process and format data packet. The test results have verified the adaptability of three methods and the effectiveness of rebuilding TCP network data packet by using the format data method. The research provides the reference for the software development based on TCP.
multi-object control system;TCP data stream;sticky packet;network programming
date:2016-12-13;Revised date:2017-04-11
10.3969/j.issn.1001-893x.2017.09.018
黨琦,茍茹君,董廣然,等.多目標(biāo)控制系統(tǒng)中TCP粘包問題的解決方法[J].電訊技術(shù),2017,57(9):1082-1087.[DANG Qi,GOU Rujun,DONG Guangran,et al.Methods for solving TCP sticky packet problem in multi-object control systems[J].Telecommunication Engineering,2017,57(9):1082-1087.]
TP274;V55
:A
:1001-893X(2017)09-1082-06
黨琦(1972—),男,陜西富平人,1994年于西北大學(xué)獲學(xué)士學(xué)位,2006年于西北工業(yè)大學(xué)獲碩士學(xué)位,現(xiàn)為高級工程師,主要從事計(jì)算機(jī)網(wǎng)絡(luò)、應(yīng)用軟件技術(shù)等方面的研究;
Email:dangqifuping@163.com
茍茹君(1971—),女,陜西西安人,高級工程師,主要從事遙測信號處理及應(yīng)用軟件技術(shù)研究;
董廣然(1976—),男,河北唐海人,工程師,主要從事計(jì)算機(jī)應(yīng)用軟件技術(shù)研究;
季茂鵬(1983—),男,山東泰安人,工程師,主要從事計(jì)算機(jī)應(yīng)用軟件技術(shù)研究。
2016-12-13;
:2017-04-11
**通信作者:dangqifuping@163.com Corresponding author:dangqifuping@163.com