前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的tcp協(xié)議主題范文,僅供參考,歡迎閱讀并收藏。
關(guān)鍵詞:tcp協(xié)議;網(wǎng)絡(luò)安全;協(xié)議攻擊;安全防御
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào):1009-3044(2007)15-30682-01
Security Problems Study in the TCP/IP Protocol
LI Bei
(The Information Management Department,University of Qinghai Finance and Economics College, Xining 810001, China)
Abstract:The TCP/IP protocol use very extensive now, but it oneself also have the some the blemish on the safety.I described every kind of each kind aims at the attack of these blemishses, including the preface row number attack, SYN Flood attack.Put forward the defense method that some to these attackstone.
Key words:TCP protocol;Network security;Protocol attack;Protocol security.
1 引言
TCP協(xié)議現(xiàn)在用得非常廣泛,但除了對(duì)它不正確使用造成不安全因素外,它本身也有一些安全上的缺陷。一些缺陷
是由于主機(jī)使用IP源地址作為認(rèn)證機(jī)制引起的;Berkeley 的r系列調(diào)用就是一個(gè)明顯的例子。其它的一些缺陷是由于網(wǎng)絡(luò)控制機(jī)制,特別是路由協(xié)議,缺少認(rèn)證機(jī)制引起的。
描述這些攻擊的前提是攻擊者或多或少控制了某些連在互聯(lián)網(wǎng)上的機(jī)器。被控制的機(jī)器有的是因?yàn)楸旧碛新┒?,有的是自身沒(méi)有保護(hù)機(jī)制的個(gè)人電腦。也有可能攻擊者是一個(gè)系統(tǒng)管理員。
我不討論協(xié)議具體應(yīng)用上的漏洞,比如被互聯(lián)網(wǎng)“蠕蟲(chóng)”利用的漏洞。討論的是協(xié)議本身的問(wèn)題。只要小心地使用這些協(xié)議,有些問(wèn)題是可以避免的;我也不討論經(jīng)典的網(wǎng)絡(luò)攻擊,比如切斷物理線路,篡改或插入消息,而主要討論的是僅僅由于協(xié)議本身引起的問(wèn)題。
本文所討論的協(xié)議是Berkeley(早期的TCP/IP協(xié)議)協(xié)議,因?yàn)樗鼘?shí)際上已成為大部分廠商的標(biāo)準(zhǔn),而不僅僅是UNIX系統(tǒng)。
2 TCP序列號(hào)預(yù)測(cè)攻擊
TCP序列號(hào)預(yù)測(cè)攻擊最早是1985年由Robort.Morris對(duì)這一安全漏洞進(jìn)行闡述的。他使用TCP序列號(hào)預(yù)測(cè),即使是沒(méi)有從服務(wù)器得到任何響應(yīng), 來(lái)產(chǎn)生一個(gè)TCP包序列。這使得他能欺騙在本地網(wǎng)絡(luò)上的主機(jī)。
2.1 攻擊方法
TCP協(xié)議有一個(gè)非常令人著迷的漏洞,簡(jiǎn)單的說(shuō),就是通過(guò)預(yù)測(cè)初始序列號(hào)來(lái)偽造TCP包,并且不需要得到回應(yīng)。這樣就可以使攻擊者偽裝成一臺(tái)和服務(wù)器在同一個(gè)局域網(wǎng)上的一臺(tái)可信任的機(jī)器。
通常建立TCP連接需要三次握手??蛻魴C(jī)送一個(gè)初始序列號(hào)ISNc,服務(wù)器應(yīng)答它并送出它自己的序列號(hào)ISNs,客戶機(jī)再發(fā)出一個(gè)應(yīng)答包。這三個(gè)數(shù)據(jù)包發(fā)送以后,就可以傳輸數(shù)據(jù)了。這個(gè)
過(guò)程可以用下圖來(lái)表示:
C->S:SYN(ISNc)
S->C:SYN(ISNs),ACK(ISNc)
C->S:ACK(ISNs)
C->S:data
and/or
S->C:data
這就是說(shuō),要使一個(gè)連接建立起來(lái),C必須知道ISNs,這個(gè)數(shù)多少有一些隨機(jī)性。
假設(shè)入侵者X有一種方法可以預(yù)測(cè)ISNs。在這種情況下,他可以通過(guò)以下的步驟來(lái)模仿可信任的主機(jī)T:
X->S:SYN(ISNx),SRC=T
S->T:SYN(ISNs),ACK(ISNx)
X->S:ACK(ISNs),SRC=T
X->S:ACK(ISNs),SRC=T,nasty-data
即使S->T的數(shù)據(jù)包不經(jīng)過(guò)X,X也能知道它的內(nèi)容,因此能發(fā)送數(shù)據(jù)。如果X在一個(gè)能夠執(zhí)行命令的連接上實(shí)行這種攻擊(例如,Berkeley rsh 服務(wù)),他就可以運(yùn)行一些惡意的命令。
那么怎樣預(yù)測(cè)隨機(jī)的ISN呢?在Berkeley系統(tǒng)中,初始序列號(hào)變量是以每秒固定的數(shù)目遞增的,而每次連接的序列號(hào)就是這個(gè)變量的一半。因此,如果有人通過(guò)合法的連接觀察ISNs,他就有很大的機(jī)會(huì)通過(guò)計(jì)算得到下一次連接的ISNs。應(yīng)該指出的是服務(wù)器的應(yīng)答消息
S->T:SYN(ISNs),ACK(ISNx)
并沒(méi)有消除這種攻擊;雖然真正的T主機(jī)將接收到它,并且會(huì)重設(shè)連接。這并不是一個(gè)嚴(yán)重的障礙,因?yàn)槲覀兛梢酝ㄟ^(guò)一些拒絕服務(wù)的攻擊使T主機(jī)暫時(shí)失效,也可以在T主機(jī)關(guān)機(jī)或重起的時(shí)候攻擊。
還有一種通過(guò)netstat服務(wù)對(duì)TCP序列號(hào)進(jìn)行的攻擊。在這種攻擊中,入侵者模仿一臺(tái)關(guān)閉的主機(jī)。如果在目標(biāo)機(jī)上有netstat服務(wù),它就會(huì)提供另一個(gè)端口必要的序列號(hào)信息;這樣就根本不需要猜測(cè)了。
2.2 防御
很明顯,這種攻擊的關(guān)鍵是Berkeley系統(tǒng)中初始序列號(hào)變量變化方式太簡(jiǎn)單了。TCP標(biāo)準(zhǔn)要求這個(gè)變量必須以每秒鐘將近250,000的速度增長(zhǎng);Berkerey系統(tǒng)則使用了一個(gè)比它慢得多的速度。然而關(guān)鍵的因素是間隔的大小而不是平均速度。從4.2BSD系統(tǒng)的每秒增加128到4.3BSD的每秒增加125,000的改變是沒(méi)有意義的。
下面讓我們來(lái)看看以250,000的頻率運(yùn)行是否有用。為了簡(jiǎn)單起見(jiàn),我忽略了其它連接產(chǎn)生的問(wèn)題,僅僅考慮本計(jì)數(shù)器固定速度的改變:
為了知道當(dāng)前的序列號(hào),必須發(fā)送一個(gè)SYN包,并接收它的回應(yīng),如下:
X->S:SYN(ISNx)
(上接第682頁(yè))
S->X:SYN(ISNs),ACK(ISNx) (1)
第一個(gè)使服務(wù)器產(chǎn)生下一序列號(hào)的偽造的數(shù)據(jù)包,可以緊跟在服務(wù)器對(duì)探測(cè)包的回應(yīng)后送出:
X->S:SYN(ISNx),SRC=T (2)
序列號(hào)ISNs在應(yīng)答中使用
S->T:SYN(ISNs),ACK(ISNx)
它是由數(shù)據(jù)包(1)產(chǎn)生到服務(wù)器接收到數(shù)據(jù)包(1)之間的時(shí)間唯一確定的。但是這個(gè)時(shí)間是由X到S的來(lái)回時(shí)間確定的。因此如果攻擊者能夠測(cè)量或預(yù)測(cè)到這個(gè)時(shí)間,即使使用一個(gè)能精確的4μ秒的時(shí)鐘也不能阻止這種攻擊。
對(duì)來(lái)回時(shí)間的測(cè)量能精確到什么程度呢?如果假設(shè)網(wǎng)絡(luò)很穩(wěn)定,我們可以精確到10毫秒左右。很明顯,互聯(lián)網(wǎng)不可能長(zhǎng)期這么穩(wěn)定,但是卻有可能在一個(gè)較短的時(shí)間內(nèi)穩(wěn)定。因此我們有2500個(gè)ISNs的可能值??紤]到重新測(cè)量來(lái)回時(shí)間所需的時(shí)間,我們假設(shè)每次嘗試需要化5秒,那么一個(gè)攻擊者很可能在7500秒內(nèi)獲得成功。條件更好的網(wǎng)絡(luò)或更精確的測(cè)量,能夠提高成功的可能性。因此,僅僅是按TCP協(xié)議標(biāo)準(zhǔn)是不行的。
在這里,我們默認(rèn)的假設(shè)是目標(biāo)機(jī)上不運(yùn)行任何進(jìn)程。實(shí)際上,當(dāng)新的請(qǐng)求到達(dá)時(shí),是會(huì)運(yùn)行一些進(jìn)程的。在一個(gè)6MIPS的機(jī)器上,一個(gè)時(shí)鐘周期-4μ秒-大約可執(zhí)行25條指令。高優(yōu)先級(jí)的中斷,TCB分配順序的不同,都對(duì)下一個(gè)序列號(hào)有相當(dāng)大影響。這種隨機(jī)的效果是被認(rèn)為是主機(jī)的優(yōu)點(diǎn)。必須注意的是,越快的主機(jī)越容易攻擊,這是由于它執(zhí)行指令的時(shí)間會(huì)減少,因此對(duì)初始序列號(hào)增加的影響也會(huì)減少。當(dāng)然,CPU的速度增加是很快的。
另一個(gè)對(duì)付序列號(hào)攻擊的方法是:隨機(jī)的增加初始序列號(hào)變量。必須要全部位都是隨機(jī)的,如果假設(shè)只有低8位是隨機(jī)的,那么增加的間隔也是容易猜測(cè)的。我們應(yīng)該結(jié)合使用好的間隔增量和一個(gè)小的隨機(jī)數(shù)發(fā)生器或使用一個(gè)32位隨機(jī)數(shù)發(fā)生器。注意,有很多假的隨機(jī)數(shù)產(chǎn)生器是很容易倒轉(zhuǎn)的。實(shí)際上,假設(shè)大部分這種產(chǎn)生器是通過(guò)它的輸出的反饋來(lái)工作的,入侵者就可以通過(guò)簡(jiǎn)單的計(jì)算來(lái)得到下一個(gè)隨機(jī)數(shù)。有些技術(shù)使用32位發(fā)生器,但僅僅使用它的16位,用窮舉攻擊法就可以得到它的結(jié)果。我們必須最少把隨機(jī)數(shù)的16用在每一次增加中,以使網(wǎng)絡(luò)探測(cè)失效,但是用于防御搜索結(jié)果的位就太少了。要通過(guò)更多的研究和仿真來(lái)決定合適的參數(shù)。
與其用這么大的數(shù),不如對(duì)ISNs加密。數(shù)據(jù)加密標(biāo)準(zhǔn)算法(DES)加上一個(gè)簡(jiǎn)單的計(jì)數(shù)器是一個(gè)很好的選擇。也可以在輸出反饋模式使用DES而不要計(jì)數(shù)器。不管用哪一種方法,都必須小心的選擇密匙。在當(dāng)今使用開(kāi)機(jī)時(shí)間是不行的,入侵者能夠取得足夠多的關(guān)于開(kāi)機(jī)時(shí)間的信息,從而實(shí)現(xiàn)窮舉攻擊。但是如果開(kāi)機(jī)時(shí)間用密匙加密后,隨機(jī)數(shù)產(chǎn)生器就很難破解了。初始序列號(hào)產(chǎn)生器的性能是沒(méi)問(wèn)題的。每一次連接只需要產(chǎn)生一個(gè)初始序列號(hào),即使使用軟件來(lái)實(shí)DES加密也足夠了。
還有一些防御措施包括做好日志和報(bào)警系統(tǒng)。測(cè)量來(lái)回時(shí)間通常是用ICMP報(bào)文來(lái)實(shí)現(xiàn)的,我們可以記錄超常的ping請(qǐng)求。也可以記錄短時(shí)間的、不完全的tcp連接請(qǐng)求。同樣,偽裝一臺(tái)活動(dòng)的主機(jī)會(huì)產(chǎn)生異常的RST包,這些都應(yīng)該被記錄下來(lái)。
3 SYN Floods攻擊
3.1 什么是SYN Floods攻擊
SYN Floods攻擊是以TCP/IP協(xié)議的三次握手為基礎(chǔ)的,所以要了解SYN Floods攻擊,必須了解TCP/IP協(xié)議的三次握手,這在前面已經(jīng)介紹過(guò)了。
SYN Floods攻擊就是通過(guò)一些工具如SYN Flooders或通過(guò)raw socket編程向目標(biāo)機(jī)發(fā)送一些源地址不存在的SYN數(shù)據(jù)包,目標(biāo)機(jī)收到這些數(shù)據(jù)包后就會(huì)發(fā)出應(yīng)答并等待回應(yīng),然而由于源地址的主機(jī)不存在,所以目標(biāo)機(jī)因得不到回應(yīng)而一直等待,直到超時(shí)。如果有人向目標(biāo)機(jī)發(fā)送大量這樣的數(shù)據(jù)包,目標(biāo)機(jī)就會(huì)因?yàn)榻邮者B接的隊(duì)列填滿而不再接受連接請(qǐng)求,這樣目標(biāo)機(jī)就暫時(shí)失效了,因此SYN Floods攻擊是一種拒絕服務(wù)的攻擊。大部分這種攻擊只是使服務(wù)器不再接受連接而不影響已經(jīng)建立起來(lái)的連接;但在有些情況下,會(huì)使系統(tǒng)內(nèi)存不足而導(dǎo)致系統(tǒng)崩潰。這種攻擊比較難以預(yù)防,因?yàn)楫?dāng)三次握手的第一個(gè)SYN數(shù)據(jù)包到來(lái)的時(shí)候,沒(méi)有辦法知道它的源地址是真的還是偽造的。
3.2 解決方法
有兩種方法可以緩解或禁止這種攻擊。第一種是SYN Storm Modifications,另一種是SYN Cookies。
SYN Storm Modifications(也叫Adaptive Time-Outs):
這種方法是通過(guò)稍微修改算法以使TCP連接請(qǐng)求隊(duì)列中能容納更多的TCP連接請(qǐng)求(可以有成千上萬(wàn)個(gè)連接請(qǐng)求)。通過(guò)修改算法,就能夠緩解或阻止這種攻擊。這種修改已被應(yīng)用在Unix 環(huán)境中(SunOS,FreeBSD,OpenBSD 和 NetBSD),不過(guò)就我所知,微軟還沒(méi)有采用這種技術(shù)。
SYN Cookies:
這種技術(shù)通過(guò)在TCP包頭中的特定字段抽出一個(gè)秘密數(shù)字,SYN Floods 攻擊幾乎能被防止。這個(gè)抽出的數(shù)字必須包含包頭其它部分的索引。把這個(gè)信息用不可逆算法加密,并把它作為應(yīng)答包頭的一部分。當(dāng)有一個(gè)ACK包到達(dá)時(shí),把包頭中的加密字與服務(wù)器上的作比較,如果相同就建立連接,不同就把這個(gè)包丟棄,并且三次握手沒(méi)有完成。用這種方法,服務(wù)器不需要等,因此SYN Floods攻擊被禁止了。
4 總結(jié)
以上介紹了由于TCP協(xié)議本身缺陷所引起的兩種攻擊及其防御對(duì)策,在這兩種防御對(duì)策中,都用到了加密技術(shù)。加密技術(shù)對(duì)網(wǎng)絡(luò)安全是非常重要的,因?yàn)橄到y(tǒng)的漏洞是不可避免的,因此沒(méi)有絕對(duì)安全的系統(tǒng)。而加密技術(shù)可以使你的系統(tǒng)在被入侵后,把損失減到最小。從本文可以也可以看出,加密技術(shù)對(duì)預(yù)防攻擊也是很有效的。
參考文獻(xiàn):
[1] HILL G R,et al.Ptransport network layer based on optical network elements[J].LightwaveTechnol.,1998,11:887-879.
[2] D.S.Siyan,P>Rybaczyk,Ware 實(shí)現(xiàn)網(wǎng)際互聯(lián)[M].清華大學(xué)出版社,1998.
關(guān)鍵詞:Socket通信機(jī)制 TCP協(xié)議 開(kāi)發(fā)原理
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-3973(2012)008-081-02
1 TCP,SOCKET簡(jiǎn)介
TCP:Transmission Control Protocol 傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議,由IETF的RFC 793說(shuō)明(specified)。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能。
Socket:即“套接字”,描述IP地址和端口,是通信鏈的句柄。在Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件,提供幾種服務(wù)。每種服務(wù)都會(huì)打開(kāi)一個(gè)Socket,并綁定到一個(gè)端口上,不同的端口對(duì)應(yīng)于不同的服務(wù)。
2 基于TCP協(xié)議程序的簡(jiǎn)單樣例
了解客戶端,服務(wù)器,開(kāi)發(fā)原理,開(kāi)發(fā)流程。
客戶端:客戶端(Client)或稱為用戶端,是指與服務(wù)器相對(duì)應(yīng),為客戶提供本地服務(wù)的程序。除了一些只在本地運(yùn)行的應(yīng)用程序之外,一般安裝在普通的客戶機(jī)上,需要與服務(wù)端互相配合運(yùn)行。
服務(wù)器:服務(wù)器指一個(gè)管理資源并為用戶提供服務(wù)的計(jì)算機(jī)軟件,通常分為文件服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用程序服務(wù)器。運(yùn)行以上軟件的計(jì)算機(jī)或計(jì)算機(jī)系統(tǒng)也被稱為服務(wù)器。
開(kāi)發(fā)原理:
服務(wù)器,使用ServerSocket,監(jiān)聽(tīng)指定的端口,端口可以隨意指定(建議使用大于1024的端口),等待客戶端得連接,客戶端連接后,產(chǎn)生會(huì)話;在會(huì)話完成之后,關(guān)閉連接。
客戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,就打開(kāi)會(huì)話;會(huì)話完成后,關(guān)閉Socket。客戶端不用指定打開(kāi)端口,經(jīng)常是臨時(shí)的分配一個(gè)1024以上的端口。
基于TCP的SOCKET流程如下:
(1)客戶端的編程流程:
打開(kāi)Socket,創(chuàng)建一個(gè)SOCKET;
為套接字建立一個(gè)輸入inputstream,和輸出流outputstream;
根據(jù)服務(wù)器協(xié)議(這里是TCP協(xié)議)從套接字讀入或向套接字寫(xiě)入;
關(guān)閉SOCKET:清除套接字和輸入/輸出流;
(2)服務(wù)器端的編程流程:
打開(kāi)Server Socket,新建一個(gè)服務(wù)器型套接字和一個(gè)普通套接字,服務(wù)器型套接字在指定端口為客戶端請(qǐng)求的Socket服務(wù);
使用ServerSocket類的accept()方法,使套接字處于監(jiān)聽(tīng)狀態(tài),并且把監(jiān)聽(tīng)結(jié)果返回給普通套接字;
為該普通套接字創(chuàng)建輸入和輸出流;
從輸入和輸出流中讀入或?qū)懭胱止?jié)流,進(jìn)行相應(yīng)的處理,并將結(jié)果返回給客戶端(這里的例子是判斷是奇數(shù)還是偶數(shù))。
樣例詳細(xì)說(shuō)明:
客戶端發(fā)送一個(gè)數(shù)字,交給服務(wù)器判斷是偶數(shù)還是奇數(shù),將結(jié)果返回給客戶端。
主要代碼
客戶端主要函數(shù)
Init()初始化socket,獲取IutputStream以及OutputStream;
private static void init(){
try
{
socket = new Socket(HOST,PORT);
is = socket.getInputStream();
os = socket.getOutputStream();
}
catch (Exception e){...}
}
Send()函數(shù),向服務(wù)器發(fā)送數(shù)據(jù)
private static void send(byte[ ] data){
try
{
os.write(data);
}
catch(Exception e){...}
}
Receive()函數(shù),獲取服務(wù)器返回的信息
private static byte[ ] receive(){
byte[ ] b = new byte[1024];
try
{
int n = is.read(b);
byte[ ] data = new byte[n];
System.arraycopy(b, 0, data, 0, n);
return data;
}
catch (Exception e){...}
return null;
}
Close()函數(shù),關(guān)閉socket連接
private static void close(){
try{
is.close();
os.close();
socket.close();
}catch(Exception e){...}
}
服務(wù)器主要函數(shù):
Init(),send(),receive(),close()函數(shù)同客戶端
Logic()函數(shù),處理收到的數(shù)字,判斷奇偶
private Boolean logic(byte[ ] data)
{
String s=new String(data);
System.out.println("logic");
int t=Integer.valueOf(s);
if(t%2==1)
return true;
return false;
}
調(diào)用流程
服務(wù)器init()->客戶端init()->客戶端send()->服務(wù)器receive()->服務(wù)器logic()->服務(wù)器send()->客戶端receive().
參考文獻(xiàn):
目前最完成,最被大眾接受的通信協(xié)議標(biāo)準(zhǔn)就是TCP/IP協(xié)議。它的存在能使不相同的硬件結(jié)構(gòu),操作系統(tǒng)的計(jì)算機(jī)互相通信。在20世紀(jì)60年代末,美國(guó)政府出資近資助了一個(gè)分組(包)交換網(wǎng)絡(luò)研究項(xiàng)目ARPAnet,這就是TCP/IP的最初樣貌。最初ARPAnet使用的是租用的以點(diǎn)對(duì)點(diǎn)為主的通信線路,在后面當(dāng)通信網(wǎng)和衛(wèi)星通信系統(tǒng)發(fā)展起來(lái)之后,它最初開(kāi)發(fā)的網(wǎng)絡(luò)協(xié)議在通信可靠性較差的通信子網(wǎng)絡(luò)中產(chǎn)生了很多問(wèn)題,為了解決這些問(wèn)題,TCP/IP協(xié)議就應(yīng)運(yùn)而生。作為一個(gè)開(kāi)放的協(xié)議,有很多不同的廠家生產(chǎn)了很多型號(hào)的計(jì)算機(jī),他們各自有完全不同的操作系統(tǒng),但是在TCP/IP協(xié)議組件下,他們能進(jìn)行通信。在如今的社會(huì),TCP/IP已經(jīng)成為一個(gè)由成千上萬(wàn)的計(jì)算機(jī)和其使用者組成的全球化網(wǎng)絡(luò),此時(shí)的ARPAnet也就順理成章的變成了Internet。TCP/IP是Internet的基礎(chǔ)。TCP/IP協(xié)議是以套件的形式推出的,在這個(gè)套件中包括有一組互相補(bǔ)充、互相配合的協(xié)議。在TCP/IP協(xié)議族中就包含有IP(互聯(lián)網(wǎng)協(xié)議)、TCP(傳輸控制協(xié)議)和其他協(xié)議,在網(wǎng)絡(luò)通訊中,只有這些協(xié)議相互配合,才能實(shí)現(xiàn)網(wǎng)絡(luò)上的信息傳輸。IP和TCP的組合不僅僅只是表示兩個(gè)協(xié)議,還指整個(gè)協(xié)議套件,TCP和IP只是作為其中最主要的兩個(gè)協(xié)議,讀者應(yīng)該更好省核此術(shù)語(yǔ)的真正含義。TCP/IP協(xié)議如果在嚴(yán)格上來(lái)說(shuō)只是人們習(xí)慣的說(shuō)法,更為專業(yè)的說(shuō)法應(yīng)該稱其為Internet協(xié)議。同時(shí)在國(guó)際上,TCP/IP協(xié)議也不是ITU-T或OSI的標(biāo)準(zhǔn),但是它作為一種事實(shí)的標(biāo)準(zhǔn)被執(zhí)行著,并且完全獨(dú)立于任何硬件或者軟件廠商,可以運(yùn)行在不同體系的計(jì)算機(jī)上。它采用通用的尋址方案,通過(guò)尋址的方法,一個(gè)系統(tǒng)能訪問(wèn)到任何其他系統(tǒng),就算在Internet這樣龐大的全球性網(wǎng)絡(luò)內(nèi),尋址的運(yùn)行也可以說(shuō)是游刃有余。不管是局域網(wǎng),還是廣域網(wǎng),TCP/IP都是其中的最大協(xié)議最廣的使用協(xié)議。
二管理TCP/IP的組織機(jī)構(gòu)
Internet因?yàn)槠溟_(kāi)放性,所以不受任何政府部門(mén)或者組織所擁有和控制,因此沒(méi)有統(tǒng)一的管理機(jī)構(gòu),但是還有非營(yíng)利機(jī)構(gòu)管理其標(biāo)準(zhǔn)化過(guò)程。這些機(jī)構(gòu)承擔(dān)Internet的管理職責(zé),建立和完善TCP/IP和相關(guān)協(xié)議標(biāo)準(zhǔn)。與TCP/IP協(xié)議相關(guān)的組織機(jī)構(gòu)簡(jiǎn)介如下:
1ISOCISOC為Internet的國(guó)際化提供支持、并且是一個(gè)非營(yíng)利性的組織,同時(shí)也作為上級(jí)組織管理所有Internet委員會(huì)及任務(wù)組。
2IABIAB是ISOC的技術(shù)顧問(wèn),主要負(fù)責(zé)處理Internet技術(shù),協(xié)議和研究。
3IETF與IESGIETF制定草案,提出建議,維護(hù)Internet標(biāo)準(zhǔn)都是其負(fù)責(zé)的。IESG在Internet制定標(biāo)準(zhǔn)以及IETF的各項(xiàng)活動(dòng)中負(fù)責(zé)。
4IRTF與IRSGIRTF,在Internet發(fā)展中所遇到的技術(shù)問(wèn)題,并且處理與TCP/IP相關(guān)的協(xié)議和一般體系結(jié)構(gòu)研究活動(dòng)。IRSG則是作為IRTF的指導(dǎo)小組,指導(dǎo)其工作。
關(guān)鍵詞 計(jì)算機(jī)網(wǎng)絡(luò)教學(xué);TCP協(xié)議;NS2;確認(rèn)機(jī)制;擁塞控制
中圖分類號(hào):TP393.01 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-489X(2012)03-0013-03
Research on Application of NS2 in TCP Protocol Teaching//Wang Xiaofeng, Mao Li
Abstract TCP is one of the most important protocols of computer networks, but as its implementation mechanisms are complex, the TCP teaching has become a difficult point in computer network teaching. The TCP teaching demonstration based on NS2 is presented, which can analyze and demonstrate the TCP protocol’s key implementation mechanisms, such as connection establishment, acknowledgement scheme and congestion control etc., and thus can improve teaching effectiveness.
Key words computer network teaching; TCP protocol; NS2; acknowledgement scheme; congestion control
Author’s address School of Internet of Things Engineering, Jiangnan University, Wuxi, Jiangsu, China 214122
1 引言
Internet作為20世紀(jì)人類最偉大的發(fā)明之一,已經(jīng)深入人類社會(huì)的各個(gè)方面。當(dāng)前,以Internet為代表的計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)得到飛速發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)課程已逐漸成為高校計(jì)算機(jī)相關(guān)專業(yè)的一門(mén)專業(yè)基礎(chǔ)課。計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)涉及大量復(fù)雜的網(wǎng)絡(luò)協(xié)議,尤其是作為Internet核心協(xié)議之一的TCP協(xié)議。為實(shí)現(xiàn)在不可靠的IP協(xié)議上的可靠數(shù)據(jù)交付,TCP協(xié)議包含了大量復(fù)雜的機(jī)制[1],這使得初學(xué)者感到抽象難懂,因此,TCP協(xié)議成為計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)的一個(gè)難點(diǎn)。
為提升學(xué)生對(duì)TCP協(xié)議的直觀認(rèn)識(shí),增強(qiáng)學(xué)習(xí)的興趣與效果,可搭建由物理網(wǎng)絡(luò)設(shè)備組成的網(wǎng)絡(luò)實(shí)驗(yàn)平臺(tái),但這花費(fèi)成本高、運(yùn)用不便。鑒于當(dāng)前網(wǎng)絡(luò)模擬技術(shù)已得到廣泛研究,各種成熟的網(wǎng)絡(luò)模擬工具層出不窮,通過(guò)現(xiàn)有網(wǎng)絡(luò)模擬軟件,構(gòu)建虛擬的TCP協(xié)議模擬與仿真教學(xué)環(huán)境,不僅可以增強(qiáng)學(xué)生對(duì)TCP協(xié)議復(fù)雜機(jī)理的直觀理解,提高學(xué)習(xí)的興趣與效率,而且可以為教師提供有力的TCP協(xié)議教學(xué)輔助工具。本文基于經(jīng)典NS2網(wǎng)絡(luò)模擬軟件,提出TCP協(xié)議關(guān)鍵實(shí)現(xiàn)機(jī)理(包括連接建立、確認(rèn)機(jī)制以及擁塞控制等)的分析和演示教學(xué)方法。
2 網(wǎng)絡(luò)模擬器簡(jiǎn)介
2.1 網(wǎng)絡(luò)模擬技術(shù)介紹
在眾多研究計(jì)算機(jī)網(wǎng)絡(luò)的方法中,由于網(wǎng)絡(luò)模擬技術(shù)具有成本低,實(shí)現(xiàn)簡(jiǎn)單,使用方便,并能用于研究尚未實(shí)施的網(wǎng)絡(luò)機(jī)制等優(yōu)點(diǎn),因此被廣泛應(yīng)用于網(wǎng)絡(luò)研究的每一個(gè)角落,各種網(wǎng)絡(luò)模擬器也層出不窮[2]。當(dāng)前網(wǎng)絡(luò)模擬器一般都基于離散事件模擬技術(shù)實(shí)現(xiàn)。所謂離散事件模擬,就是模擬系統(tǒng)的狀態(tài)變化在離散模擬時(shí)間點(diǎn)上發(fā)生,事件的發(fā)生使得模擬系統(tǒng)從一個(gè)狀態(tài)跳轉(zhuǎn)到另一個(gè)狀態(tài)。離散事件網(wǎng)絡(luò)模擬技術(shù)則針對(duì)數(shù)據(jù)包的每一跳轉(zhuǎn)發(fā)都依靠離散事件來(lái)刻畫(huà)。下面介紹當(dāng)前比較經(jīng)典的網(wǎng)絡(luò)模擬器。
1)NS2[3]。NS2(Network Simulator 2)是一個(gè)單機(jī)多協(xié)議離散事件網(wǎng)絡(luò)模擬工具,由USI/ISI、Xerox PARC、LBNL和UC Berkeley等美國(guó)大學(xué)和實(shí)驗(yàn)室合作,在DARPA資助的VINT工程研究中實(shí)現(xiàn)的模擬工具。NS2有很多特點(diǎn),比如具有開(kāi)放的體系結(jié)構(gòu);可擴(kuò)展、易配置和可編程的事件驅(qū)動(dòng)模擬引擎;帶有大量協(xié)議庫(kù)的支持,尤其適合于對(duì)基于TCP/IP的網(wǎng)絡(luò)進(jìn)行模擬;支持大規(guī)模多協(xié)議網(wǎng)絡(luò)模擬;提供開(kāi)放的用戶接口、可視化工具:可動(dòng)畫(huà)顯示網(wǎng)絡(luò)模擬過(guò)程,圖形顯示數(shù)據(jù)結(jié)果等。NS2是一個(gè)完全免費(fèi)的軟件,在國(guó)際上享有很高的學(xué)術(shù)聲譽(yù),被世界各國(guó)的網(wǎng)絡(luò)研究者廣泛使用。
2)OPNET。OPNET是美國(guó)OPNET Technologies Ins公司的產(chǎn)品,是一個(gè)單機(jī)的、基于離散事件驅(qū)動(dòng)的網(wǎng)絡(luò)模擬器。OPNET的特點(diǎn)包括:支持面向?qū)ο蟮慕7绞?,并提供圖形化的編輯界面;提供各種通信網(wǎng)絡(luò)和信息系統(tǒng)的結(jié)構(gòu)化模擬模塊;具有完善的結(jié)果分析器,為網(wǎng)絡(luò)性能的分析提供有效而直觀的工具;具有支持各種業(yè)務(wù)的模型等。目前OPNET是公認(rèn)的優(yōu)秀通信網(wǎng)絡(luò)、通信設(shè)施、通信協(xié)議的模擬與建模工具,在全球的通信、電訊、網(wǎng)絡(luò)及國(guó)防科技產(chǎn)業(yè)上已經(jīng)被普遍采用并受到好評(píng)。但是由于是收費(fèi)的商業(yè)軟件,限制了其在研究領(lǐng)域的廣泛應(yīng)用。
3)SSF[4]。SSF(Scalable Simulation Framework)是一組用來(lái)描述離散事件模擬的應(yīng)用程序接口,它采用DML(Domain Modeling Language)語(yǔ)言來(lái)描述網(wǎng)絡(luò)模擬應(yīng)用。SSF具有面向?qū)ο?、?jiǎn)潔、功能強(qiáng)大等特點(diǎn),此外,它支持高性能并行網(wǎng)絡(luò)模擬并且在不同的計(jì)算環(huán)境之間具有可移植性。SSF有好幾個(gè)實(shí)現(xiàn)版本,包括SSFNet、iSSF(即DaSSF)等。SSFNet采用JAVA實(shí)現(xiàn),是DARPA支持的項(xiàng)目S3(Scalable Self-organizing Simulations)中的一部分,主要支持IP包級(jí)別上的細(xì)粒度模擬,鏈路層和物理層的協(xié)議模型以獨(dú)立的組件方式提供。DaSSF采用C++實(shí)現(xiàn),由達(dá)特茅斯學(xué)院開(kāi)發(fā),目前被設(shè)計(jì)為能夠基于MPI運(yùn)行在分布式內(nèi)存并行計(jì)算機(jī)上。
2.2 NS2網(wǎng)絡(luò)模擬器
從上述分析看出,NS2是一款非常優(yōu)秀的開(kāi)源軟件,并且提供開(kāi)放的用戶接口以及提供模擬過(guò)程的動(dòng)畫(huà)演示及模擬結(jié)果的圖形顯示,因此非常適合于計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)。本文基于NS2實(shí)現(xiàn)TCP協(xié)議教學(xué)演示。下面是基于NS2的網(wǎng)絡(luò)模擬基本步驟分析。
1)基于Otcl腳本語(yǔ)言設(shè)置模擬網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)以及鏈路的基本特性。
2)基于Otcl腳本語(yǔ)言設(shè)置協(xié)議,包括協(xié)議綁定和建立通信業(yè)務(wù)量模型。
3)設(shè)置trace對(duì)象、NAM對(duì)象等。依靠trace以及NAM可以記錄網(wǎng)絡(luò)模擬過(guò)程中所產(chǎn)生的各種數(shù)據(jù)。
4)其他的輔助命令的設(shè)置,如設(shè)定模擬結(jié)束時(shí)間、各種通信業(yè)務(wù)量的起止時(shí)間等。
5)對(duì)1~4步編寫(xiě)的Otcl腳本用NS2解釋執(zhí)行,并形成trace、NAM文件記錄。
6)分析trace文件,得出實(shí)驗(yàn)所需數(shù)據(jù);或分析NAM文件,動(dòng)畫(huà)演示網(wǎng)絡(luò)模擬運(yùn)行的整個(gè)過(guò)程。
7)對(duì)配置拓?fù)浣Y(jié)構(gòu)和通信業(yè)務(wù)量模型進(jìn)行調(diào)整,并重復(fù)進(jìn)行上述模擬過(guò)程,直至模擬效果滿意為止。
3 NS2在TCP協(xié)議教學(xué)中的實(shí)例
3.1 模擬應(yīng)用設(shè)置
基于NS2模擬器,設(shè)置所模擬的網(wǎng)絡(luò)拓?fù)淙鐖D1所示,共有6個(gè)網(wǎng)絡(luò)節(jié)點(diǎn),并將Router(0)與Router(1)之間的鏈路設(shè)為瓶頸鏈路。Host(0)與Server(0)之間進(jìn)行UDP數(shù)據(jù)流的傳輸,這作為背景流量;Host(1)與Server(1)之間進(jìn)行TCP數(shù)據(jù)流的傳輸,這作為T(mén)CP協(xié)議教學(xué)的示范應(yīng)用。設(shè)定模擬時(shí)間為5秒,其中UDP數(shù)據(jù)流持續(xù)時(shí)間為2.5~5.0秒,TCP數(shù)據(jù)流持續(xù)時(shí)間為0.1~5.0秒。模擬應(yīng)用設(shè)置的關(guān)鍵TCL腳本代碼如圖2所示。
3.2 模擬結(jié)果分析與演示
在模擬過(guò)程中開(kāi)啟NS2的trace記錄、NAM記錄以及Queue Monitoring記錄,并進(jìn)行相應(yīng)分析與演示。
1)TCP連接建立的分析與演示。圖3中顯示了關(guān)鍵的trace記錄,為了能夠便于分析,做了一些精簡(jiǎn)(trace記錄中每一跳數(shù)據(jù)包轉(zhuǎn)發(fā)記錄僅保留enque記錄,刪除deque記錄以及接收記錄)。依靠圖中第1行~第7行、第9行與第11行,可以演示TCP建立連接的3次握手過(guò)程。其中第1~3行表明3次握手中的第一個(gè)報(bào)文,經(jīng)過(guò)三跳數(shù)據(jù)包轉(zhuǎn)發(fā)到達(dá)目的節(jié)點(diǎn),4~6行表明3次握手中的第二個(gè)報(bào)文,上述2個(gè)報(bào)文不涉及數(shù)據(jù)的傳遞,報(bào)文字節(jié)長(zhǎng)度為40。第7、9、11行為3次握手中的第三個(gè)報(bào)文,該報(bào)文采用捎帶應(yīng)答,伴隨數(shù)據(jù)傳送一并進(jìn)行,其字節(jié)長(zhǎng)度為1 040。
2)TCP確認(rèn)機(jī)制的分析與演示。TCP的可靠傳輸依靠確認(rèn)機(jī)制實(shí)現(xiàn),以圖3中第7~17行、第20行為例,可以演示TCP的確認(rèn)機(jī)制。其中第7~12行,TCP的發(fā)送方連續(xù)發(fā)出2個(gè)長(zhǎng)度為1 040字節(jié)的報(bào)文(標(biāo)號(hào)分別為2與3),這兩個(gè)報(bào)文分別經(jīng)過(guò)三跳數(shù)據(jù)包轉(zhuǎn)發(fā)到達(dá)目的節(jié)點(diǎn);第13行與第14行分別表明,當(dāng)目的節(jié)點(diǎn)分別收到標(biāo)號(hào)為2與3的報(bào)文后,發(fā)出ACK報(bào)文4與5進(jìn)行確認(rèn)。
依靠NAM記錄,生成相應(yīng)的NAM動(dòng)畫(huà),如圖4所示,可以比較分析有確認(rèn)機(jī)制的TCP協(xié)議以及無(wú)確認(rèn)機(jī)制的UDP協(xié)議的區(qū)別,加深學(xué)生對(duì)確認(rèn)機(jī)制的印象和理解。當(dāng)NAM動(dòng)畫(huà)演示的模擬時(shí)間推進(jìn)到2.5秒之后,同時(shí)出現(xiàn)UDP數(shù)據(jù)流以及TCP數(shù)據(jù)流,如圖4所示,可以演示出UDP數(shù)據(jù)流僅是從Host(0)到Server(0)的單向傳輸;而TCP數(shù)據(jù)流不僅包括從Host(1)到Server(1)方向的數(shù)據(jù)傳輸,還包括從Server(1)到Host(1)方向的確認(rèn)報(bào)文傳輸。
3)TCP擁塞控制的分析與演示。依靠Queue Monitoring對(duì)Host(1)與Router(0)間的鏈路進(jìn)行記錄并進(jìn)行相應(yīng)處理,獲得整個(gè)模擬過(guò)程中TCP數(shù)據(jù)流的發(fā)送速率,如圖5所示,依靠該圖演示TCP的擁塞控制過(guò)程。在0.1秒,Host(1)開(kāi)始發(fā)送TCP數(shù)據(jù)流,流量大小逐漸上升,到0.3秒流量達(dá)到最大值,這個(gè)過(guò)程可以演示為T(mén)CP協(xié)議的慢開(kāi)始階段。在0.3秒,TCP流量瞬時(shí)發(fā)送速率達(dá)3.66 Mb/s,遠(yuǎn)超過(guò)Router(0)與Router(1)之間的鏈路帶寬2 Mb/s,因此出現(xiàn)網(wǎng)絡(luò)擁塞,于是TCP協(xié)議執(zhí)行擁塞避免的“乘法減小”策略,在0.35秒,TCP流量瞬時(shí)發(fā)送速率減為2.16 Mb/s,在隨后的過(guò)程中,TCP流量發(fā)送速率基本維持在2.00 Mb/s。
從2.5秒開(kāi)始,Host(0)開(kāi)始發(fā)送UDP數(shù)據(jù)流,并與TCP數(shù)據(jù)流爭(zhēng)用瓶頸鏈路帶寬,這使得網(wǎng)絡(luò)頻繁出現(xiàn)擁塞,TCP協(xié)議執(zhí)行“乘法減小”策略,擁塞窗口多次減少,導(dǎo)致TCP流量發(fā)送速率從2.55秒的2.00 Mb/s逐漸減為2.95秒的0 b/s,隨后TCP協(xié)議繼續(xù)進(jìn)行慢開(kāi)始過(guò)程,流量大小逐漸增大,直到再次探測(cè)到出現(xiàn)網(wǎng)絡(luò)擁塞。
4 結(jié)論
本文基于網(wǎng)絡(luò)模擬軟件NS2,編寫(xiě)用于TCP協(xié)議教學(xué)的TCL腳本,并通過(guò)NS2的trace記錄、NAM記錄以及Queue Monitoring記錄工具,實(shí)現(xiàn)對(duì)TCP協(xié)議連接建立、確認(rèn)機(jī)制以及擁塞控制等機(jī)理的演示教學(xué)。通過(guò)在TCP協(xié)議教學(xué)中使用網(wǎng)絡(luò)模擬軟件NS2,能讓學(xué)生更加輕松地學(xué)習(xí)網(wǎng)絡(luò)理論知識(shí),提升學(xué)生的鉆研興趣,并取得良好的教學(xué)效果。在以后的教學(xué)工作中,擬在計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)節(jié)讓學(xué)生自己動(dòng)手編寫(xiě)計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議模擬代碼,進(jìn)一步提升學(xué)生的能動(dòng)性,培養(yǎng)創(chuàng)新思維。
參考文獻(xiàn)
[1]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2008:180-220.
[2]王曉鋒.提高大規(guī)模離散事件網(wǎng)絡(luò)模擬性能方法的研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2007:4-10.
關(guān)鍵詞:TCP/IP 溫度監(jiān)測(cè) Arduino LabView
中圖分類號(hào):TP2 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2015)09-0000-00
現(xiàn)場(chǎng)總線系統(tǒng)是一種傳統(tǒng)的雙向數(shù)字的通信標(biāo)準(zhǔn),廣泛應(yīng)用于自動(dòng)控制領(lǐng)域和生產(chǎn)過(guò)程中,但是由于現(xiàn)場(chǎng)總線的種類繁多,且各標(biāo)準(zhǔn)間的相互兼容性不強(qiáng),加上各廠商和標(biāo)準(zhǔn)制訂組織之間存在利益競(jìng)爭(zhēng),各種現(xiàn)場(chǎng)總線技術(shù)無(wú)法實(shí)現(xiàn)無(wú)縫連接,也無(wú)法將生產(chǎn)現(xiàn)場(chǎng)的監(jiān)控?cái)?shù)據(jù)共享給企業(yè)的信息管理系統(tǒng),而將以太網(wǎng)技術(shù)引入到工業(yè)控制領(lǐng)域,將監(jiān)控?cái)?shù)據(jù)進(jìn)行標(biāo)準(zhǔn)的TCP/IP封裝,將能很好的解決不同生產(chǎn)設(shè)備間的高速連接問(wèn)題和設(shè)備的“自動(dòng)化孤島”問(wèn)題,最終將生產(chǎn)自動(dòng)化和辦公自動(dòng)化無(wú)縫對(duì)接,實(shí)現(xiàn)“一網(wǎng)到底”[1]。工業(yè)以太網(wǎng)是指在工業(yè)環(huán)境的自動(dòng)化控制及過(guò)程控制中應(yīng)用的相關(guān)組件及技術(shù),工業(yè)以太網(wǎng)多采用TCP/IP協(xié)議,和IEEE802.3標(biāo)準(zhǔn)兼容。溫度是生產(chǎn)過(guò)程中重要的物理參數(shù)之一,在工業(yè)生產(chǎn)過(guò)程中經(jīng)常要用到溫度的檢測(cè)及控制,本文對(duì)基于TCP/IP網(wǎng)絡(luò)的遠(yuǎn)程溫度檢測(cè)系統(tǒng)進(jìn)行了設(shè)計(jì),給出了基于TCP/IP以太網(wǎng)的遠(yuǎn)程溫度監(jiān)測(cè)方案。
1 系統(tǒng)結(jié)構(gòu)
1.1系統(tǒng)物理結(jié)構(gòu)
使用標(biāo)準(zhǔn)的TCP/IP協(xié)議實(shí)現(xiàn)現(xiàn)場(chǎng)層與監(jiān)控層的數(shù)據(jù)傳輸,其中現(xiàn)場(chǎng)層通過(guò)連接廠內(nèi)的傳感器,實(shí)時(shí)獲取各種信息通過(guò)以太網(wǎng)絡(luò)傳送至監(jiān)控層,這一層主要由低功耗運(yùn)行穩(wěn)定的嵌入式實(shí)現(xiàn);監(jiān)控層主要是通過(guò)以太網(wǎng)絡(luò)連接廠內(nèi)的現(xiàn)場(chǎng)層的各個(gè)數(shù)據(jù)采集點(diǎn),將這些信息數(shù)據(jù)備份,存儲(chǔ)至監(jiān)控系統(tǒng)的數(shù)據(jù)庫(kù),并在溫度超過(guò)警示值時(shí)發(fā)出警報(bào)。本系統(tǒng)完成了下位機(jī)數(shù)據(jù)采集與上位機(jī)數(shù)據(jù)監(jiān)測(cè)的功能,物理結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)物理結(jié)構(gòu)圖
1.2 系統(tǒng)邏輯結(jié)構(gòu)
本系統(tǒng)的溫度信息由數(shù)據(jù)采集結(jié)點(diǎn)通過(guò)以太網(wǎng)發(fā)送到監(jiān)控層計(jì)算機(jī),并將歷史數(shù)據(jù)存儲(chǔ)致數(shù)據(jù)庫(kù)服務(wù)器,企業(yè)的辦公網(wǎng)絡(luò)和外網(wǎng)用戶可通核心路由器訪問(wèn)數(shù)據(jù)庫(kù),系統(tǒng)的數(shù)據(jù)在各層中的流向如圖2所示。
圖2 系統(tǒng)邏輯結(jié)構(gòu)
2 數(shù)據(jù)采集與發(fā)送端
2.1數(shù)字溫度采集點(diǎn)設(shè)計(jì)
K型熱電偶可以測(cè)量固體介質(zhì)和汽液體蒸氣的表面溫度,其測(cè)量范從0℃到1300℃[2]。具有很高的靈敏度和很好的穩(wěn)定性,非線性誤差小,熱電動(dòng)勢(shì)較大,對(duì)于復(fù)雜環(huán)境下的工業(yè)環(huán)境有很好的適應(yīng)性等優(yōu)點(diǎn),因此,在工業(yè)監(jiān)控領(lǐng)域得到廣泛的使用。但是,由于其輸出熱電勢(shì)與冷端溫度相關(guān),輸出的數(shù)據(jù)為模擬量,且與被測(cè)量端的溫度有關(guān),因此需要進(jìn)行溫度補(bǔ)償和模數(shù)轉(zhuǎn)換。如果采用軟件補(bǔ)償?shù)姆椒ǎ环矫鏁?huì)增加程序編制及調(diào)試電路的難度,另一方面,軟件補(bǔ)償會(huì)占用一定的數(shù)字結(jié)點(diǎn)的計(jì)算資源,而以太網(wǎng)使用了CSMA/CD,會(huì)產(chǎn)生數(shù)據(jù)傳送過(guò)程中的不確定性,影響精度。所以,本系統(tǒng)采用了使用硬件進(jìn)行溫度補(bǔ)償?shù)姆桨?,采用MAX6675串行模數(shù)轉(zhuǎn)換器對(duì)采集的數(shù)據(jù)進(jìn)行處理,在進(jìn)行溫度補(bǔ)償?shù)耐瑫r(shí),也提供了信號(hào)量為12位分辨率的模數(shù)轉(zhuǎn)換,加強(qiáng)了與控制器數(shù)據(jù)通信的兼容性[3]。
嵌入式控制器采用Arduino開(kāi)源硬件平臺(tái),它使用AtmelAVR單片機(jī)為核心處理器,采用基于開(kāi)放源代碼的軟硬件平臺(tái),由于其功耗低、穩(wěn)定性強(qiáng)、開(kāi)發(fā)周期短等特點(diǎn),目前被廣泛應(yīng)用于各個(gè)領(lǐng)域,越來(lái)越多的工程師選用Arduino平臺(tái)進(jìn)行項(xiàng)目開(kāi)發(fā),截止到現(xiàn)在,Arduino開(kāi)發(fā)團(tuán)隊(duì)已開(kāi)發(fā)出多種控制器??紤]到系統(tǒng)部署后期可能有更多數(shù)據(jù)采集點(diǎn)的加入,本系統(tǒng)選用的是以Atmega2560核心的ArduinoMega2560控制板(以下簡(jiǎn)稱Mega2560),相對(duì)于普通的Arduino Uno,Meg2560可用的數(shù)字輸入輸出口多達(dá)到54個(gè),插接傳感器擴(kuò)展模塊后的數(shù)字I/O可以達(dá)到100多個(gè),給系統(tǒng)的升級(jí)與擴(kuò)展帶來(lái)極大的便利。
硬件連線如圖3所示,將K型熱電偶連接至MAX6675的接線座上,確保正負(fù)兩極連接無(wú)誤。分別將MAX6675對(duì)應(yīng)用的電源、地線、SO、CS、SCK端連接至控制器 Mega256上的5V、GNU、數(shù)字口5、6、7。
圖3 控制器與MAX675連線圖
2.2以太網(wǎng)通信模塊
由于Mega2560無(wú)法直接連接到以太網(wǎng)絡(luò),需要采用包含以太網(wǎng)的Ethernet模塊來(lái)實(shí)現(xiàn),本文選用的是集成WIZnetW5100網(wǎng)絡(luò)芯片的擴(kuò)展模塊。W5100 是一款高集成度的網(wǎng)絡(luò)通信芯片,全硬件實(shí)現(xiàn)標(biāo)準(zhǔn)的TCP/IP 協(xié)議棧、以太網(wǎng)介質(zhì)傳輸層(MAC)和物理層(PHY),具備了高穩(wěn)定、高性能和低功耗的特點(diǎn),其數(shù)據(jù)傳輸速率最高可達(dá)100Mbps,由于TCP/IP協(xié)議均在商用與民用領(lǐng)域經(jīng)過(guò)了多年的應(yīng)用和長(zhǎng)足的發(fā)展,相關(guān)技術(shù)已經(jīng)十分成熟,資源豐富,極大的縮短了上位機(jī)與下位機(jī)程序的開(kāi)發(fā)周期。
根據(jù)Mega2560的接口特點(diǎn),本系統(tǒng)采了采用SPI總線方式與嵌入式控制器進(jìn)行通信,與Ethernet模塊連接如圖4所示,其接口功能描述為SS:使能信號(hào);SCLK:時(shí)鐘信號(hào);MOSI:數(shù)據(jù)發(fā)送;MISO:數(shù)據(jù)接收。
圖4 SPI總線連接圖
由于Arduino系列的控制器均采用了相互兼容的可堆疊的標(biāo)準(zhǔn)化設(shè)計(jì),Ethernet可以直接插接到Mega2560上不作任何配置,即可進(jìn)行通信。W5100 內(nèi)部用于數(shù)據(jù)傳輸?shù)木彌_存儲(chǔ)器容量有 16KB,完全能夠滿足溫度監(jiān)控?cái)?shù)據(jù)的本地緩存,使用W5100不需要考慮以太網(wǎng)底層的控制,采用常規(guī)的網(wǎng)絡(luò)編程方法即可實(shí)現(xiàn)與W5100的以太網(wǎng)通信。通過(guò)Mega256引腳圖(圖5)[3]可知,插接了Ethernet模塊后,SPI總線會(huì)占用Mega2560控制器的50~53號(hào)引腳,因此在使用的時(shí)候要注意避開(kāi)。
圖5 Arduino Mega2560引腳圖
3 軟件設(shè)計(jì)
3.1 溫度采集點(diǎn)軟件設(shè)計(jì)
在以太網(wǎng)傳輸中,常用的傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)均可以完成下位機(jī)到上位機(jī)的數(shù)據(jù)傳輸,但TCP是基于連接的可靠傳輸協(xié)議,能進(jìn)行錯(cuò)誤監(jiān)測(cè),鑒于工業(yè)現(xiàn)場(chǎng)對(duì)于數(shù)據(jù)可靠性的要求,所以本文的軟件設(shè)計(jì)中并未采用傳輸性能較高的UDP協(xié)議。因?yàn)?,在辦公網(wǎng)絡(luò)中一個(gè)數(shù)據(jù)包的丟失可能是無(wú)關(guān)緊要的,但在工業(yè)現(xiàn)場(chǎng)監(jiān)控中,帶來(lái)的影響可能是巨大的。在Arduino標(biāo)準(zhǔn)庫(kù)中包含了Ethernet和SPI通信所需要的類與函數(shù),在編寫(xiě)程序的時(shí)候需要包含Ethernet.h、SPI.h和MAX6675.h這三個(gè)頭文件。下面是Arduino控制器的程序代碼。
#include “MAX6675.h”
#include “Ethernet.h”
#include “SPI.h”
MAX6675 mySenor(5,6,7); //定義MAX6675類型的傳感器對(duì)象mySenor
EthernetServer server(8000); //創(chuàng)建一個(gè)服務(wù)器對(duì)象,并設(shè)置網(wǎng)絡(luò)傳送端口為8000
Byte mac[]={0XDE,0XAD,0XBE,0XEF,0XEF,0XFE,0XED};//設(shè)置Ethernet模塊MAC地址
IPAdress ip{192.168.1.110}; //設(shè)置Ethernet模塊IP地址
void setup(){ //初始化各功能模塊
Serial.begin(9600); //設(shè)置串口波特率
mySenor.setOffset(0);
Ethernet.begin(mac,ip);
Server.begin();
}
void loop() //控制器循環(huán)操作
{
float sendData=0;
sendData=mySenor.getCelsius(); //從傳感器對(duì)象讀取溫度數(shù)據(jù)
server.print(sendData); //通過(guò)網(wǎng)絡(luò)發(fā)送數(shù)據(jù)
Serial.println(sendData); //向串口發(fā)送數(shù)據(jù),用于監(jiān)控調(diào)試
delay(500); //設(shè)置延時(shí)
}
3.2 監(jiān)控層軟件設(shè)計(jì)
在工業(yè)現(xiàn)場(chǎng)的溫度監(jiān)測(cè)中,不僅要完成實(shí)時(shí)溫度數(shù)據(jù)的監(jiān)測(cè)同時(shí)也需要將生成的歷史數(shù)據(jù)進(jìn)行分析,使用計(jì)算機(jī)豐富的計(jì)算資源以彌補(bǔ)嵌入式控制器的不足,使用虛擬儀器是一很好的選擇,虛擬儀器是將計(jì)算機(jī)和儀器技術(shù)接合的結(jié)晶[4],同樣也是測(cè)試技術(shù)和計(jì)算機(jī)深層次結(jié)合的產(chǎn)物,它具有數(shù)據(jù)采集與信號(hào)分析的功能,本文的監(jiān)控層軟件設(shè)計(jì)采用了美國(guó)國(guó)家儀器公司(NI)設(shè)計(jì)的LabVIEW平臺(tái),LabVIEW的系統(tǒng)的組成[2]如圖6所示。
圖6 LabVIEW系統(tǒng)組成
LabVIEW采用圖形化的G語(yǔ)言進(jìn)行編程,設(shè)置TCP連接地址為下位機(jī)的IP地址為192.168.110,通信端口為8000,超時(shí)設(shè)置為60000毫秒,通過(guò)波形控件提供歷史溫度顯示,溫度顯示控件顯示實(shí)時(shí)溫度,監(jiān)控層的上位機(jī)程序代碼如圖7所示。
圖7 上位機(jī)程序框圖
4 結(jié)語(yǔ)
經(jīng)測(cè)試,本系統(tǒng)能準(zhǔn)確的對(duì)工業(yè)現(xiàn)場(chǎng)的實(shí)時(shí)溫度進(jìn)行顯示和歷史數(shù)據(jù)的顯示,如圖8所示,可得知當(dāng)前溫度為200攝氏度,而在過(guò)去的500分鐘歷史記錄中發(fā)現(xiàn)系統(tǒng)出現(xiàn)了10次超過(guò)溫度警戒值800攝氏度的記錄。該設(shè)計(jì)充分利用了TCP/IP技術(shù)實(shí)現(xiàn)了對(duì)工業(yè)生產(chǎn)過(guò)程的監(jiān)控,進(jìn)一步提高了各項(xiàng)監(jiān)督工業(yè),有助于現(xiàn)場(chǎng)工程師及時(shí)采取應(yīng)急處理等業(yè)務(wù)操作,需要注意的是以太網(wǎng)技術(shù)帶來(lái)的高數(shù)據(jù)高實(shí)時(shí)的同時(shí),也產(chǎn)生了一些網(wǎng)絡(luò)安全問(wèn)題,對(duì)于這一問(wèn)題可通過(guò)網(wǎng)關(guān)采取包過(guò)濾的方法將內(nèi)部控制網(wǎng)絡(luò)與外部網(wǎng)絡(luò)系統(tǒng)分開(kāi)[5]。綜上所述,隨著以太網(wǎng)技術(shù)在工業(yè)現(xiàn)場(chǎng)中的逐步推廣和應(yīng)用,使生產(chǎn)現(xiàn)場(chǎng)數(shù)據(jù)與企業(yè)信息系統(tǒng)實(shí)現(xiàn)無(wú)縫對(duì)接,在即將到來(lái)的第四次工業(yè)革命中,全面實(shí)現(xiàn)“數(shù)字化工廠”這一宏偉目標(biāo)[6]。
圖8 LabVIEW程序運(yùn)行效果圖
參考文獻(xiàn)
[1]徐皚冬.工業(yè)以太網(wǎng)實(shí)時(shí)通信技術(shù)[J].信息與控制,2005,34(1):60-64.
[2]沈金鑫,Arduino與LabVIEW開(kāi)發(fā)實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2014:182―187.
[3]開(kāi)源硬件知識(shí)庫(kù)[OL].[2014-10-21]. http:///
[4]余成,謝東坡.網(wǎng)絡(luò)化測(cè)控技術(shù)與實(shí)現(xiàn)[M].北京:高等教育出版社,2009:194-198.
[5]孫德輝,史運(yùn)濤,李志軍,楊楊編,網(wǎng)絡(luò)化控制系統(tǒng)[M].北京:國(guó)防工業(yè)出版社,2008:124―134.
[6]陳積明.工業(yè)以太網(wǎng)的研究現(xiàn)狀及展望[J].化工自動(dòng)化入儀表,2001,28(6):1-4.
收稿日期:2015-08-08
關(guān)鍵詞:“計(jì)算機(jī)網(wǎng)絡(luò)”教學(xué);Wireshark;TCP/IP
“計(jì)算機(jī)網(wǎng)絡(luò)”課程作為計(jì)算機(jī)科學(xué)與技術(shù)、網(wǎng)絡(luò)工程、通信工程和軟件工程等專業(yè)的主干課,其地位在課程體系群中尤為重要。學(xué)習(xí)這門(mén)課程,最重要的是掌握計(jì)算機(jī)網(wǎng)絡(luò)的原理,了解網(wǎng)絡(luò)硬件和軟件的工作機(jī)制。計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)理論復(fù)雜抽象,概念眾多,對(duì)剛開(kāi)始學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的學(xué)生來(lái)說(shuō),這些概念和協(xié)議是非常難以理解和記憶的。計(jì)算機(jī)網(wǎng)絡(luò)原理主要描述的是各層的功能及其協(xié)議和服務(wù),具體地說(shuō)就是要理解網(wǎng)絡(luò)的相關(guān)功能層概念和網(wǎng)絡(luò)體系結(jié)構(gòu)(包括OSI參考模型、TCP/IP模型協(xié)議族),以及功能模塊之間的協(xié)議交互[1],這是學(xué)好計(jì)算機(jī)網(wǎng)絡(luò)的關(guān)鍵。網(wǎng)絡(luò)體系結(jié)構(gòu)是計(jì)算機(jī)網(wǎng)絡(luò)及其部件所應(yīng)完成的功能的精確定義。計(jì)算機(jī)網(wǎng)絡(luò)原理主要講述的就是各層的功能及其協(xié)議和服務(wù)。在計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)過(guò)程中,利用Wireshark網(wǎng)絡(luò)探測(cè)和分析軟件,通過(guò)從網(wǎng)絡(luò)中實(shí)時(shí)捕獲幾種常見(jiàn)協(xié)議數(shù)據(jù)包并進(jìn)行分析,使學(xué)生對(duì)一些協(xié)議的工作原理及結(jié)構(gòu)有了更加深刻的理解和認(rèn)識(shí)[2]。
1Wireshark簡(jiǎn)介
Wireshark(原名Ethereal)是目前世界上最受歡迎的協(xié)議分析軟件,利用它可將捕獲到的網(wǎng)絡(luò)二進(jìn)制數(shù)據(jù)流翻譯為人們?nèi)菀鬃x懂和理解的文字和圖表等形式,極大地方便了對(duì)網(wǎng)絡(luò)活動(dòng)的監(jiān)測(cè)分析和教學(xué)實(shí)驗(yàn)。它有十分豐富和強(qiáng)大的統(tǒng)計(jì)分析功能,可在Windows,Linux 和UNIX等系統(tǒng)上運(yùn)行。它允許在一個(gè)網(wǎng)絡(luò)內(nèi)部實(shí)時(shí)捕獲和分析數(shù)據(jù)包,用戶可以通過(guò)圖形界面很直觀地瀏覽捕獲到的數(shù)據(jù)信息,研究數(shù)據(jù)包每一層的詳細(xì)信息[3]。
學(xué)習(xí)和理解計(jì)算機(jī)網(wǎng)絡(luò)原理的最好方法是,理論聯(lián)系實(shí)際。在一個(gè)現(xiàn)實(shí)的局域網(wǎng)中,網(wǎng)絡(luò)數(shù)據(jù)流往往是來(lái)自不同用戶的各種各樣協(xié)議數(shù)據(jù)的大混雜,因此利用Wireshark的“捕獲過(guò)濾器”和“顯示過(guò)濾器”,從錯(cuò)綜復(fù)雜的數(shù)據(jù)流中迅速提取自己所關(guān)心的網(wǎng)絡(luò)信息,了解和掌握網(wǎng)絡(luò)的工作原理和協(xié)議的交互過(guò)程。
Wireshark使用目的是網(wǎng)絡(luò)管理員使用Wireshark來(lái)檢測(cè)網(wǎng)絡(luò)問(wèn)題、網(wǎng)絡(luò)安全工程師使用Wireshark來(lái)檢查資訊安全相關(guān)問(wèn)題、開(kāi)發(fā)者使用Wireshark來(lái)為新的通訊協(xié)議除錯(cuò)、普通使用者使用Wireshark來(lái)學(xué)習(xí)網(wǎng)絡(luò)協(xié)議的相關(guān)知識(shí)等。
2用Wireshark分析網(wǎng)絡(luò)協(xié)議
網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)上所有設(shè)備(網(wǎng)絡(luò)服務(wù)器、計(jì)算機(jī)及交換機(jī)、路由器、防火墻等)之間通信規(guī)則的集合,它定義了通信時(shí)信息必須采用的格式和這些格式的意義。TCP/IP(Transmission Control Protocol / Internet Protocol),即傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議是不同操作系統(tǒng)的計(jì)算機(jī)網(wǎng)絡(luò)互連的通用協(xié)議,它是一組計(jì)算機(jī)通信協(xié)議族,其中最著名的兩個(gè)協(xié)議是TCP及IP協(xié)議。TCP/IP協(xié)議具有開(kāi)放式互聯(lián)環(huán)境,很容易實(shí)現(xiàn)各種局域網(wǎng)和廣域網(wǎng)的集成式互聯(lián)。此協(xié)議是當(dāng)今技術(shù)最成熟、應(yīng)用最廣泛的網(wǎng)絡(luò)協(xié)議[4]。
TCP是一種面向連接的、可靠的運(yùn)輸層協(xié)議,TCP數(shù)據(jù)傳輸(只有連接建立后才可進(jìn)行數(shù)據(jù)傳輸)需要通過(guò)在客戶端和服務(wù)器端建立特定的虛電路連接來(lái)完成,該過(guò)程通常被稱為“三次握手”,即發(fā)送方先發(fā)送連接請(qǐng)求,然后接收方進(jìn)行連接確認(rèn),最后發(fā)送方對(duì)接收方的確認(rèn)再次進(jìn)行確認(rèn)(圖1)。下面就以Wireshark對(duì) TCP連接建立交互過(guò)程的數(shù)據(jù)包捕獲分析為例,來(lái)說(shuō)明對(duì)TCP/IP協(xié)議實(shí)現(xiàn)的分析。
2.1建立捕獲TCP連接報(bào)文的實(shí)驗(yàn)環(huán)境
PCATTCP是一款不錯(cuò)的測(cè)試局域網(wǎng)網(wǎng)絡(luò)速度的軟件。在局域網(wǎng)中,兩臺(tái)主機(jī)通過(guò)交換機(jī)連接起來(lái)。在服務(wù)器端和客戶端都安裝和運(yùn)行PCATTCP進(jìn)行通信,產(chǎn)生TCP流。啟動(dòng)Wireshark進(jìn)行數(shù)據(jù)包捕獲,單擊CaptureInterfaces菜單,選擇自己的網(wǎng)卡,選擇Start開(kāi)始監(jiān)控流量。在服務(wù)器端運(yùn)行ttcp,監(jiān)聽(tīng)TCP的5001端口。圖2是服務(wù)器端的完整命令行輸出:
服務(wù)器配置好后,在客戶端運(yùn)行ttcp,雙方開(kāi)始通信。
2.2TCP報(bào)文分析
2.2.1客戶端發(fā)送連接請(qǐng)求
捕捉到的TCP 連接報(bào)文如圖3所示。
從圖3可以看出,客戶端發(fā)出的連接請(qǐng)求數(shù)據(jù)包封裝了三個(gè)頭信息:以太網(wǎng)(Ethernet)幀、IP數(shù)據(jù)報(bào)和TCP報(bào)文段。在數(shù)據(jù)鏈路層,數(shù)據(jù)以幀的方式進(jìn)行傳輸。在網(wǎng)絡(luò)層,加工的主要數(shù)據(jù)對(duì)象是IP數(shù)據(jù)報(bào)。IP協(xié)議是TCP/IP協(xié)議族中的核心協(xié)議之一,所有的TCP、UDP、ICMP數(shù)據(jù)都以IP數(shù)據(jù)報(bào)格式傳輸。
在運(yùn)輸層,主要數(shù)據(jù)對(duì)象是TCP報(bào)文??蛻舳税l(fā)送的連接請(qǐng)求如圖4所示。
第一條報(bào)文是沒(méi)有數(shù)據(jù)的TCP報(bào)文段,并且將首部的SYN位設(shè)置為1。因此,第一條報(bào)文常常被稱為SYN分組。這個(gè)報(bào)文段里的序列號(hào)是由系統(tǒng)隨機(jī)設(shè)置的數(shù)值,表示客戶端為后續(xù)報(bào)文設(shè)定的起始編號(hào)。此TCP報(bào)文段,序列號(hào)SEQ在連接請(qǐng)求時(shí)相對(duì)初始值是0,其實(shí)際值是c9 f4 65 c2;確認(rèn)號(hào)是00 00 00 00,ACK標(biāo)志為0表明確認(rèn)號(hào)被忽略。SYN=1表示正在進(jìn)行連接請(qǐng)求,通過(guò)SYN和ACK也可以用來(lái)區(qū)分Connection Request和Connection Accepted,在連接請(qǐng)求中,SYN=1、ACK=0,連接響應(yīng)時(shí),SYN=1、ACK=1。
SYN分組通常是從客戶端發(fā)送到服務(wù)器端。這個(gè)報(bào)文段請(qǐng)求建立連接。因?yàn)橐坏┏晒⑦B接,服務(wù)器進(jìn)程必須已經(jīng)在監(jiān)聽(tīng)SYN分組所指示的IP地址和端口號(hào)[5]。如果沒(méi)有建立連接,SYN分組將不會(huì)應(yīng)答。如果第一個(gè)分組丟失了,客戶端通常會(huì)發(fā)送若干個(gè)SYN分組,如果多次嘗試不成功,客戶端將會(huì)停止并報(bào)告一個(gè)錯(cuò)誤給應(yīng)用程序。
2.2.2服務(wù)端連接響應(yīng)
當(dāng)服務(wù)器接收到連接請(qǐng)求時(shí),就對(duì)請(qǐng)求方進(jìn)行響應(yīng),以確認(rèn)收到客戶端的第一個(gè)TCP報(bào)文段。響應(yīng)的報(bào)文段SYN位和ACK位都將置1。通常稱這個(gè)報(bào)文段為SYNACK分組。SYNACK分組在確認(rèn)收到SYN分組的同時(shí)也發(fā)出一個(gè)初始的數(shù)據(jù)流序列號(hào),表示服務(wù)器發(fā)向客戶端的數(shù)據(jù)序號(hào),它不需要與剛才客戶端發(fā)來(lái)的數(shù)據(jù)流的序列號(hào)相匹配。服務(wù)器端響應(yīng)的數(shù)據(jù)包如圖5所示。
此數(shù)據(jù)包的起始序列號(hào)SEQ在協(xié)議框中顯示為0,在原始框中的實(shí)際值為63 cf 1a c9。所有初始序列號(hào)邏輯上都視同為序列號(hào)0。ACK標(biāo)志為1表明確認(rèn)號(hào)有效,SYN仍然為1。
圖6中確認(rèn)號(hào)在協(xié)議框中顯示為1,在原始框中的值為c9 f4 65 c3(比c9 f4 65 c2多1)。這解釋了TCP的確認(rèn)模式,TCP接收端確認(rèn)第X個(gè)字節(jié)已經(jīng)收到,并通過(guò)設(shè)置確認(rèn)號(hào)為X+1來(lái)表明期望收到的下一個(gè)字節(jié)號(hào)。
2.2.3客戶端連接確認(rèn)
在TCP連接建立的最后階段,客戶端對(duì)接收到數(shù)據(jù)包的服務(wù)器端進(jìn)行確認(rèn),到此為止建立完整的TCP連接,開(kāi)始全雙工模式的數(shù)據(jù)傳輸過(guò)程??蛻舳耸盏椒?wù)器端確認(rèn)后,發(fā)送帶有ACK標(biāo)志的TCP報(bào)文段來(lái)完成三次握手的過(guò)程[6]。這個(gè)報(bào)文段將確認(rèn)服務(wù)器端發(fā)送的SYNACK分組,并檢查T(mén)CP連接的兩端是否正確地打開(kāi)和運(yùn)作。
如圖7所示,在確認(rèn)階段,數(shù)據(jù)包由客戶端發(fā)送至服務(wù)器端,TCP中的序列號(hào)為c9 f4 65 c3(即上次服務(wù)器響應(yīng)報(bào)文的確認(rèn)號(hào))。
圖8中,報(bào)文段的本次確認(rèn)號(hào)為63 cf 1a ca(即上次的序列號(hào)加1)表示客戶端下一次希望從主機(jī)接收的數(shù)據(jù)的起始位置。ACK標(biāo)志為1表明確認(rèn)號(hào)有效,SYN置為0表示連接建立結(jié)束。連接建立后,雙方可以根據(jù)各自的窗口尺寸開(kāi)始傳輸數(shù)據(jù)。
2.3小結(jié)
從以上的圖可以看出,利用Wireshark可以針對(duì)每一數(shù)據(jù)包,完成從鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層到應(yīng)用層的協(xié)議解析。通過(guò)上面步驟,可以更加直觀的觀察到TCP三次握手建立的過(guò)程,有助于理解TCP及其工作原理,掌握協(xié)議的語(yǔ)法細(xì)節(jié)。
3結(jié)語(yǔ)
計(jì)算機(jī)網(wǎng)絡(luò)基本理論復(fù)雜抽象,不易理解,但這部分內(nèi)容又是進(jìn)一步學(xué)習(xí)“計(jì)算機(jī)網(wǎng)絡(luò)”課程,培養(yǎng)實(shí)踐應(yīng)用能力的基礎(chǔ)。在教學(xué)過(guò)程中,通過(guò)合理組織授課內(nèi)容,采用先進(jìn)的教學(xué)方法和較為科學(xué)的教學(xué)手段,使學(xué)生能夠較好地掌握計(jì)算機(jī)網(wǎng)絡(luò)的基本理論和方法。利用Wireshark網(wǎng)絡(luò)協(xié)議分析軟件,進(jìn)行網(wǎng)絡(luò)性能參數(shù)和數(shù)據(jù)代碼的捕獲分析,了解協(xié)議的封裝結(jié)構(gòu)、交互過(guò)程,對(duì)于計(jì)算機(jī)網(wǎng)絡(luò)教學(xué)有很大的幫助。
參考文獻(xiàn):
[1] 謝希仁. 計(jì)算機(jī)網(wǎng)絡(luò)[M]. 大連:大連理工大學(xué)出版社,2004.
[2] 楊春勇,潘文君,朱翠濤. 計(jì)算機(jī)網(wǎng)絡(luò)課程教學(xué)及輔助教學(xué)方法研究[J]. 高等函授學(xué)報(bào):自然科學(xué)版,2008,21(6):12-14.
[3] Angela Orebaugh,Gilbert Ramirez,Jay Beale. Wireshark & Ethereal Network Protocol Analyzer Toolkit[M]. Burlington:Syngress Press,2006.
[4] Forouzan.B.A. TCP/IP協(xié)議族[M]. 3版. 謝希仁,等譯. 北京:清華大學(xué)出版社,2006.
[5] 蔣波,李方軍,郝軍. 數(shù)據(jù)包的截獲與網(wǎng)絡(luò)協(xié)議分析[J]. 重慶三峽學(xué)院學(xué)報(bào),2006,22(3):26-28.
[6] Miller D. 數(shù)據(jù)通訊與網(wǎng)絡(luò)[M]. 鄧勸生,薛建新,王涌,譯. 北京:清華大學(xué)出版社,2007.
The Application of Wireshark in TCP/IP Network Protocol Teaching
PAN Wen-chan, ZHANG Yun
(College of Computer Science, Nanjing University of Posts and Telecommunications, Nanjing 210003, China)
亞當(dāng)·斯密進(jìn)行的是具體的動(dòng)機(jī)-行為分析,哈耶克則通過(guò)抽象的行為-規(guī)則分析,來(lái)研究自生自發(fā)秩序。哈耶克把人的“天賦”/“傾向”和“才能”,統(tǒng)統(tǒng)看作“個(gè)人知識(shí)”。亞當(dāng)·斯密所分析的是人在自利心和自然傾向的驅(qū)動(dòng)下,通過(guò)交易而產(chǎn)生的分工秩序,哈耶克分析的則是人類在每個(gè)人的個(gè)人知識(shí)基礎(chǔ)上不斷擴(kuò)大的合作的擴(kuò)展秩序。哈耶克的規(guī)則分析不再以顧客和面包師之間的交易行為為中心,而是轉(zhuǎn)向交易規(guī)則的研究,這種研究必然是歷史的和社會(huì)的。
哈耶克對(duì)自生自發(fā)秩序的研究建立在對(duì)三種行動(dòng)和知識(shí)的關(guān)系的分析上:
1、個(gè)人行動(dòng)與他人知識(shí)的關(guān)系:一個(gè)人無(wú)法替他人決策,因?yàn)樗麩o(wú)法占有他人的全部個(gè)人知識(shí),而這種個(gè)人知識(shí)是和他人特定的時(shí)空情景結(jié)合在一起的。
2、個(gè)人的行動(dòng)與他自己的知識(shí)的關(guān)系:一個(gè)人無(wú)法甚至確切地知道他自己所擁有的知識(shí)。對(duì)自己的行為,他可能也是“知其然”(know what)而不“知其所以然”(know how)。
3、個(gè)人的行動(dòng)和整個(gè)文明累積的知識(shí)的關(guān)系:一個(gè)人對(duì)他依照從事的那一套文明社會(huì)的普遍抽象規(guī)則并不能確切的知道和清晰地表述。這里的普遍抽象規(guī)則就是哈耶克意義上的法律,國(guó)會(huì)或政府的立法并不一定是這種普遍抽象規(guī)則的確切表述。這就是哈耶克所謂“法與立法”的二元觀。
“法與立法”的二元觀帶來(lái)很多意涵。在哈耶克看來(lái),普通法是一種典型的自生自發(fā)秩序。普通法法理學(xué)認(rèn)為,規(guī)則并不是制定的,而是發(fā)現(xiàn)的。制定法只是法律淵源之一,而不是法本身,法官要通過(guò)法律解釋和法律推理來(lái)發(fā)現(xiàn)適用于具體個(gè)案的規(guī)則。先例制度保證了,正確的解釋和推理可以被挑選出來(lái),錯(cuò)誤的、不適當(dāng)?shù)慕忉尯屯评砟軌虮惶蕹?,因此普通法是一個(gè)不斷進(jìn)化的法律體系,就像民族語(yǔ)言一樣。
互聯(lián)網(wǎng)是最新的自生自發(fā)秩序的例子。這一點(diǎn)可以通過(guò)TCP/IP協(xié)議的“發(fā)現(xiàn)”過(guò)程來(lái)說(shuō)明:
1、1969年9月,美國(guó)加州大學(xué)洛杉磯分校第一次把接口信號(hào)處理器(IMP)和主機(jī)連接起來(lái)。1969年12月擴(kuò)展到4個(gè)節(jié)點(diǎn)。1969年4月,克洛克發(fā)表第一份RFC(征求意見(jiàn)稿),此后成為互聯(lián)網(wǎng)上開(kāi)放標(biāo)準(zhǔn)的主要形成方。每個(gè)人都可以通過(guò)RFC提出建議標(biāo)準(zhǔn)(proposal standard),試行6個(gè)月以上,至少開(kāi)發(fā)兩種實(shí)現(xiàn),并不斷測(cè)試,解決所有問(wèn)題,然后可以變?yōu)椴莅笜?biāo)準(zhǔn)(draftstandard),保持4個(gè)月,開(kāi)發(fā)和測(cè)試更多的實(shí)現(xiàn),才有可能成為互聯(lián)網(wǎng)標(biāo)準(zhǔn)(Internetstandard)。1970年12月,克洛克領(lǐng)導(dǎo)網(wǎng)絡(luò)工作小組制定出最初的主機(jī)-主機(jī)協(xié)議NCP.
2、1974年,文頓·瑟夫發(fā)表“分組網(wǎng)絡(luò)互連的一個(gè)協(xié)議”,提出TCP協(xié)議。后來(lái)分成TCP和IP兩個(gè)協(xié)議,合稱TCP/IP.目前,TCP/IP已經(jīng)發(fā)展成一個(gè)分層的協(xié)議簇,包含著上千個(gè)協(xié)議?,F(xiàn)在的協(xié)議的標(biāo)準(zhǔn)化由互聯(lián)網(wǎng)協(xié)會(huì)協(xié)調(diào)維護(hù),由志愿者組成的IAB(Internet ArchitectureBoard)是ISOC的技術(shù)顧問(wèn)組。這是一個(gè)非官方的完全公開(kāi)的自愿組織,任何人都可以成為它的會(huì)員,參與其討論,參加它的郵件列表沒(méi)有任何限制。
3、1983年1月1日,NCP由于沒(méi)有TCP/IP強(qiáng)大,停止使用。
4、80年代,TCP/IP遇到了官方的挑戰(zhàn)。ISO(國(guó)際標(biāo)準(zhǔn)化組織)正式提出了一個(gè)官方的協(xié)議OSI.OSI雖然得到了美國(guó)、歐洲政府的支持,但過(guò)于學(xué)術(shù)化,而且沒(méi)有得到實(shí)際應(yīng)用的檢驗(yàn)。在這場(chǎng)官方標(biāo)準(zhǔn)和事實(shí)上的工業(yè)標(biāo)準(zhǔn)之爭(zhēng)中,開(kāi)放自由的TCP/IP標(biāo)準(zhǔn)戰(zhàn)勝了官方標(biāo)準(zhǔn)OSI.
上述事實(shí)可以給我們?cè)S多啟示。TCP/IP是一種自由開(kāi)放的標(biāo)準(zhǔn),不斷地被人們發(fā)現(xiàn),不斷地優(yōu)勝劣汰-甚至淘汰官方制定的標(biāo)準(zhǔn),并且不斷地演化。在互聯(lián)網(wǎng)這個(gè)自生自發(fā)秩序中,“標(biāo)準(zhǔn)只能被發(fā)現(xiàn),不能被制定”。
中國(guó)互聯(lián)網(wǎng)近些年來(lái)發(fā)展迅速。從官方到民間一直有呼聲對(duì)互聯(lián)網(wǎng)的發(fā)展進(jìn)行規(guī)制。最近中國(guó)政府出臺(tái)了一系列的行政法規(guī)和行政規(guī)章:9月25日,國(guó)務(wù)院《電信條例》和《互聯(lián)網(wǎng)信息服務(wù)管理辦法》;11月6日,信息產(chǎn)業(yè)部《互聯(lián)網(wǎng)電子公告服務(wù)管理規(guī)定》;同日,信息產(chǎn)業(yè)部、國(guó)務(wù)院新聞辦《互聯(lián)網(wǎng)網(wǎng)站從事登載新聞業(yè)務(wù)管理暫行規(guī)定》。這些著眼于貫徹政府意志的行政法規(guī)和規(guī)章對(duì)中國(guó)的互聯(lián)網(wǎng)發(fā)展帶來(lái)沉重打擊。
不過(guò),中國(guó)的互聯(lián)網(wǎng)法律有制定的部分,也有“發(fā)現(xiàn)”的部分,當(dāng)前人們討論的基本只是中國(guó)互聯(lián)網(wǎng)制定的這一部分,往往忽視可能價(jià)值更高的“發(fā)現(xiàn)”的那一部分。近來(lái)中國(guó)有一系列關(guān)于互聯(lián)網(wǎng)的法律糾紛。由于沒(méi)有現(xiàn)成的法律,對(duì)這些案子的判決都需要法官去發(fā)現(xiàn)規(guī)則。比如,在易家訴國(guó)網(wǎng)案中,法官確定了“對(duì)將知名商標(biāo)注冊(cè)為域名構(gòu)成域名搶注”。在陳衛(wèi)華訴成都《電腦商情報(bào)》案中,法官提出了確定網(wǎng)絡(luò)作品的作者的方法。在瑞得(集團(tuán))公司訴宜賓市翠屏區(qū)東方信息服務(wù)有限公司著作權(quán)侵權(quán)糾紛案中,法官界定了“網(wǎng)頁(yè)是著作權(quán)意義上的作品”,以及互聯(lián)網(wǎng)上著作權(quán)侵權(quán)的司法管轄原則(服務(wù)器所在地及終端計(jì)算機(jī)所在地均可視為復(fù)制行為的行為地,瑞得選擇自己服務(wù)器所在地的北京市海淀區(qū)人民法院起訴原在四川的東方公司侵犯著作權(quán)并無(wú)不當(dāng))。在王蒙等六作家訴首都在線案中,法官確定了“網(wǎng)絡(luò)傳播是使用作品的一種方式,作品傳播方式的不同,并不影響著作權(quán)人對(duì)其作品傳播的控制權(quán)利?!痹凇洞髮W(xué)生》雜志社訴263和李翔個(gè)人網(wǎng)頁(yè)侵權(quán)案中,法官確定提供個(gè)人主頁(yè)服務(wù)的網(wǎng)絡(luò)服務(wù)提供商的責(zé)任。
【關(guān)鍵詞】 圖像數(shù)據(jù) 數(shù)據(jù)傳輸 TCP/IP
在印刷圖像在線檢測(cè)系統(tǒng)中,為了提高系統(tǒng)圖像處理運(yùn)算能力,同時(shí)實(shí)現(xiàn)對(duì)系統(tǒng)的有效管理,通常采用將運(yùn)算處理單元同系統(tǒng)管理與顯示單元分開(kāi)的方法,即采用服務(wù)器客戶端的分布式系統(tǒng)結(jié)構(gòu),服務(wù)器與客戶端之間通過(guò)網(wǎng)絡(luò)連接,按照一定的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)數(shù)據(jù)通訊與圖像數(shù)據(jù)傳輸功能。
一、 基于 TCP/IP 協(xié)議的數(shù)據(jù)通訊與圖像數(shù)據(jù)傳輸方法
作為目前廣泛采用的一組完整的網(wǎng)絡(luò)協(xié)議,TCP/IP 協(xié)議的傳輸層協(xié)議為用戶提供了用于虛電路服務(wù)及數(shù)據(jù)傳輸可靠性檢查的傳送控制協(xié)議(TCP)和用于數(shù)據(jù)傳送的數(shù)據(jù)報(bào)協(xié)議(UDP)。同時(shí),Socket 的出現(xiàn),為用戶提供了基于 TCP/ IP 網(wǎng)絡(luò)應(yīng)用編程接口。
在利用 Socket 進(jìn)行通信時(shí),有兩種主要方式:一種叫做流方式(Stream Socket),也稱面向連接方式,在這種方式下兩個(gè)通信的應(yīng)用程序之間先要建立一種虛擬的連接,只有連接建立以后才能開(kāi)始傳輸數(shù)據(jù),這種方式對(duì)應(yīng)的是 TCP 協(xié)議。
第二種叫數(shù)據(jù)報(bào)文方式(Datagram Socket),又稱無(wú)連接方式,在這種方式下,數(shù)據(jù)在傳送過(guò)程中有可能會(huì)丟失,而且,后發(fā)出的數(shù)據(jù)也有可能先收到。由于本系統(tǒng)的客戶端與服務(wù)器端間的通訊對(duì)實(shí)時(shí)性、快速性和可靠性的要求非常高,傳輸效率將會(huì)影響到檢測(cè)過(guò)程所消耗的時(shí)間,過(guò)多的時(shí)間消耗會(huì)導(dǎo)致系統(tǒng)檢測(cè)精度的降低,同時(shí)會(huì)對(duì)圖像的后續(xù)處理產(chǎn)生影響;錯(cuò)誤的或者順序顛倒的數(shù)據(jù)信息可能會(huì)帶來(lái)很嚴(yán)重的后果。
因此,采用 TCP 協(xié)議可以在連接虛電路建立后消除隱含在建立客戶機(jī)/服務(wù)器間通訊時(shí)的非對(duì)稱性,保證通訊兩端的對(duì)等數(shù)據(jù)通信和圖像數(shù)據(jù)的準(zhǔn)確傳輸。
二、基于 TCP 協(xié)議和 Csocket 類的網(wǎng)絡(luò)通信實(shí)現(xiàn)
在基于 TCP 協(xié)議的網(wǎng)絡(luò)通信的實(shí)現(xiàn)過(guò)程中,采用Microsoft Visual C++ 的MFC 類庫(kù)中提供的 CSocket 類,采取面向連接的流方式實(shí)現(xiàn)了客戶端與服務(wù)器端之間的實(shí)時(shí)通訊。其服務(wù)器與客戶端的進(jìn)程。系統(tǒng)通信的工作過(guò)程如下: 在印刷圖像在線檢測(cè)系統(tǒng)中,上位機(jī)作為服務(wù)器,調(diào)用Listen () 函數(shù)進(jìn)行監(jiān)聽(tīng),等待下位機(jī)的連接;下位機(jī)作為客戶機(jī),當(dāng)某一客戶機(jī)要聯(lián)通上位機(jī)時(shí),調(diào)用Connect() 函 數(shù)主 動(dòng) 進(jìn) 行連接。
客戶端在連通服務(wù)器之前先發(fā)送連通請(qǐng)求,并把包括站名、IP 地址、端口地址等客戶機(jī)信息發(fā)送到服務(wù)器。服務(wù)器端對(duì)進(jìn)行連接請(qǐng)求的身份確認(rèn),若身份不符則主動(dòng)中斷連接;若身份得到確認(rèn)則允許連接并發(fā)送確認(rèn)信息到客戶端,開(kāi)始接收由客戶端上傳的數(shù)據(jù)。
三、網(wǎng)絡(luò)連接狀態(tài)的在線診斷
在印刷圖像在線檢測(cè)系統(tǒng)的實(shí)際檢測(cè)過(guò)程中,會(huì)出現(xiàn)這樣一種情況:服務(wù)器端不能實(shí)時(shí)獲得檢測(cè)對(duì)象的缺陷數(shù)據(jù),而此時(shí)系統(tǒng)軟件亦沒(méi)有捕捉到任何異常,從而導(dǎo)致整個(gè)系統(tǒng)缺陷檢測(cè)與缺陷分類功能的失效。因此,為了保證網(wǎng)絡(luò)的正常工作,需要對(duì)網(wǎng)絡(luò)進(jìn)行在線化檢測(cè),從而能夠網(wǎng)絡(luò)及時(shí)進(jìn)行修復(fù)。
引起該檢測(cè)失效故障的可能原因很多,最可能的一種原因是:應(yīng)用程序的其他部件都處于正常運(yùn)行狀態(tài),客戶端已經(jīng)檢測(cè)到產(chǎn)品缺陷,而服務(wù)器端顯示的卻是之前檢測(cè)到的缺陷數(shù)據(jù),即檢測(cè)系統(tǒng)的網(wǎng)絡(luò)通訊功能 失 效 , Client Socket和CSever Socket 之間丟失有效連接,導(dǎo)致客戶端采集到的缺陷數(shù)據(jù)不能實(shí)時(shí)地上傳到服務(wù)器端,或者由于某種原因延遲一段時(shí)間,同客戶端機(jī)之后所檢測(cè)到缺陷數(shù)據(jù)一起上傳至服務(wù)器端,導(dǎo)致缺陷的誤報(bào)與漏報(bào)。為了診斷服務(wù)器端 Csever Socket 與客戶端 Client Socket 之間是否建立有連接,有兩種可能的方法:
(1) 在服務(wù)器端設(shè)置定時(shí)器,定時(shí)向每個(gè)客戶端發(fā)送測(cè)試信息,若客戶端能夠及時(shí)返回確認(rèn)信息,則證明服務(wù)器與客戶端之間建立有連接;否則服務(wù)器端會(huì)繼續(xù)向客戶端發(fā)送測(cè)試信息,若服務(wù)器端在第 n 次(n 值由用戶設(shè)置)發(fā)測(cè)試信息之前收到客戶端的確認(rèn)信息,仍然認(rèn)為服務(wù)器與客戶端之間建立有連接;若超過(guò) n 次,則認(rèn)為二者之間已經(jīng)斷開(kāi)連接。
(2) 在每個(gè)客戶機(jī)端都設(shè)置定時(shí)器,定時(shí)向服務(wù)器端發(fā)送測(cè)試信息,若服務(wù)器端能夠及時(shí)返回確認(rèn)信息,則證明服務(wù)器與客戶端之間建立有連接;否則客戶機(jī)會(huì)繼續(xù)向服務(wù)器端發(fā)送測(cè)試信息,若客戶端在第 n 次發(fā)測(cè)試信息之前收到服務(wù)器端的確認(rèn)信息,仍然認(rèn)為服務(wù)器與客戶端之間建立有連接;若超過(guò) n 次,則認(rèn)為二者之間已經(jīng)斷開(kāi)連接。
關(guān)鍵詞:流控制傳輸協(xié)議;多地址;多流;關(guān)聯(lián)
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)28-0067-03
The Research of Stream Control Transport Protocol
XIONG Wei1,2
(1.Department of Computer Engineering,Chongqing University,Chongqing 400044,China;work and Information Security Center,Chongqing Institute of Communication,Chongqing 400035,China)
Abstract: SCTP(Stream Control Transport Protocol),standardized by the Internet Engineering Task Force(IETF)is a new general-purpose transport protocol which fit to transmit stream media because of it’s new advantages such as multi-stream transport, unordered deliver and so on. In this issue, we describe the design an operation of SCTP, includes the basic datagram format and the concept of Chunk, Association, Stream, etcetera.
Key words: SCTP; multi-homing; mulit-streaming; association
1 引言
隨著高速網(wǎng)絡(luò)的發(fā)展和新需求的出現(xiàn),現(xiàn)代網(wǎng)絡(luò)面臨的核心問(wèn)題是多媒體數(shù)據(jù)業(yè)務(wù)和實(shí)時(shí)通信量的傳輸,以及如何為這些業(yè)務(wù)提供相應(yīng)的服務(wù)質(zhì)量保證?;贗P的包交換網(wǎng)絡(luò)為了支持多媒體等流式通信量采用了多種技術(shù):如采用高性能的交換機(jī)和路由器提升網(wǎng)絡(luò)容量、IP多播傳輸、允許用戶預(yù)留網(wǎng)絡(luò)容量,并為各種業(yè)務(wù)類型分配優(yōu)先級(jí)以及新的運(yùn)輸層協(xié)議等,前三者都是網(wǎng)絡(luò)層的功能,而運(yùn)輸層協(xié)議則是通過(guò)運(yùn)輸層通信端點(diǎn)之間的協(xié)作來(lái)為多媒體網(wǎng)絡(luò)應(yīng)用服務(wù)。傳統(tǒng)的傳輸層協(xié)議TCP由于嚴(yán)格的順序遞交和確認(rèn)重傳帶來(lái)了額外的傳輸流量和較大的時(shí)延,UDP又因?yàn)檫^(guò)于簡(jiǎn)單,缺少必要的可靠傳輸保證,容易導(dǎo)致網(wǎng)絡(luò)擁塞甚至崩潰。流控制傳輸協(xié)議SCTP(Stream Control Transport Protocol),作為一種新的協(xié)議,利用其新特性在可靠服務(wù)和傳輸效率之間取得平衡,達(dá)到應(yīng)用所期望的性能。
2 SCTP(Stream Control Transport Protocol)的基本特性
SCTP是在IP網(wǎng)絡(luò)上使用的一種可靠的通用傳輸層協(xié)議。盡管SCTP協(xié)議最初是為發(fā)送電話信號(hào)而設(shè)計(jì)的(RFC 2960),但帶來(lái)了一個(gè)意外的收獲:它通過(guò)借鑒 UDP 的優(yōu)點(diǎn)解決了TCP的某些局限。經(jīng)過(guò)不斷的研究和擴(kuò)展,SCTP已經(jīng)逐漸發(fā)展成為一種通用的傳輸層協(xié)議,并在許多網(wǎng)絡(luò)操作系統(tǒng)如BSD,Linux中得到了初步實(shí)現(xiàn)。SCTP除了具有TCP同樣的功能之外,還具有更新的設(shè)計(jì)思想和更靈活的數(shù)據(jù)包格式,能更好的擴(kuò)展以滿足某些應(yīng)用的需求。其主要特征如下:
1) 內(nèi)建多地址主機(jī)支持:SCTP中的一對(duì)連接稱為關(guān)聯(lián)(Association),關(guān)聯(lián)兩端的主機(jī)節(jié)點(diǎn)(Endpoint)可以有多個(gè)網(wǎng)絡(luò)地址,從而使一個(gè)SCTP關(guān)聯(lián)可以通過(guò)多條網(wǎng)絡(luò)路徑進(jìn)行數(shù)據(jù)傳輸,見(jiàn)圖1。
2) 保留應(yīng)用層消息邊界:SCTP保留上層數(shù)據(jù)信息的邊界,上層數(shù)據(jù)信息稱為“消息”,傳輸?shù)幕締挝粸橛幸饬x的數(shù)據(jù)段。
3) 單個(gè)關(guān)聯(lián)(Association)多流機(jī)制:SCTP允許用戶在每個(gè)關(guān)聯(lián)中定義子流,數(shù)據(jù)在子流內(nèi)按序傳輸。
3 SCTP的數(shù)據(jù)包格式
SCTP提供了靈活的數(shù)據(jù)塊格式,每個(gè)SCTP數(shù)據(jù)報(bào)都由一個(gè)Common Header(基本首部)和若干Chunk(數(shù)據(jù)塊)組成。
圖2左邊顯示了SCTP的基本數(shù)據(jù)報(bào)文格式。其中基本首部提供了源端口和目的端口,用于完成典型的傳輸層協(xié)議端口復(fù)用功能,驗(yàn)證標(biāo)記對(duì)一個(gè)SCTP連接提供安全驗(yàn)證,保存著在SCTP通過(guò)握手建立連接時(shí)第一次交換的初始標(biāo)簽的值。在一次連接中,任何SCTP數(shù)據(jù)包若不包含這樣一個(gè)標(biāo)簽,到達(dá)時(shí)會(huì)被接收端丟棄。校驗(yàn)和是對(duì)整個(gè)數(shù)據(jù)包的校驗(yàn)。在首部后是一系列Chunks(塊)。Chunk是組成SCTP報(bào)文的基本結(jié)構(gòu),有多種類型,不同類型的塊可用來(lái)傳輸不同的控制信息或數(shù)據(jù);同時(shí)首部中的flags標(biāo)記字段提供了額外的控制信息。豐富的Chunk類型使SCTP可以采用不同類型的Chunk實(shí)現(xiàn)各種傳輸控制機(jī)制。
4 SCTP的消息(message)和流(stream)
下面給出SCTP協(xié)議中數(shù)據(jù)的基本載體數(shù)據(jù)塊的格式描述,如圖3。
SCTP協(xié)議將上層數(shù)據(jù)信息稱為用戶消息(user message),在傳輸中SCTP保留上層數(shù)據(jù)信息的邊界,傳輸?shù)幕締挝粸橛幸饬x的數(shù)據(jù)段。因此SCTP稱為“面向消息”的傳輸協(xié)議。
SCTP提出了數(shù)據(jù)流的概念,如圖4所示,每個(gè)數(shù)據(jù)塊中不僅有傳輸序號(hào)TSN,還攜帶了流標(biāo)識(shí)SID(Stream ID)和流序號(hào)SSN(Stream Sequence Number)。用戶可以在一個(gè)連接中建立多個(gè)流,每個(gè)流分配一個(gè)SID,每個(gè)流隊(duì)列中的用戶數(shù)據(jù)由流序號(hào)SSN表明順序。在SCTP中引入一個(gè)連接多個(gè)流的機(jī)制解決了使用TCP傳輸時(shí)出現(xiàn)的隊(duì)首阻塞問(wèn)題。允許某些應(yīng)用程序根據(jù)需求將邏輯上不相關(guān)的數(shù)據(jù)分離為多個(gè)流進(jìn)行傳輸往往很有意義,如一個(gè)多媒體視頻會(huì)議系統(tǒng)中的多路語(yǔ)音信號(hào)在各自的流中傳輸,彼此之間不會(huì)互相阻塞。
如圖4所示,節(jié)點(diǎn)根據(jù)應(yīng)用程序的要求維護(hù)不同的發(fā)送隊(duì)列,當(dāng)接到上層的消息后根據(jù)MTU等網(wǎng)絡(luò)情況決定是否拆解并轉(zhuǎn)化為Data Chunk進(jìn)行傳輸。并且將會(huì)設(shè)置Data Chunk中flags字段的相應(yīng)位,flags字段共三位,其中的U位為是否按序遞交用戶消息的標(biāo)志,B,E位分別代表本Data Chunk包含一個(gè)用戶消息的開(kāi)始或結(jié)束,如果本數(shù)據(jù)塊包含一條完整的用戶消息,則BE都置為1,如包含消息中間的內(nèi)容則都置為0。連接的對(duì)端收到DataChunk后根據(jù)流序號(hào)SSN和flags字段重組用戶消息交給應(yīng)用層。
SCTP提供按序遞交和無(wú)序遞交兩種選擇,Data Chunk中的flags字段中的U位就表明了該數(shù)據(jù)所需要的服務(wù)是按序遞交或是無(wú)序遞交。當(dāng)采用無(wú)序遞交時(shí),SCTP就具有了類似UDP的一些特征,能夠盡快的將數(shù)據(jù)發(fā)往上層,適用于一些實(shí)時(shí)應(yīng)用。
實(shí)際上,通過(guò)引入流和無(wú)序遞交機(jī)制,SCTP實(shí)現(xiàn)了嚴(yán)格有序傳輸(類似TCP),部分有序傳輸(部分流內(nèi)無(wú)序遞交)和無(wú)序傳輸(類似UDP)。
5 SCTP的基本傳輸機(jī)制
5.1 連接的建立
SCTP在傳輸前首先建立連接,稱為一個(gè)關(guān)聯(lián),通過(guò)四次握手,兩端SCTP主機(jī)交換地址信息和其他通信狀態(tài)。如圖5所示。
請(qǐng)求連接者發(fā)出INIT請(qǐng)求,INIT消息的接收端不必保存任何狀態(tài)信息或者分配任何資源,這樣就可防范SYN Flooding等DoS攻擊。它在發(fā)送響應(yīng)INIT的INIT-ACK消息時(shí),采用了一種機(jī)制―“狀態(tài)Cookie”,該Cookie具有發(fā)送端要建立連接所需的全部信息。
INIT和INIT-ACK都必須包含建立初始狀態(tài)所需的參數(shù):一組IP地址,初始TSN,被接收的SCTP包中必須含有的初始標(biāo)簽,每一端請(qǐng)求發(fā)出的流數(shù)目和每一端能支持接收的流數(shù)目。交換完這些消息之后,INIT的發(fā)送端以COOKIE-ECHO消息的方式發(fā)送回狀態(tài)Cookie。接收端根據(jù)所接收到的COOKIE-ECHO中的狀態(tài)Cookie,完整地重建自己的狀態(tài),并回送COOKIE-ACK來(lái)確認(rèn)關(guān)聯(lián)已建立。注意COOKIE-ECHO和COOKIE-ACK都可將用戶數(shù)據(jù)消息綁定到各自的包中,可以加快數(shù)據(jù)的發(fā)送。
5.2 傳輸過(guò)程
在建立連接以后,接收方收到數(shù)據(jù)要發(fā)回確認(rèn),接收方維護(hù)一個(gè)累計(jì)已確認(rèn)數(shù)據(jù)序號(hào)Cm-TSN(Cumulative Transport Sequence Number),定時(shí)器到期未收到確認(rèn)則重傳數(shù)據(jù)包,因此SCTP和TCP一樣,可以提供有連接的可靠傳輸服務(wù)。通過(guò)對(duì)數(shù)據(jù)攜帶的一個(gè)傳輸序號(hào)TSN(Transport Sequence Number)進(jìn)行選擇確認(rèn)(Selective ACK)。如圖6。
在SCTP中,TSN保證整個(gè)關(guān)聯(lián)的可靠性,而SID/SSN保證整個(gè)流的有序性,實(shí)現(xiàn)了在傳輸中將數(shù)據(jù)的可靠性與有序性獨(dú)立分開(kāi)。TSN類似于TCP中的確認(rèn)序號(hào),然而在TCP中,確認(rèn)序號(hào)既用于確認(rèn)保證可靠傳輸,又用于接收方排序,而在SCTP中TSN與SID/SSN各司其職。
SCTP可以在一個(gè)連接中傳輸多條數(shù)據(jù)流,允許應(yīng)用程序根據(jù)需要傳輸多個(gè)性質(zhì)不同的流,而接收方對(duì)每個(gè)流按其SID/SSN進(jìn)行處理,互不干擾,當(dāng)一個(gè)流正在等待下一個(gè)非順序的用戶消息時(shí),其他流的發(fā)送會(huì)繼續(xù)。
對(duì)于數(shù)據(jù)包丟失的發(fā)現(xiàn),SCTP即使發(fā)現(xiàn)接收序號(hào)有缺口或順序錯(cuò)亂,仍會(huì)發(fā)送后面的數(shù)據(jù)。從圖6可以看出,當(dāng)序號(hào)為7的數(shù)據(jù)未到達(dá)時(shí),發(fā)送端依然進(jìn)行后續(xù)包的傳送。
SCTP選擇確認(rèn)的特點(diǎn)還在于SACK Chunk的設(shè)計(jì),實(shí)際上TCP的ACK機(jī)制也能提供一定的選擇確認(rèn)信息,然而SCTP的SACK機(jī)制通過(guò)SACK Chunk提供了更多的數(shù)據(jù)確認(rèn)信息。圖7顯示了SACK Chunk的格式。
如圖7所示,在SCTP SACK確認(rèn)塊中包含了在一定的時(shí)間內(nèi)盡可能多的信息,將已收到的連續(xù)數(shù)據(jù)稱為Gap,通過(guò)若干包含起始和終止傳輸序號(hào)(TSN)的Gap字段表示那些已收到的連續(xù)數(shù)據(jù)塊,通過(guò)若干Duplicate TSN字段表示每個(gè)重復(fù)收到的數(shù)據(jù)包,當(dāng)對(duì)方端點(diǎn)接收到SACK Chunk后就可以根據(jù)這些信息做出是否重傳或調(diào)整發(fā)送窗口,清空緩存等工作。
6 SCTP的多地址和多路徑支持
SCTP通過(guò)多地址支持實(shí)現(xiàn)傳輸?shù)穆窂饺哂?。?dāng)連接中至少有一個(gè)端點(diǎn)使用多個(gè)IP地址時(shí),就形成了多條可能的傳輸路徑,其中主要使用一條作為主傳輸路徑,其他的作為冗余路徑在必要時(shí)啟用。具體過(guò)程如下:
通信方在發(fā)送的INIT或INIT-ACK消息中列出自己所具有的IP地址,通過(guò)一定的機(jī)制選擇特定的一對(duì)地址形成的地址對(duì)(pair)作為主路徑進(jìn)行數(shù)據(jù)傳輸,其余可能的地址對(duì)作為冗余路徑。
在傳輸?shù)倪^(guò)程中定時(shí)利用Heartbeat/HeartbeatACK消息塊來(lái)監(jiān)測(cè)和更新主路徑和冗余路徑的路徑狀態(tài)(active或inactive)。具體操作是通過(guò)統(tǒng)計(jì)每條路徑上的數(shù)據(jù)傳輸次數(shù)(包括DATA和HEARTBEAT),如果次數(shù)達(dá)到一定的上限,該路徑的狀態(tài)就成為inactive??梢赃x用另一路徑用于傳輸,實(shí)現(xiàn)了網(wǎng)絡(luò)層的容錯(cuò)。
在SCTP目前的研究和實(shí)現(xiàn)中多路徑特性只用于網(wǎng)絡(luò)容錯(cuò),也就是主路徑失效時(shí)啟動(dòng)備份路徑,更進(jìn)一步的考慮是利用SCTP的多址特性實(shí)現(xiàn)負(fù)載分擔(dān)(LoadSharing)。
7 SCTP的可擴(kuò)展性
作為一個(gè)仍在發(fā)展和改進(jìn)的協(xié)議,SCTP的設(shè)計(jì)者從設(shè)計(jì)之初就充分考慮了協(xié)議的可擴(kuò)展性。下面簡(jiǎn)單分析SCTP的一個(gè)具體擴(kuò)展:確認(rèn)序號(hào)移動(dòng)通告。
多媒體數(shù)據(jù)的特點(diǎn)是可以允許少量數(shù)據(jù)的丟失,對(duì)重傳引入的延時(shí)和效率問(wèn)題十分敏感。例如在流媒體視頻傳輸中,遲到的重傳數(shù)據(jù)往往已經(jīng)無(wú)效,重傳就沒(méi)有必要。為在可靠性和實(shí)時(shí)性之間取得平衡,SCTP引入了一種新的Chunk類型(見(jiàn)圖8),稱為“確認(rèn)序號(hào)移動(dòng)通告”(Forward Cumulative TSN chunk)。
在采用PR-SCTP的系統(tǒng)中,發(fā)送方在接收方請(qǐng)求重傳時(shí)將根據(jù)一定的策略,決定是否有必要重傳該數(shù)據(jù),如果發(fā)送方認(rèn)為數(shù)據(jù)不太重要或已經(jīng)過(guò)時(shí),則發(fā)送確認(rèn)序號(hào)移動(dòng)通告Fwd-CmTSN,指示接收方修改累計(jì)確認(rèn)序號(hào)Cm-TSN,接收方在收到確認(rèn)序號(hào)移動(dòng)通告時(shí)則會(huì)向前增大Cm-ACK的值,放棄該數(shù)據(jù),不再請(qǐng)求重傳而繼續(xù)后續(xù)數(shù)據(jù)的傳輸。由于STCP中TSN只負(fù)責(zé)重傳保證可靠傳輸,為了通知接收方哪些數(shù)據(jù)已放棄,確認(rèn)序號(hào)移動(dòng)通告中還可以攜帶這些放棄數(shù)據(jù)的流號(hào)和流序號(hào)。
確認(rèn)序號(hào)移動(dòng)通告保留了確認(rèn)重傳機(jī)制的同時(shí),“跳過(guò)”某些(不太重要的)數(shù)據(jù),實(shí)現(xiàn)了部分可靠的傳輸,為某些不需要完全可靠傳輸?shù)膽?yīng)用程序提供了很大的靈活性。
8 結(jié)束語(yǔ)
總之,作為一種新的傳輸層協(xié)議,SCTP和傳統(tǒng)協(xié)議相比有更多的優(yōu)點(diǎn)。從2000年10月份才成為RFC規(guī)范以后,開(kāi)始進(jìn)入所有的主流操作系統(tǒng),包括 GNU/Linux、BSD和Solaris。在Microsoft?R Windows?R 操作系統(tǒng)上也有第三方的商業(yè)包可以使用。在獲得高可用性的同時(shí),應(yīng)用程序也已經(jīng)開(kāi)始使用SCTP作為自己的主要傳輸機(jī)制。諸如FTP和HTTP之類的傳統(tǒng)應(yīng)用程序已經(jīng)在SCTP的特性基礎(chǔ)上進(jìn)行了構(gòu)建。其他一些協(xié)議也正在開(kāi)始使用SCTP,例如會(huì)話初始化協(xié)議(Session Initiation Protocol,SIP)和通用通道信號(hào)系統(tǒng)7(SS7)。在商業(yè)領(lǐng)域中,也可以在Cisco的IOS中找到SCTP的影子。
隨著SCTP被吸納到2.6版本的Linux內(nèi)核中,現(xiàn)在可以構(gòu)建并部署高可用性、高可靠性的網(wǎng)絡(luò)應(yīng)用程序。作為一種基于IP的協(xié)議,SCTP不但可以無(wú)縫地替換TCP和UDP,而且擴(kuò)展了很多新服務(wù),并且對(duì)安全性也有了很大的提高。從發(fā)展的趨勢(shì)來(lái)看,SCTP它提供了更加高效和適用的傳輸機(jī)制,有重要的研究意義和廣闊的發(fā)展前景。
參考文獻(xiàn):