回覆列表
  • 1 # 愛答問題的小星星

    不邀自來,專業問題我來回答一下:

    首先需要明確的是TCP建立連線的三次握手(也就是題主所述的TCP初始化)只有兩個SYN,分別是第一次客戶端向服務端發起連線請求時SYN和第二次服務端傳送SYN確認包給服務端。

    背景TCP含義:TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的,可靠的,基於位元組流的傳輸協議,它位於OSI模型的傳輸層,傳輸層是提供能端到端的通訊服務,位於同一層的傳輸協議還有UDP協議;面向連線的解釋:面向連線指的是在TCP建立通訊之前,會透過三次握手(three-way handshake),在握手過程中透過確認序號,定時重傳,協商傳送資料的視窗大小,資料校驗等機制來為可靠的傳輸服務提供保障。什麼是SYN,SYN的用途是什麼

    要知道SYN是什麼,那就必須要了解TCP的首部欄位,TCP首部欄位如下圖:

    源埠號/目的埠號:16位的源埠和目的埠號用於傳送端和接受端的程序定址(像QQ,微信,百度等不同的應用程式),它和網路層的IP(源IP/目的IP)唯一的確認一個TCP連線。序列號(Sequence Number):32位的序列號用於標識傳送的資料位元組流在該報文中的第一個資料位元組,當順序號超過2^32 - 1後重新從0開始確認號:當ACK為1(表明該資料包是一個確認包)是有效,當ack=y時表明對方已經成功收到收到前y-1位元組的資料。首部長度:用來支出報文段資料距離報文段起始位置的距離,單位為位元組,其實就是表明TCP報文頭的長度保留域:保留以便以後使用,目前全為0.URG:URG和緊急指標配合使用,當URG=1時,表明緊急欄位有效,告訴系統此報文中有緊急資料,應儘快傳送。於是傳送方TCP就把緊急資料插入到本報文段資料的最前面,而在緊急資料後面的資料仍是普通資料。ACK:確認號標誌位,當ACK為1時,表明此資料包時一個確認包,一般會返回ack號給對方。PSH:當PSH為1時表明應儘快的將報文交付給應用層來處理,而不用等將快取區填滿後再交付,以便為後續資料騰出空間。RST:RST為1時表明TCP建聯出現嚴重問題,必須釋放當前連線,重新建聯。SYN:當SYN為1時,表明此資料包是一個同步包,用來表明正在請求連線。FIN:當FIN為1時表明資料已經發送完畢,要斷開TCP連線視窗大小:視窗大小主要用於TCP流量控制,是接收方給傳送方確定傳送資料的大小的依據。TCP校驗和:用來校驗資料的完整性,以防被篡改,該欄位佔2個位元組,包含頭部和資料兩部分。緊急指標:該欄位只有在URG=1時才有效。它指出緊急資料在當前報文段的位元組數,它是一個正的偏移量,因此這個欄位也相當於緊急指標相對於當前序號的偏移。選項:長度可變,最長40位元組,當沒有該欄位時,TCP首部欄位的長度是20位元組。為什是兩次SYN

    由前面TCP頭部欄位的學習,可知SYN=1表明該資料包發起請求建立TCP連線,在TCP建立一個可靠的連線時只有三次握手,前兩次客戶端和服務端分別發起一起連線請求,最後一次握手是客戶端發給服務端的確認資料包,表明已經建立連線,後面就可以傳送接收資料了。

    第一次握手:SYN=1,表明客戶端主動發起連線的請求,同時將序列號為seq=x的包傳送給服務端,此時傳送端進入SYN_SENT狀態。

    第二次握手:SYN=1,表明伺服器發起一個連線請求,同時ACK=1,表明次資料包對之前服務端的接受進行確認,ack=x+1,標識序號為x的包接受成功。

    第三次握手:ACK=1,由客戶端對第二次握手的狀態進行一個確認,確認沒問題TCP就建鏈成功,可以傳送資料。

    透過抓包來驗證只有兩次SYN

    綜上,TCP在建立可靠連線的三次握手中,僅有前兩次有SYN標記,倒是為了資料傳輸中序號確認,AK標記有很多次。

  • 中秋節和大豐收的關聯?
  • 如果讀一本書可以影響你的一生,你覺得哪本書會有這麼大的影響力?