日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手

發布時間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網絡的五層劃分是什么?

  • 應用層,常見協議:HTTP、FTP
  • 傳輸層,常見協議:TCP.UDP
  • 網絡層,常見協議:IP
  • 鏈路層
  • 物理層

TCP 和 UDP 的區別是什么

  • TCP/UDP 都屬于傳輸層的協議
  • TCP 是面向連接的傳輸層協議,能夠準確可靠的把數據傳遞給對方,當數據有丟包情況會重發,但是需要在建立和斷開連接需要至少7次的發包和收包,會浪費網絡流量,主要用在對可靠性要求較高的地方。
  • UDP 是面向無連接的傳輸層協議,意思是只負責傳輸數據,不能確保對方是否收到數據和數據的正確順序,數據的正確性由應用層來校驗。主要用于高速傳輸和實時性要求較高的場合如音視頻會議,廣播。

TCP 三次握手和四次揮手

  • 先來張時序圖
  • 來張自己使用 wireShark 抓取的 tcp 數據包和 wireShark 生成的流量圖
    • 數據包(三次握手是完整的,四次揮手不完整,丟了一個包)

    • 流量圖(三次握手是完整的,四次揮手不完整,丟了一個包)

序號,確認號

  • 序列號 Sequeuece number(Seq): 數據包本身的序列號,初始序列號是隨機的。
  • 確認號 Acknowledgment number(Ack): 在接收端,用來通知發送端數據成功接收
  • 標志位,標志位只有為 1 的時候才有效
    • SYN: 創建一個連接
    • ACK: 確認接收到的數據
    • FIN: 終結一個連接

TCP 三次握手

  • TCP 三次握手圖
  • 第一次握手:客戶端向服務器端發送報文,報文中設置標志位SYN=1,生成隨機序列號 Seq = x,這時客戶端進入 SYN_SENT 狀態。
  • 第二次握手: 服務器端收到客戶端的報文,由 SYN=1 可以知道客戶端請求建立連接。服務器端給客戶端發送報文,設置標志位 SYN=1,ACK=1, 生成隨機序列號 Seq=y,設置確認號 Ack = x+1 ,這是服務器端進入 SYN_RCVD 狀態
  • 第三次握手: 客戶端接收到服務器的報文,檢查 ACK 是否為 1,Ack 是否為 x+1 , 如果正確則將標志位 ACK 置為 1, Ack 置為 y+1,并將該數據包發送給服務器端,服務器端檢查 ACK 是否為 1,Ack 是否為 y+1,如果正確則連接建立成功,服務器端和客戶端進入 ESTABLISHED 狀態,完成三次握手。
    • 為什么需要三次握手,兩次確認?
      • 為什么客戶端還要發送一次確認呢,主要是為了防止已失效的連接請求報文突然又傳送到了服務器端,造成錯誤。比如:客戶端發送連接請求,因為網絡或者一些其他因素造成沒有在一定時間到達服務器端,所以客戶端沒有收到確認。于是客戶端會重發一次連接請求,通過三次握手與服務器建立連接,但是這時上次的請求到達服務器端了,服務器會誤以為客戶端又發來了一次新的連接請求,會向客戶端發送報文同意建立連接,但是客戶端已經建立了,就會放棄掉該報文,服務器端沒有收到響應,也就不會建立連接了。

    TCP 四次揮手

    • 四次揮手數據包
    • 四次揮手流量圖
    • 由于 TCP 連接是全雙工的,因此每個方向都必須單獨進行關閉。這一原則是當一方數據發送完成,發送一個標志位為 FIN 的報文來終止這一方向的連接,收到標志位為 FIN 的報文意味著這一方向上不會再收到數據了。但是在 TCP 連接上仍然能夠發送數據,直到這一方向也發送了 FIN 。發送 FIN 的一方執行主動關閉,另一方則執行被動關閉。
    • 第一次揮手:客戶端發送報文,標志位 FIN =1,Seq = n,此時客戶端進入到 FIN_WAIT_1 狀態,表示客戶端沒有數據要發送給服務器
    • 第二次揮手:服務端收到客戶端發送的 FIN 報文,然后向客戶端發送一個報文,設置標志位為 ACK =1 ,確認序列號為Ack = n+1 ,這是服務端進入 CLOSE_WAIT 狀態.表示客戶端到服務端的發送連接已經斷開。
    • 第三次揮手:服務器發送報文到客戶端,報文標志位 FIN =1 序列號為 Seq = m,用來關閉服務器到客戶端的數據傳輸,服務端進行 LAST_ACK 狀態

    • 第四次揮手:客戶端收到服務器發送的標志位為 FIN 的報文,客戶端進入到 CLIENT_WAIT 狀態,等待2MSL時間。然后發送一個標志位為 ACK = 1 的報文,確認序列號為 Ack = m+1 。完成四次揮手。

    • 為什么要等待 2MSL
      • 客戶端發送的第4次握手報文,服務器沒有收到。這時候服務器端會再次發送一個 FIN =1 的報文,而這個時候客戶端還處于 CLIENT_WAIT 狀態,所以可以再次發送確認消息。
    • TCP 發送失敗重發情況

    • 抓包環境
      • whireShark: 2.6.1
      • Android device: HTC D820U
      • Android Version: 6.0
      • Android IP : 192.168.123.103
      • Destination IP : 183.192.196.182

    https://blog.csdn.net/sssnmnmjmf/article/details/68486261
    https://blog.csdn.net/oney139/article/details/8103223
    https://www.jianshu.com/p/9f3e879a4c9c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    總結

    以上是生活随笔為你收集整理的网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。