首頁>技術>

OSI體系結構

應用層、表示層、會話層、運輸層、網路層、資料鏈路層、物理層;

TCP/IP體系結構

應用層(各種應用層協議如TELNET、FTP、SMTP、HTTP)、運輸層(TCP或UDP)、網際層IP、網路介面層;

五層協議體系結構

應用層、運輸層、網路層、資料鏈路層、物理層;

應用層:是透過應用程序間的互動來完成特定網路應用。應用程序指執行在主機上的程式。

運輸層:負責為不同主機程序之間的通訊提供通用的資料傳輸服務。應用程序利用該服務傳送應用層報文。主要包括TCP、UDP協議。

網路層:各個主機中進行通訊的2個計算機之間可能會透過很多資料鏈路,也可能透過通訊子網。網路層任務就是選擇合適的網間路由和交換點,確保資料及時傳輸。

資料鏈路層:將網路層傳下來的IP資料報組裝成幀,在2個相鄰點的鏈路上傳送幀,每一幀包括資料和必要的控制資訊(如同步資訊、地址資訊、差錯控制等)。在接收資料時,控制資訊使接收端能知道一個幀從哪個 位元開始和到那個位元結束。

物理層:是實現相鄰計算機節點之間位元流的透明傳送,儘可能遮蔽掉具體傳輸介質和物理裝置差異。

TCP報文首部

源埠和目的埠,各佔2個位元組;

seq序號:佔4個位元組,TCP連線中傳送的位元組流中的每個位元組都是按順序編號的。如一段報文序號欄位值是501,且攜帶100位元組,那麼下一個報文段的資料序號應該從601開始;

ack確認號:4個位元組,是期望收到對方下一個報文的第一個資料位元組的序號。A收到報文,其序列號欄位是501,資料長度100位元組,那麼A期望收到的資料序號是601。於是A在傳送確認報文段中的確認號就是601。

資料偏移:4個位元組 ,他指出TCP報文的資料距離TCP報文段的起始處有多遠。

緊急URG:當URG=1表明緊急指標欄位有效。告訴系統報文段中有緊急資料。

ACK確認:僅當ACK=1時,確認號欄位才有效。TCP中規定,在連線建立後所有報文的傳輸都必須把ACK置為1;

推送PSH:2個應用程序進行互動式通訊,有時一端應用程序希望鍵入一個命令後立即就能收到對方響應,這時就將PSH置為1;

復位RST:當RST=1,表明TCP連線中出現嚴重差錯,必須釋放再重新建立連線;

同步SYN:在建立連線時用來同步序號,當SYN=1,ACK=0,表明連線請求報文,若同意連線,則響應報文中應該使SYN=1,ACK=1;

終止FIN:用來釋放連線。當FIN=1,表示報文傳送方資料已經發送完畢且要求釋放;

視窗:2個位元組,是通知接收方,傳送本報文你需要有多大空間來接受;

檢驗和:2位元組,校驗首部和資料2部分;

緊急指標:2位元組,指出本報文段中的緊急資料位元組數;

三次握手

TCP服務端先建立傳輸控制塊TCB,時刻準備接受客戶程序的連線,並進去LISTEN監聽狀態;

TCP客戶端程序也是先建立傳輸控制塊TCB,併發出連線請求報文。此時報文首部中的同步位SYN=1,同時初始化序列號seq=x。客戶端程序進入SYN-SENT(同步已傳送狀態)。在TCP規定,SYN=1報文不能攜帶資料,但消耗一個序號。

TCP服務端收到請求報文後,若同意連線,則發出確認報文ACK=1,SYN=1,確認號ack=x+1(x為客戶端傳送的seq序列號),同時也為自己初始化一個序列號seq=y。服務端進入SYN-RCVD(同步收到狀態)。此報文也不攜帶資料,但消耗一個序列號。

TCP客戶端收到確認後,還要向伺服器給出確認報文ACK=1,ack=y+1,自己序號seq=x+1。此時TCP連線已經建立,客戶端進入ESTABLISHED(已建立連線)。此處ACK報文段可以帶資料,如不帶資料不消耗序號。

如同 2人剛開始打電話,

甲:你聽得到我說話嗎?

乙:我聽得到,你聽到我說話嗎?

甲:我也聽得到你說話!

後面開始愉快的聊天了。。。。

四次揮手

客戶端發出連線釋放報文,且停止傳送資料。報文首部FIN=1,其序列號seq=u(已經傳送過來的資料的最後一個位元組序號+1)。客戶端進入FIN-WAIT-1(終止等待1狀態)。FIN報文即時不攜帶資料,也會消耗一個序號。

服務端收到連線釋放報文,發出確認報文,ACK=1,ack=u+1, 帶上自己的序列號seq=v,伺服器進入CLOSE-WAIT(關閉等待狀態。客戶端處於半關閉狀態,已經沒有資料需要傳送了。但伺服器需要傳送資料,客戶端依然接受。這狀態需要持續一段時間,也就是整個CLOSE-WAIT狀態持續時間。

客戶端收到服務端的確認請求後,客戶端進入FIN-WAIT-2(終止等待2)狀態,等待服務端傳送連線釋放報文,在這之前還能接受服務端傳送的最後資料。

伺服器將最後資料傳送完畢後,就向客戶端傳送釋放連線報文FIN=1,ack=u+1,由於在半關閉狀態,服務端可能又傳送資料,此時序列號seq=w,然後服務端進入LAST-ACK(最後確認狀態),等待客戶端確認。

客戶端收到服務端釋放報文後,發出確認報文ACK=1,ack=w+1,且自己序列號seq=u+1。客戶端進入TIME-WAIT時間等待狀態。此時TCP還沒斷開連線,需要經過2*MSL最長報文段壽命的時間後,客戶端撤銷TCB後,進入CLOSED狀態。

服務端收到客戶端確認報文後,立即進入CLOSED狀態。在撤銷TCB後,結束TCP連線。服務端比客戶端早結束TCP連線。

如同 2人電話要打完了,

甲:我沒啥要說的了

乙:我知道了

乙:我還有些話要講,就這個應該。。

乙:我講完了

甲:好的,知道了,下次聊

為什麼客戶端最後還要等待2MSL

MSL(Maximum Segment Lifetime)

保障客戶端最後發的ACK報文能到達服務端,這個ACK報文可能會丟失,導致服務端以為客戶端沒有收到自己傳送的FIN+ACK報文的請求斷開,並導致服務端重新發送此報文,此時客戶端會根據這個重傳的報文做出應答確認發給服務端,並重新開啟2MSL計時器。

TCP連線中,客戶端突然出現宕機,服務端會怎麼處理

TCP中有一個保活計時器,服務端會在每次收到客戶端請求後復位這個計時器,時間通常2小時。若2小時內沒收到任何請求,服務端會發送一個探測報文,以後每隔75秒傳送一次。在接連發送10次探測報文後任然沒應答,服務端認為客戶端異常並會關閉連線。

15
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Cookie Session Token 區別與聯絡