計算機網絡基礎

一.OIS七層模型

二.TCP、IP協議

TCP有6種標示:SYN(建立聯機) ACK(確認) PSH(傳送) FIN(結束) RST(重置) URG(緊急)

1.TCP三次握手:

  • 第一次握手
    客戶端向服務器發出連接請求報文,這時報文首部中的同部位SYN=1,同時隨機生成初始序列號 seq=x,此時,TCP客戶端進程進入了 SYN-SENT(同步已發送狀態)狀態。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶數據,但需要消耗掉一個序號。這個三次握手中的開始。表示客戶端想要和服務端建立連接。

  • 第二次握手
    TCP服務器收到請求報文後,如果同意連接,則發出確認報文。確認報文中應該 ACK=1,SYN=1,確認號是ack=x+1,同時也要爲自己隨機初始化一個序列號 seq=y,此時,TCP服務器進程進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶數據,但是同樣要消耗一個序號。這個報文帶有SYN(建立連接)和ACK(確認)標誌,詢問客戶端是否準備好。

  • 第三次握手
    TCP客戶進程收到確認後,還要向服務器給出確認。確認報文的ACK=1,ack=y+1,此時,TCP連接建立,客戶端進入ESTABLISHED(已建立連接)狀態。TCP規定,ACK報文段可以攜帶數據,但是如果不攜帶數據則不消耗序號。這裏客戶端表示我已經準備好。

爲何需要三次確認?
client發送了第一個連接的請求報文,但是由於網絡不好,這個請求沒有立即到達服務端,而是在某個網絡節點中滯留了,直到某個時間纔到達server,本來這已經是一個失效的報文,但是server端接收到這個請求報文後,還是會想client發出確認的報文,表示同意連接。假如不採用三次握手,那麼只要server發出確認,新的建立就連接了,但其實這個請求是失效的請求,client是不會理睬server的確認信息,也不會向服務端發送確認的請求,但是server認爲新的連接已經建立起來了,並一直等待client發來數據,這樣,server的很多資源就沒白白浪費掉了,採用三次握手就是爲了防止這種情況的發生,server會因爲收不到確認的報文,就知道client並沒有建立連接。這就是三次握手的作用。

2.TCP四次揮手

  • 第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳輸,Client進入FIN_WAIT_1;
  • 第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1,Server進入CLOSE_WAIT狀態;
  • 第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳輸,Server進入LAST_ACK狀態;
  • 第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。

爲什麼需要四次揮手才能斷開連接?
因爲全雙工,發送方和接收方都需要FIN和ACK報文才會斷開連接。

source: 計算機網絡面試核心知識點梳理

三.Http協議

在另外一篇博客裏進行了詳細描述:java web基礎篇——Http協議

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章