udp和tcp學習筆記1

udp和tcp(來源:TCP和UDP的最完整的區別)

tcp

優點:傳輸前打招呼,很有禮貌,很謹慎反覆確認身份(但是容易被迷惑[被攻擊,DOS、DDOS、CC等])。傳輸相對udp安全,能保證數據完整有序。傳輸完成後斷開連接,以節約系統資源。
缺點:相對udp傳輸內容少,連接時耗費資源多,主要佔用CPU、內存等硬件資源,因此有些時候設備流量明明很少,但是CPU、內存等會顯示很高的佔用率。傳輸相對udp較慢,效率低,由於每次傳輸連接都需要進行握手因此耗時長。
1、有確認機制和三次握手機制,以及釋放連接是需要進行四次揮手。
2、數據傳輸相對完整,並且是按照順序進行傳輸。
3、面向連接,及需要進行連接。貼近與生活的類比就是打電話,需要進行撥號確認後,纔會進行通話(數據傳輸)

  • 三次握手(來源:TCP三次握手–syn攻擊)
    1、客戶端發送連接請求,將標誌位SYN置爲1,產生一個隨機序號J,確認號置爲0。將信息發送給服務端。
    2、服務端收到數據後通過SYN=1知道需要建立一個新連接,然後將標誌位SYN和ACK都置爲1,產生一個隨機序號K,確認號爲J+1(客戶端的序號+1),發送給客戶端進行確認。
    3、客戶端收到數據後檢查標誌爲你ACK是否爲1,檢查確認號是否爲J+1,確認無誤後,將序號置爲服務端的確認號(J+1),確認號爲K+1(服務端的序號+1),發送給服務端,服務端同樣的確認之後,建立連接成功,可以開始傳輸數據。
  • 四次揮手(來源:TCP序列號和確認號詳解,對比圖示)
    按照詳解中的四次揮手的說法很難理解,於是找到了其他人關於四次揮手的說法對比,通過後面的圖片可以得知詳解中關於四次揮手的說法是有失誤的地方。第一步中的確認號並非服務端的序號,而是客戶端的序號。按照詳解中的說法我有排列過一組數字,發現最後得出的結果第一步中最後的確認號和序號是一樣的,這樣並不符合之前的規律,因此找到了其他大佬寫的文章進行對比。但是大部分都是簡略說明了揮手的過程,能找到比較詳細的就是這張實例圖了。
    1、服務端發送終止請求,將標誌位FIN置爲1,序號爲客戶端發送的上一個包的確認號,確認號爲客戶端發送的上一個包的序號+數據包的大小,服務端進入FIN_WAIT。
    2、客戶端收到終止數據包後,將標誌位FIN置爲1,序號爲服務端的確認號,確認號爲服務端的序號+·1,發送給客戶端,並進入CLOSE_WAIT。
    3、客戶端發送終止請求,將標誌位ACK置爲1,序號爲服務端發送給的上一個包的確認號,確認號爲服務端發送的上一個包的序號+數據包的大小,客戶端進入LAST_ACK。
    4、服務端收到終止請求後,進入TIME_WAIT。接着發送一個ACK給客戶端,序號爲客戶端的確認號,確認號爲服務端的序號+1。最後客戶端和服務端都進入CLOSED狀態。

查找各個大佬文檔的時候,大部分的說明都是沒有所謂的三次握手,四次揮手。這些都是爲了說明白整個過程整理的一種說法,其實在三次握手以及四次揮手過程中,發送的也是數據包,tcp數據的發送除了我們所理解的數據以外,其實命令也是一種數據。而SYN新建連接,以及FIN釋放連接這兩種也是一種命令,數據長度爲1,因此會有確認號加一的認證過程,在實際傳輸過程中爲了驗證數據的完整,接收數據後返回的確認號是發送方的序號加上數據包的長度,來驗證數據是否完整;因此握手和揮手的過程和數據傳輸的過程是一樣的。
實際整個tcp過程猶如一次通話。
A:您好!您是XXX嗎?我是***
B:你好!是的我是***,你是XXX吧
C:是的,我是XXX
…然後正文開始…
A:感謝您,我這邊的問題說完了。
B:不客氣,我這邊也回答完了。
A:那,再見。
B:再見。

  • 附(來源:TCP三次握手與四次揮手詳解)
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 源端口和目的端口:各佔2個字節,分別寫入源端口號和目的端口號。
  • 序號:佔4個字節。序號使用mod運算。TCP是面向字節流的,在一個TCP連接中傳送的字節流中的每一個字節都按順序編號。故該字段也叫做“報文段序號”。
  • 確認序號:佔4個字節,是期望收到對方下一個報文段的第一個數據字節的序號。若確認序號=N,則表明:到序號N-1爲止的所有數據都已正確收到。
  • 數據偏移:佔4位,表示TCP報文段的首部長度。注意,“數據偏移”的單位是32位字(即以4字節長的字爲計算單位)。故TCP首部的最大長度爲60字節。
  • 保留:佔6位,保留爲今後使用,目前置爲0;
  • 緊急URG:當URG=1,表明緊急指針字段有效。這時發送方TCP就把緊急數據插入到本報文段數據的最前面,而在緊急數據後面的數據仍是普通數據。
  • 確認ACK:當ACK=1時,確認字段纔有效。當ACK=0時,確認號無效。TCP規定,在連接建立後所有傳送的報文段都必須把ACK置1。
  • 推送PSH:接收方TCP收到PSH=1的報文段,就儘快地交付給接收應用進程,而不再等到整個緩存都填滿了後再向上交付。
  • 復位RST:當RST=1時,表明TCP連接中出現嚴重差錯,必須釋放連接,然後再重新建立運輸連接。
  • 同步SYN:在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文段。對方若同意建立連接,則應在響應的報文段中使SYN=1和ACK=1。故SYN置爲1,就表示這是一個連接請求和連接接收報文。
  • 終止FIN:用來釋放連接。當FIN=1時,表明此報文段的發送方的數據已發送完畢,並要求釋放運輸連接。
  • 窗口:佔2個字節。窗口值作爲接收方讓發送方設置其發送窗口的依據。
  • 檢驗和:佔2字節。檢驗和字段檢驗的範圍包括首部和數據這兩部分。和UDP數據報一樣,在計算檢驗和時,也要在TCP報文段的前面加上12字節的僞首部。僞首部的格式與UDP用戶數據報的僞首部一樣,但要將僞首部第四個字段中的17 改爲6(協議號),把第5字段中的UDP長度改爲TCP長度。
  • 緊急指針:佔2字節。緊急指針僅在URG=1時纔有意義,它指出本報文段中的緊急數據的字節數。
udp(來源:TCP和UDP的最完整的區別)

優點:傳輸速度快,比tcp安全。由於是無狀態傳輸協議,因此無握手等機制。相比於tcp性能消耗少
缺點:不可靠,並且不文檔。不能保證數據的完整性,容易受到網絡影響導致丟包。
udp類比與生活中的廣播,只保證數據發送出去,不會去驗證你是否有收到完整的數據。適用於視頻等對網絡傳輸速度有要求,對網絡傳輸質量要求不高的場景。
udp相對於tcp比較簡單,只提供基礎的發送報文服務,而不會提供連接驗證以及數據驗證。因此使用udp開發項目需要自己來設計數據的驗證等。

tcp和udp,從某種角度上來說tcp實際是封裝了udp。通過client和server雙方發送的信息來保證信息的完整。一次udp僅僅是發送數據就結束了,而tcp則是需要兩次數據的發送,一次爲正常的數據,一次爲驗證數據是否完整。

發佈了6 篇原創文章 · 獲贊 0 · 訪問量 1417
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章