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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

UDP协议和TCP协议

發布時間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UDP协议和TCP协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UDP協議

UDP(User Datagram Protocol):用戶報文協議
沒有任何特點
和TCP對比:不可靠、無連接、面向報文
1. 網絡的基本情況就是不可靠的

  • 沒有誰能保證數據一定是可以發送到對方的,可能丟失(丟包)
  • 即使數據發送給對方了,也不能保證數據就是無差錯的(不考慮有人故意修改數據的情況)
  • 依次發送多個數據后,不能保證接收方按照發送順序接收到數據(亂序),每次數據的發送,都是一次獨立的尋找路徑的過程
  • 2. UDP作為一種最簡單的傳輸層協議,基本上沒有做什么的操作來幫助用戶處理復雜的網絡環境,所以UDP保留下來這種不可靠的特性。

    3. UDP報文的頭信息(定長的(8字節))

    4. 校驗和(checksum)的作用和工作機制

  • 判斷收到的報文(數據)是否出現差錯的
  • 利用hash函數的原理︰通過設計一種hash函數,達到沖突率很低的一種情況
    發送端:checksum(payload)=>校驗和1 (把校驗和1填寫到UDP的header 中)
    接收端:checksum(payload)=>校驗和2
    比較校驗和2和header 中的校驗和1:如果不等,payload在傳輸過程中一定出現差錯了;如果相等,大概率payload沒有出現出錯
  • 針對校驗和可以對上的情況,正常接收數據。
    針對校驗和對不上的情況,直接丟棄包: UDP不是特別可靠
  • 5.UDP協議棧的作用

  • 計算校驗和
  • 填寫正確的header信息
  • 把 header + payload一起交給網絡層 (重點:UDP沒有發送緩沖區)
  • 網絡層發送數據到網卡
  • send方法返回
    重點:我們在應用層調用send方法時send方法返回了,就意味著數據已經到達網絡中
  • 接收到數據之后

  • 計算校驗和
  • 解包
  • 通知指定的進程,數據已經到達…這段期間,進程可能還暫時來不及過來取數據。所以UDP協議棧需要找個地方把數據暫存一會兒。UDP協議棧中有接收緩沖區。
  • 6. UDP有接收緩沖區,沒有發送緩沖區
    用戶發送多少數據,UDP也會發送多少數據,所以UDP是面向報文的
    UDP發送數據無需任何準備工作,隨時隨地可以發送:寄信vs打電話,所以UDP是無連接的

    7. 面向數據報文導致的一個后果:
    由于底層(物理層+網絡層))都對一次發送的數據有大小限制。如果強行發送大于限制的數據,就會出現數據被截斷。
    全雙工:同一個信道是雙向的。

    8. UDP協議的最適用場景
    對實時性要求較高,對可靠性要求較低的場景
    實時聊天(語音、視頻聊天)
    UDP支持廣播。如果有廣播需求,也可以考慮用UDP。

    TCP協議

    TCP(Transmission Control Protocol):傳輸控制協議

    目標:

  • 以進程為單位傳遞數據
  • 追求可靠性
  • 什么是可靠性?

    TCP只能保證盡自己最大的可能,把數據有序地發送給對方。但不能保證一定能發送給對方。

  • 盡可能去發送給對方
  • 即使發不過去,也有反饋
  • 保證對方接收是有序的
  • 保證對方不會收到差錯數據
  • TC會設計一些機制,來盡可能的優化網絡,提高對方收到的可能性
  • TCP使用什么樣的機制,來保證可靠性——確認應答機制

  • TCP發送的數據,一般被稱為segment(數據段)
  • 應答: acknowledge
  • 如果發送方同時發送了多條segment,應答進行了多次應答。發送方如何得知,接收方收到的是哪一次的segment?
    編號機制:發送方為發送的數據做編號,應答的時候帶上對應編號即可。
  • 如果接收方沒有收到數據,則不會應答;或者接收方應答了,但應答丟包了
    總之:發送方沒有收到對應的應答。則認為對方沒有收到數據——超時重傳機制
  • TCP協議的header格式

  • 和UDP不同,TCP的header 不是定長的。
  • 哪個或者哪些字段,可以保證接受方的TCP協議棧進行解包工作?
    4位header長度
  • 根據源port+目標port做分用
  • 到目前為止,TCP發送的 segment有兩種:(1.攜帶數據segment,⒉.應答segment),TCP協議并沒有把兩種作用的segment進行不同格式的設計,而是進行統一的設置了!
    那具體怎么區分本次segment是否有應答的作用呢?
    ack ==1時segment有應答功能;ack == 0時segment沒有應答功能
  • segment的可能情況:(1)光攜帶數據;(2)攜帶數據+應答(網絡中合并數據的發送,可以提高網絡發送的效率)
  • 32位序號:SN(Sequence Number)
    32位確認序號:ASN(Acknowledge Sequence Number)
  • SN和ASN書寫規則

  • TCP為發送的每個字節都進行編號(只是payload,沒有header)[h ello]
    h: 108(隨便選的) ,e: 109 ,l: 110, l: 111, o: 112
  • TCP協議棧在建立連接時,會隨機一個初識序列號(Initial Sequence Number lSN)lSN : 108
  • 發送的時候,header 中的SN填寫的是 payload 中的第一個字節的序列號
    [ hello ]
    SN: 108
    接收方是知道長度是5的,所以,接收方如果收到數據,則表示108 - 112已經全部收到了
  • ASN應該如何填寫?填寫的是接收方期望收到的下一個字節的數據
    上述例子中,接收方要應答的話ASN應該填寫113。隱含的意思就是113之前的所有數據,已經全部接收到了。
  • 如果發送方超過一定時間都沒有收到應答,則可能

    發送方的處理邏輯是一致的。超時之后,直接重傳即可(重傳的數據不會丟失),不需要區分情況
  • 如果亂序到達怎么辦?

    對于發送方,收到了一個應答segASN = x時,發送方是怎么理解這個信號的?
    對方已經收到收到了x-1之前的所有數據了。
    TCP協議是有接收緩沖區的,保證對方接收是有序的(接收端可以重新整理數據,接收過得數據不再接收)
  • 如果超時之后,重傳對方仍然沒有收到,怎么辦?

    繼續重傳,直到到達一個閾值(假設6次)。如果6次,我都沒有收到應答。我就認為不需要再努力的,放棄:

  • 盡人事,試圖通知對方,連接異常關閉了——通過發送一個reset segment(另一種)。
    rst = 1,reset segment
    rst = 0,不是reset segment
  • 通知我們的應用層,數據發送失敗了。(Java中是通過異常的方式通知的,會收到一個IOException (SocketException)描述reset connection)
  • 連接管理(Connection Message)

    為什么需要連接(連接是什么抽象)?

  • 作為TCP協議棧,是需要維護一個接收緩沖區的。
    (1)保證整理亂序到達的數據
    (2)在數據暫時未被應用層讀走之前,臨時保存數據
  • 作為TCP協議棧,是需要維護一個發送緩沖區的。
    因為要考慮重發的可能性,所以未應答的數據不能直接扔掉,所以需要一個空間暫存
    例:send(‘hello’)成功,代表數據被發送到OS的TCP協議棧的發送緩沖區中
  • 作為TCP協議棧
    發送方時,需要維護已經發送的SN
    接收方時,需要維護應該應答的SN
  • 上述3點,足以說明:TCР協議棧,為了保證之前的那些機制可用,必須為每個信道,維護一組相關的數據! !

    建立連接階段的必要性

  • 由于TCP是追求可靠性的,所以TCP在正式發送數據之前,想驗證下對象是否能收到我的數據。
    類比:寄信+電話
  • Connection對象,有一部分信息是無法獨立知道的,需要雙方進行有效信息的同步

  • TCP的建立連接,需要雙方交換幾次信息——三 次——三 次握手
    [常見面試題]為什么是三次?為什么不是兩次,為什么不是四次,為什么不是其他次?

    4種segment:數據segment、應答segment (ack= 1)、reset segment (rst= 1)、同步segment (syn= 1)

  • 什么是連接&為什么TCP需要有連接,UDP就沒有連接。
    邏輯上對信道的抽象。物理上各自內存中維護的信道相關的一組數據。
    因為TCP為了追求可靠性引入一系列機制(確認應答機制,超時重傳機制),為了這些機制能正常的工作,使得TCP必須引入連接的概念。
  • 為什么要有建立連接階段的必要性
  • 互相確認對象在線
  • 雙方同步必要的初識信息
  • 為什么是三次握手。
  • 總結

    以上是生活随笔為你收集整理的UDP协议和TCP协议的全部內容,希望文章能夠幫你解決所遇到的問題。

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