左曉靜 趙永樂 王榮
摘要:TCP/IP協(xié)議在網(wǎng)絡(luò)連接中應(yīng)用越來越廣泛,而該協(xié)議的核心協(xié)議TCP就變得更加重要了。通過Wireshark工具軟件抓包對(duì)TCP的三次握手進(jìn)行分析,根據(jù)每次握手的具體數(shù)據(jù)分析每次握手的意義,使學(xué)習(xí)者對(duì)TCP有較深的認(rèn)識(shí)。
關(guān)鍵詞:Wireshark;TCP協(xié)議;抓包分析
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2019)05-0067-02
我們都知道計(jì)算機(jī)聯(lián)網(wǎng)的靠的就是協(xié)議,在不同的網(wǎng)絡(luò)中使用的網(wǎng)絡(luò)協(xié)議也不相同,常用的網(wǎng)絡(luò)協(xié)議有OSI參考模型協(xié)議、TCP/IP協(xié)議、X.25協(xié)議等。在這些網(wǎng)絡(luò)協(xié)議中最常用的是TCP/IP協(xié)議。雖然OSI是國際標(biāo)準(zhǔn)化部門制定的,但這種協(xié)議在實(shí)用應(yīng)用中的價(jià)值并不大,在現(xiàn)實(shí)中只能作為參考模型來用。而具有實(shí)用價(jià)值的就是TCP/IP協(xié)議,這種協(xié)議的應(yīng)用非常廣泛,最初只應(yīng)用在局域網(wǎng)中,隨著它的發(fā)展,現(xiàn)在也已應(yīng)用到了城域網(wǎng)以至于廣域網(wǎng)中。并且TCP/IP協(xié)議對(duì)其他協(xié)議也有很好的兼容性。
1 TCP協(xié)議概述
TCP(傳輸控制協(xié)議)是TCP/IP協(xié)議棧中的傳輸層協(xié)議,它通過序列確認(rèn)以及包重發(fā)機(jī)制,提供可靠的數(shù)據(jù)流發(fā)送和到應(yīng)用程序的虛擬連接服務(wù)。與 IP 協(xié)議相結(jié)合,TCP 組成了因特網(wǎng)協(xié)議的核心。[1]
TCP有三個(gè)特點(diǎn),一是面向連接,二是提供端到端的可靠傳輸,三是端到端流量控制。[2]
TCP協(xié)議在通信前先要建立連接,在通信結(jié)束后還要拆除連接。它使用3次握手建立一條連接,這三次握手中初始化了傳輸可靠性以及數(shù)據(jù)傳送順序等必要的信息,并分配相應(yīng)資源。數(shù)據(jù)通信完成后TCP使用4次揮手拆除一條連接,為何需要4次呢?因?yàn)門CP是一個(gè)全雙工協(xié)議,數(shù)據(jù)的傳送是雙向的必須對(duì)每個(gè)方向的信道都進(jìn)行拆除,最后收回資源。提供端到端的可靠傳輸是靠確認(rèn)號(hào)來實(shí)現(xiàn)的,TCP在發(fā)送數(shù)據(jù)時(shí)發(fā)送端每發(fā)送一個(gè)數(shù)據(jù)包,就要等待接收端發(fā)來的確認(rèn)信息,只有收到接收端的確認(rèn)信息后發(fā)送端才能發(fā)送下一個(gè)數(shù)據(jù)包。如果在規(guī)定時(shí)間RTT中沒有收到確認(rèn)信息,則該數(shù)據(jù)包重發(fā)。在這個(gè)技術(shù)中發(fā)送方的等待時(shí)間RTT是個(gè)關(guān)鍵,RTT設(shè)置過長會(huì)影響網(wǎng)絡(luò)速度,過短會(huì)出現(xiàn)數(shù)據(jù)包重復(fù)發(fā)送現(xiàn)象。端到端的流量控制是使用窗口機(jī)制來實(shí)現(xiàn)的。TCP協(xié)議里窗口機(jī)制有2種:一種是固定的窗口大??;一種是滑動(dòng)的窗口。這里所說的窗口大小就是TCP一次傳輸?shù)臄?shù)據(jù)個(gè)數(shù)。在傳送數(shù)據(jù)前對(duì)所有數(shù)據(jù)幀按順序編號(hào),發(fā)送方在發(fā)送數(shù)據(jù)時(shí)始終保持著一個(gè)發(fā)送窗口,只有把數(shù)據(jù)幀放在發(fā)送窗口內(nèi)才允許被發(fā)送;同時(shí)接收方也始終保持著一個(gè)接收窗口,接收端只能接收窗口內(nèi)的數(shù)據(jù)幀。這樣通過調(diào)整發(fā)送方窗口和接收方窗口的大小就能實(shí)現(xiàn)流量控制。
2 TCP的工作過程分析
2.1 Wireshark簡介
Wireshark(前稱Ethereal)是一個(gè)網(wǎng)絡(luò)封包分析軟件。網(wǎng)絡(luò)封包分析軟件的功能是擷取網(wǎng)絡(luò)封包,并盡可能顯示出最為詳細(xì)的網(wǎng)絡(luò)封包資料。Wireshark使用WinPCAP作為接口,直接與網(wǎng)卡進(jìn)行數(shù)據(jù)報(bào)文交換。網(wǎng)絡(luò)管理員使用Wireshark來檢測網(wǎng)絡(luò)問題,網(wǎng)絡(luò)安全工程師使用Wireshark來檢查資訊安全相關(guān)問題,開發(fā)者使用Wireshark來為新的通訊協(xié)定除錯(cuò),普通使用者使用Wireshark來學(xué)習(xí)網(wǎng)絡(luò)協(xié)定的相關(guān)知識(shí)。[3]
2.2 TCP三次握手
TCP是一個(gè)面向連接的協(xié)議,它使用三次握手來建立連接,如圖1所示。
下面我們通過訪問網(wǎng)站來使用Wireshark工具抓包來分析TCP的三次握手。首先打開Wireshark軟件,打開瀏覽器輸入http://www.cr173.com,在wireshark中輸入http過濾, 然后選中GET /tankxiao HTTP/1.1的那條記錄,右鍵然后點(diǎn)擊"Follow TCP Stream",和網(wǎng)站進(jìn)行數(shù)據(jù)包傳送。打開Wireshark我們可以看到建立連接時(shí)的三次握手,如圖2所示。
在三次握手后才開始http的數(shù)據(jù)包傳送。展開Wireshark中的記錄可能看到每次握手的詳細(xì)信息(這里不再展示),三次握手的詳細(xì)信息如表1所示。
2.3 過程分析
三次握手的主要任務(wù)是進(jìn)行一些初始化,包括通信雙方序列號(hào)、確認(rèn)號(hào)、窗口大小等信息。
第一次握手是由client發(fā)起的,client向server發(fā)送一個(gè)SYN的TCP報(bào)文,其中包含連接的初始序列號(hào)x和一個(gè)窗口大小(用來控制端到端流量控制)。
第二次握手是由server發(fā)起的,server收到client發(fā)送過來的SYN申請(qǐng)連接報(bào)文后,向client發(fā)送一個(gè)含有SYN+ACK的TCP確認(rèn)報(bào)文,該報(bào)文中服務(wù)器的初始序列號(hào)為y、把客戶端的序列號(hào)x+1作為對(duì)client的確認(rèn)號(hào)和一個(gè)窗口大小。
第三次握手是由client發(fā)起的,client接收到server返回的SYN+ACK確認(rèn)報(bào)文后,再向server發(fā)送一個(gè)確認(rèn)號(hào)y+1和序號(hào)x+1的ACK報(bào)文,連接就建立了。
2.4 四次揮手
由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這就是為什么建立連接要三次,拆除連接要四次。拆除連接的過程:(1)客戶端A發(fā)送一個(gè)FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。(2)服務(wù)器B收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1,和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。(3)服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個(gè)FIN給客戶端A。(4)客戶端A發(fā)回ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。[4]
3 小結(jié)
TCP是TCP/IP協(xié)議中常用的一個(gè)協(xié)議,也是最復(fù)雜的網(wǎng)絡(luò)協(xié)議之一,在實(shí)際應(yīng)用中它有很多優(yōu)點(diǎn),能提供面向連接的,可靠的傳輸,還能對(duì)數(shù)據(jù)流量進(jìn)行控制。但正是它基于連接,所以影響了傳輸速度比較適合大數(shù)據(jù)的傳輸,對(duì)小量實(shí)時(shí)數(shù)據(jù)的傳輸則不適用。
參考文獻(xiàn):
[1] 馮建文,董劍.改進(jìn)的TCP應(yīng)用層協(xié)議在遠(yuǎn)程實(shí)驗(yàn)系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2018(12):29-32.
[2] 陳娟.基于TCP/IP的局域網(wǎng)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦(理論版),2018(22):99-101.
[3] 百度百科-Wireshark.https://baike.baidu.com/item/Wireshark/10876564?fr=aladdin.
[4] 百度百科-tcp四次握手.https://baike.baidu.com/item/Wireshark/10876564?fr=aladdin.
【通聯(lián)編輯:代影】