一:TCP/IP相關(guān)問(wèn)題
連接端及標(biāo)記 IP地址和端口被稱作套接字,它代表一個(gè)TCP連接的一個(gè)連接端。為了獲得TCP服務(wù),必須在發(fā)送機(jī)的一個(gè)端口上和接收機(jī)的一個(gè)端口上建立連接。TCP連接用兩個(gè)連接端來(lái)區(qū)別,也就是(連接端1,連接端2)。連接端互相發(fā)送數(shù)據(jù)包。 一個(gè)TCP數(shù)據(jù)包包括一個(gè)TCP頭,后面是選項(xiàng)和數(shù)據(jù)。一個(gè)TCP頭包含6個(gè)標(biāo)志位。它們的意義分別為: SYN: 標(biāo)志位用來(lái)建立連接,讓連接雙方同步序列號(hào)。如果SYN=1而ACK=0,則表示該數(shù)據(jù)包為連接請(qǐng)求,如果SYN=1而ACK=1則表示接受連接。 FIN: 表示發(fā)送端已經(jīng)沒(méi)有數(shù)據(jù)要求傳輸了,希望釋放連接。 RST: 用來(lái)復(fù)位一個(gè)連接。RST標(biāo)志置位的數(shù)據(jù)包稱為復(fù)位包。一般情況下,如果TCP收到的一個(gè)分段明顯不是屬于該主機(jī)上的任何一個(gè)連接,則向遠(yuǎn)端發(fā)送一個(gè)復(fù)位包。 URG: 為緊急數(shù)據(jù)標(biāo)志。如果它為1,表示本數(shù)據(jù)包中包含緊急數(shù)據(jù)。此時(shí)緊急數(shù)據(jù)指針有效。 ACK: 為確認(rèn)標(biāo)志位。如果為1,表示包中的確認(rèn)號(hào)時(shí)有效的。否則,包中的確認(rèn)號(hào)無(wú)效。 PSH: 如果置位,接收端應(yīng)盡快把數(shù)據(jù)傳送給應(yīng)用層。 TCP連接的建立 TCP是一個(gè)面向連接的可靠傳輸協(xié)議。面向連接表示兩個(gè)應(yīng)用端在利用TCP傳送數(shù)據(jù)前必須先建立TCP連接。 TCP的可靠性通過(guò)校驗(yàn)和,定時(shí)器,數(shù)據(jù)序號(hào)和應(yīng)答來(lái)提供。通過(guò)給每個(gè)發(fā)送的字節(jié)分配一個(gè)序號(hào),接收端接收到數(shù)據(jù)后發(fā)送應(yīng)答,TCP協(xié)議保證了數(shù)據(jù)的可靠傳輸。數(shù)據(jù)序號(hào)用來(lái)保證數(shù)據(jù)的順序,剔除重復(fù)的數(shù)據(jù)。在一個(gè)TCP會(huì)話中,有兩個(gè)數(shù)據(jù)流(每個(gè)連接端從另外一端接收數(shù)據(jù),同時(shí)向?qū)Ψ桨l(fā)送數(shù)據(jù)),因此在建立連接時(shí),必須要為每一個(gè)數(shù)據(jù)流分配ISN(初始序號(hào))。為了了解實(shí)現(xiàn)過(guò)程,我們假設(shè)客戶端C希望跟服務(wù)器端S建立連接,然后分析連接建立的過(guò)程(通常稱作三階段握手): 1: C --SYN XXà S 2: C ?-SYN YY/ACK XX+1------- S 3: C ----ACK YY+1--à S 1:C發(fā)送一個(gè)TCP包(SYN 請(qǐng)求)給S,其中標(biāo)記SYN(同步序號(hào))要打開(kāi)。SYN請(qǐng)求指明了客戶端希望連接的服務(wù)器端端口號(hào)和客戶端的ISN(XX是一個(gè)例子)。 2:服務(wù)器端發(fā)回應(yīng)答,包含自己的SYN信息ISN(YY)和對(duì)C的SYN應(yīng)答,應(yīng)答時(shí)返回下一個(gè)希望得到的字節(jié)序號(hào)(YY+1)。 3:C 對(duì)從S 來(lái)的SYN進(jìn)行應(yīng)答,數(shù)據(jù)發(fā)送開(kāi)始。 一些實(shí)現(xiàn)細(xì)節(jié) 大部分TCP/IP實(shí)現(xiàn)遵循以下原則: 1:當(dāng)一個(gè)SYN或者FIN數(shù)據(jù)包到達(dá)一個(gè)關(guān)閉的端口,TCP丟棄數(shù)據(jù)包同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。 2:當(dāng)一個(gè)RST數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口,RST被丟棄。 3:當(dāng)一個(gè)RST數(shù)據(jù)包到達(dá)一個(gè)關(guān)閉的端口,RST被丟棄。 4:當(dāng)一個(gè)包含ACK的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄,同時(shí)發(fā)送一個(gè)RST數(shù)據(jù)包。 5:當(dāng)一個(gè)SYN位關(guān)閉的數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄。 6:當(dāng)一個(gè)SYN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),正常的三階段握手繼續(xù),回答一個(gè)SYN ACK數(shù)據(jù)包。 7:當(dāng)一個(gè)FIN數(shù)據(jù)包到達(dá)一個(gè)監(jiān)聽(tīng)端口時(shí),數(shù)據(jù)包被丟棄。"FIN行為"(關(guān)閉得端口返回RST,監(jiān)聽(tīng)端口丟棄包),在URG和PSH標(biāo)志位置位時(shí)同樣要發(fā)生。所有的URG,PSH和FIN,或者沒(méi)有任何標(biāo)記的TCP數(shù)據(jù)包都會(huì)引起"FIN行為"。 共3頁(yè): 1 [2] [3] 下一頁(yè)


