色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UDP如何實現(xiàn)可靠傳輸

科技綠洲 ? 來源:Linux開發(fā)架構之路 ? 作者:Linux開發(fā)架構之路 ? 2023-11-10 15:19 ? 次閱讀

TCP的accept發(fā)生在三次握手的哪個階段?

如下圖connect和accept的關系:

accept過程發(fā)生在三次握手之后,三次握手完成后,客戶端和服務器就建立了tcp連接并可以進行數(shù)據(jù)交互了。

這時可以調用accept函數(shù)獲得此連接。

connect返回了可以認為連接成功了嗎?

connect返回成功后,三次握手就已經(jīng)完成了。

已完成的鏈接會被放入一個隊列中,accept的作用就是從已連接隊列中取出優(yōu)先級最高的一個鏈接,并將它綁定給一個新的fd,服務端就可以通過這個新的fd來recv和send數(shù)據(jù)了。

三次握手過程中可以攜帶數(shù)據(jù)么?

第三次握手的時候,可以攜帶。前兩次握手不能攜帶數(shù)據(jù)。

如果前兩次握手能夠攜帶數(shù)據(jù),那么一旦有人想攻擊服務器,那么他只需要在第一次握手中的 SYN 報文中放大量數(shù)據(jù),那么服務器勢必會消耗更多的時間和內存空間去處理這些數(shù)據(jù),增大了服務器被攻擊的風險。

第三次握手的時候,客戶端已經(jīng)處于ESTABLISHED狀態(tài),并且已經(jīng)能夠確認服務器的接收、發(fā)送能力正常,這個時候相對安全了,可以攜帶數(shù)據(jù)。

等待2MSL的意義,如果不等待會怎樣?

如果不等待,客戶端直接跑路,當服務端還有很多數(shù)據(jù)包要給客戶端發(fā),且還在路上的時候,若客戶端的端口此時剛好被新的應用占用,那么就接收到了無用數(shù)據(jù)包,造成數(shù)據(jù)包混亂。所以,最保險的做法是等服務器發(fā)來的數(shù)據(jù)包都死翹翹再啟動新的應用。

那,照這樣說一個 MSL 不就不夠了嗎,為什么要等待 2 MSL?

  • 1 個 MSL 確保四次揮手中主動關閉方最后的 ACK 報文最終能達到對端
  • 1 個 MSL 確保對端沒有收到 ACK 重傳的 FIN 報文可以到達

這就是等待 2MSL 的意義。

SYN Flood 攻擊

SYN Flood 攻擊原理

SYN Flood 屬于典型的 DoS/DDoS 攻擊。其攻擊的原理很簡單,就是用客戶端在短時間內偽造大量不存在的 IP 地址,并向服務端瘋狂發(fā)送SYN。對于服務端而言,會產(chǎn)生兩個危險的后果:

  1. 處理大量的SYN包并返回對應ACK, 勢必有大量連接處于SYN_RCVD狀態(tài),從而占滿整個半連接隊列,無法處理正常的請求。
  2. 由于是不存在的 IP,服務端長時間收不到客戶端的ACK,會導致服務端不斷重發(fā)數(shù)據(jù),直到耗盡服務端的資源。

如何應對 SYN Flood 攻擊?

  • 增加 SYN 連接,也就是增加半連接隊列的容量。
  • 減少 SYN + ACK 重試次數(shù),避免大量的超時重發(fā)。
  • 利用 SYN Cookie 技術,在服務端接收到SYN后不立即分配連接資源,而是根據(jù)這個SYN計算出一個Cookie,連同第二次握手回復給客戶端,在客戶端回復ACK的時候帶上這個Cookie值,服務端驗證 Cookie 合法之后才分配連接資源。

TCP Fast Open

圖片

注意: 客戶端最后握手的 ACK 不一定要等到服務端的 HTTP 響應到達才發(fā)送,兩個過程沒有任何關系。

第一次握手時server會計算出cookie傳給客戶端并緩存,之后的握手客戶端會攜帶cookie進行SYN。

如果cookie不合法直接丟棄,如果合法,就可以直接發(fā)送http響應。

TFO 的優(yōu)勢

TFO 的優(yōu)勢并不在與首輪三次握手,而在于后面的握手,在拿到客戶端的 Cookie 并驗證通過以后,可以直接返回 HTTP 響應,充分利用了1 個RTT(Round-Trip Time,往返時延)的時間提前進行數(shù)據(jù)傳輸,積累起來還是一個比較大的優(yōu)勢。

序列號回繞怎么辦?

現(xiàn)在我們來模擬一下這個問題。

序列號的范圍其實是在0 ~ 2 ^ 32 - 1, 為了方便演示,我們縮小一下這個區(qū)間,假設范圍是 0 ~ 4,那么到達 4 的時候會回到 0。

圖片

假設在第 6 次的時候,之前還滯留在網(wǎng)路中的包回來了,那么就有兩個序列號為1 ~ 2的數(shù)據(jù)包了,怎么區(qū)分誰是誰呢?這個時候就產(chǎn)生了序列號回繞的問題。

那么用 timestamp 就能很好地解決這個問題,因為每次發(fā)包的時候都是將發(fā)包機器當時的內核時間記錄在報文中,那么兩次發(fā)包序列號即使相同,時間戳也不可能相同,這樣就能夠區(qū)分開兩個數(shù)據(jù)包了。

附:

timestamp是 TCP 報文首部的一個可選項,一共占 10 個字節(jié),格式如下:

kind(1 字節(jié)) + length(1 字節(jié)) + info(8 個字節(jié))

其中 kind = 8, length = 10, info 有兩部分構成: timestamp和timestamp echo,各占 4 個字節(jié)。

能不能說說 Nagle 算法和延遲確認?

Nagle 算法

試想一個場景,發(fā)送端不停地給接收端發(fā)很小的包,一次只發(fā) 1 個字節(jié),那么發(fā) 1 千個字節(jié)需要發(fā) 1000 次。這種頻繁的發(fā)送是存在問題的,不光是傳輸?shù)臅r延消耗,發(fā)送和確認本身也是需要耗時的,頻繁的發(fā)送接收帶來了巨大的時延。

而避免小包的頻繁發(fā)送,這就是 Nagle 算法要做的事情。

具體來說,Nagle 算法的規(guī)則如下:

  • 當?shù)谝淮伟l(fā)送數(shù)據(jù)時不用等待,就算是 1byte 的小包也立即發(fā)送
  • 后面發(fā)送滿足下面條件之一就可以發(fā)了:
  • 數(shù)據(jù)包大小達到最大段大小(Max Segment Size, 即 MSS)
  • 之前所有包的 ACK 都已接收到

延遲確認

試想這樣一個場景,當我收到了發(fā)送端的一個包,然后在極短的時間內又接收到了第二個包,那我是一個個地回復,還是稍微等一下,把兩個包的 ACK 合并后一起回復呢?

延遲確認(delayed ack)所做的事情,就是后者,稍稍延遲,然后合并 ACK,最后才回復給發(fā)送端。TCP 要求這個延遲的時延必須小于500ms,一般操作系統(tǒng)實現(xiàn)都不會超過200ms。

不過需要主要的是,有一些場景是不能延遲確認的,收到了就要馬上回復:

  • 接收到了大于一個 frame 的報文,且需要調整窗口大小
  • TCP 處于 quickack 模式(通過tcp_in_quickack_mode設置)
  • 發(fā)現(xiàn)了亂序包

兩者一起使用會怎樣?

前者意味著延遲發(fā),后者意味著延遲接收,會造成更大的延遲,產(chǎn)生性能問題。

TCP的Keep Alive和HTTP的Keep Alive的區(qū)別

TCP keepalive

  • 在雙方長時間未通訊時,如何得知對方還活著?如何得知這個TCP連接是健康且具有通訊能力的?
  • TCP的保活機制就是用來解決此類問題的
  • 保活機制默認是關閉的,TCP連接的任何一方都可打開此功能。
  • 若對端正常存活,且連接有效,對端必然能收到探測報文并進行響應。此時,發(fā)送端收到響應報文則證明TCP連接正常,重置保活時間計數(shù)器即可。
  • 若由于網(wǎng)絡原因或其他原因導致,發(fā)送端無法正常收到保活探測報文的響應。那么在一定探測時間間隔(tcp_keepalive_intvl)后,將繼續(xù)發(fā)送保活探測報文。直到收到對端的響應,或者達到配置的探測循環(huán)次數(shù)上限(tcp_keepalive_probes)都沒有收到對端響應,這時對端會被認為不可達,TCP連接隨存在但已失效,需要將連接做中斷處理。

HTTP keep-alive

  • keep-alive機制:若開啟后,在一次http請求中,服務器進行響應后,不再直接斷開TCP連接,而是將TCP連接維持一段時間。在這段時間內,如果同一客戶端再次向服務端發(fā)起http請求,便可以復用此TCP連接,向服務端發(fā)起請求,并重置timeout時間計數(shù)器,在接下來一段時間內還可以繼續(xù)復用。這樣無疑省略了反復創(chuàng)建和銷毀TCP連接的損耗。

TCP隊頭阻塞和HTTP隊頭阻塞

  1. TCP隊頭阻塞

TCP數(shù)據(jù)包是有序傳輸,中間一個數(shù)據(jù)包丟失,會等待該數(shù)據(jù)包重傳,造成后面的數(shù)據(jù)包的阻塞。(停止等待)

  1. HTTP隊頭阻塞

http隊頭阻塞和TCP隊頭阻塞完全不是一回事。

http1.x采用長連接(Connection:keep-alive),可以在一個TCP請求上,發(fā)送多個http請求。

有非管道化和管道化,兩種方式。

非管道化,完全串行執(zhí)行,請求->響應->請求->響應…,后一個請求必須在前一個響應之后發(fā)送。

管道化,請求可以并行發(fā)出,但是響應必須串行返回。后一個響應必須在前一個響應之后。原因是,沒有序號標明順序,只能串行接收。

管道化請求的致命弱點:

  1. 會造成隊頭阻塞,前一個響應未及時返回,后面的響應被阻塞
  2. 請求必須是冪等請求,不能修改資源。因為,意外中斷時候,客戶端需要把未收到響應的請求重發(fā),非冪等請求,會造成資源破壞。

由于這個原因,目前大部分瀏覽器和Web服務器,都關閉了管道化,采用非管道化模式。

無論是非管道化還是管道化,都會造成隊頭阻塞(請求阻塞)。

解決http隊頭阻塞的方法:

  1. 并發(fā)TCP連接(瀏覽器一個域名采用6-8個TCP連接,并發(fā)HTTP請求)
  2. 域名分片(多個域名,可以建立更多的TCP連接,從而提高HTTP請求的并發(fā))
  3. HTTP2方式

http2使用一個域名單一TCP連接發(fā)送請求,請求包被二進制分幀**(多路復用)**不同請求可以互相穿插,避免了http層面的請求隊頭阻塞。但是不能避免TCP層面的隊頭阻塞。

UDP

UDP如何實現(xiàn)可靠傳輸?

傳輸層無法保證數(shù)據(jù)的可靠傳輸,只能通過應用層來實現(xiàn)了。

實現(xiàn)的方式可以參照tcp可靠性傳輸?shù)姆绞剑皇菍崿F(xiàn)不在傳輸層,實現(xiàn)轉移到了應用層。

最簡單的方式是在應用層模仿傳輸層TCP的可靠性傳輸。

下面不考慮擁塞處理,可靠UDP的簡單設計。

1、添加seq/ack機制,確保數(shù)據(jù)發(fā)送到對端

2、添加發(fā)送和接收緩沖區(qū),主要是用戶超時重傳。

3、添加超時重傳機制。

詳細說明:送端發(fā)送數(shù)據(jù)時,生成一個隨機seq=x,然后每一片按照數(shù)據(jù)大小分配seq。數(shù)據(jù)到達接收端后接收端放入緩存,并發(fā)送一個ack=x的包,表示對方已經(jīng)收到了數(shù)據(jù)。發(fā)送端收到了ack包后,刪除緩沖區(qū)對應的數(shù)據(jù)。時間到后,定時任務檢查是否需要重傳數(shù)據(jù)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9203

    瀏覽量

    85528
  • ACK
    ACK
    +關注

    關注

    0

    文章

    28

    瀏覽量

    11152
  • UDP
    UDP
    +關注

    關注

    0

    文章

    326

    瀏覽量

    33962
  • 函數(shù)
    +關注

    關注

    3

    文章

    4333

    瀏覽量

    62691
收藏 人收藏

    評論

    相關推薦

    求助關于TCP/UDP傳輸的問題

    本帖最后由 思想的小魚 于 2016-5-20 10:47 編輯 樓主完成了UDP和TCP傳輸的模塊,但目的是實現(xiàn)UDP傳輸和接收命令
    發(fā)表于 05-20 10:43

    UDP高速傳輸問題

    目前小弟在做一個數(shù)據(jù)采集項目,采集卡(250MSPS采樣率)與上位機是UDP實現(xiàn),1000Mbps的傳輸速率,采集卡可做兩種傳輸模式,第一種是一次
    發(fā)表于 05-24 10:48

    基于UDP協(xié)議的語音傳輸系統(tǒng)設計及實現(xiàn)

    摘 要:文中討論了基于UDP協(xié)議的語音傳輸系統(tǒng)的設計及實現(xiàn)。比較詳細的闡述了語音信息的錄制和播放、發(fā)送接收、壓縮和解壓縮以及語音傳輸過程的緩沖機制。由于采用了壓縮技
    發(fā)表于 07-02 21:51 ?44次下載

    TCP和UDP的區(qū)別分析

      傳輸層協(xié)議主要有TCP與UDPUDP提供無連接的通信,不能保證數(shù)據(jù)包被發(fā)送到目標地址,典型的即時傳輸少量數(shù)據(jù)的應用程序通常使用UDP
    發(fā)表于 09-18 10:29 ?2次下載

    實現(xiàn)基于51單片機的UDP實時傳輸工具

    實現(xiàn)基于51單片機的UDP實時傳輸工具
    發(fā)表于 09-21 13:40 ?7次下載
    <b class='flag-5'>實現(xiàn)</b>基于51單片機的<b class='flag-5'>UDP</b>實時<b class='flag-5'>傳輸</b>工具

    如何使用UDP協(xié)議設計及實現(xiàn)語音傳輸系統(tǒng)的方法詳細說明

     文中討論了基于UDP協(xié)議的語音傳輸系統(tǒng)的設計及實現(xiàn)。比較詳細的闡述了語音信息的錄制和播放、發(fā)送接收、壓縮和解壓縮以及語音傳輸過程的緩沖機制。由于采用了壓縮技術,減小了語音信息對網(wǎng)絡帶
    發(fā)表于 11-20 17:13 ?16次下載
    如何使用<b class='flag-5'>UDP</b>協(xié)議設計及<b class='flag-5'>實現(xiàn)</b>語音<b class='flag-5'>傳輸</b>系統(tǒng)的方法詳細說明

    udp協(xié)議設計與實現(xiàn)

    UDP協(xié)議功能 無連接傳輸 : 不保證端到端數(shù)據(jù)傳輸可靠性 , 一定程度上保證 了數(shù)據(jù)傳輸實時性 , 適合多媒體數(shù)據(jù)
    發(fā)表于 08-04 14:24 ?12次下載

    基于UDP的簡單文件傳輸協(xié)議TFTP設計

    前面我們已經(jīng)實現(xiàn)UDP的回環(huán)客戶端和回環(huán)服務器的簡單應用,接下來我們實現(xiàn)一個基于UDP的簡單文件傳輸協(xié)議TFTP。
    的頭像 發(fā)表于 12-14 15:06 ?2505次閱讀
    基于<b class='flag-5'>UDP</b>的簡單文件<b class='flag-5'>傳輸</b>協(xié)議TFTP設計

    UDP能否像TCP一樣實現(xiàn)可靠傳輸

    UDP (User Datagram Protocol)是一種無連接的協(xié)議,基于數(shù)據(jù)報的傳輸方式。在網(wǎng)絡通信中,它通常用于快速傳輸數(shù)據(jù)包,但卻無法保證數(shù)據(jù)包的可靠
    的頭像 發(fā)表于 06-05 09:48 ?693次閱讀
    <b class='flag-5'>UDP</b>能否像TCP一樣<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>可靠</b><b class='flag-5'>傳輸</b>?

    UDP能否像TCP一樣實現(xiàn)可靠傳輸

    連接的協(xié)議,基于字節(jié)流的傳輸方式。它通過確認和重傳等機制來保證數(shù)據(jù)的完整性和順序性,實現(xiàn)數(shù)據(jù)包的可靠傳輸UDP與TCP的主要區(qū)別但在某些運
    的頭像 發(fā)表于 06-08 14:50 ?927次閱讀
    <b class='flag-5'>UDP</b>能否像TCP一樣<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>可靠</b><b class='flag-5'>傳輸</b>?

    udp是什么協(xié)議 TCP與UDP的區(qū)別

    TCP協(xié)議提供可靠的數(shù)據(jù)傳輸UDP協(xié)議提供盡量高效的數(shù)據(jù)傳輸。TCP協(xié)議通過使用序列號、確認應答等機制,保證數(shù)據(jù)傳輸
    的頭像 發(fā)表于 06-26 17:47 ?1.1w次閱讀

    TCP和UDP如何實現(xiàn)可靠傳輸

    TCP(TransmissionControl Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
    的頭像 發(fā)表于 10-16 14:19 ?1002次閱讀
    TCP和<b class='flag-5'>UDP</b>如何<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>可靠</b>性<b class='flag-5'>傳輸</b>

    如何選擇傳輸層協(xié)議?TCP和UDP的優(yōu)缺點和適用場合

    可靠性至關重要。本文將詳細介紹TCP和UDP的優(yōu)缺點以及適用場合。 1. TCP的優(yōu)點和適用場合: TCP是一種可靠的、面向連接的傳輸層協(xié)議,它提供了重發(fā)機制、數(shù)據(jù)丟失檢測和擁塞控制
    的頭像 發(fā)表于 12-11 11:42 ?1026次閱讀

    UDP與TCP的主要區(qū)別 UDP能否像TCP一樣實現(xiàn)可靠傳輸

    UDP與TCP的主要區(qū)別 UDP能否像TCP一樣實現(xiàn)可靠傳輸?TCP如何實現(xiàn)
    的頭像 發(fā)表于 01-22 16:10 ?828次閱讀

    udp是什么協(xié)議?udp協(xié)議介紹

    UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)是一種無連接的傳輸層協(xié)議,不保證數(shù)據(jù)傳輸可靠性,只負責把數(shù)據(jù)包發(fā)送給目標地址。它提供了簡單、高效的數(shù)據(jù)
    的頭像 發(fā)表于 04-19 15:57 ?1424次閱讀
    主站蜘蛛池模板: 人妻少妇69式99偷拍| 国产AV精品久久久免费看| 男女午夜性爽快免费视频不卡| 国产MD视频一区二区三区| 中国女人逼| 性色欲情网站IWWW| 青青草在线 视频| 久久亚洲精品专区蓝色区| 国产精品一区二区资源| H揉捏娇喘乳叫床NP调教视频| 亚洲 日韩 自拍 视频一区| 欧美人与动牲交A免费| 解开美女胸衣2破解版| 俄罗斯bbbb| beeg日本老师按摩| 最近的2019中文字幕国语版| 亚洲国产精品嫩草影院永久| 色戒床震视频片段| 欧美一区二区三区免费播放| 恋夜影院安卓免费列表uc| 精品国内自产拍在线观看视频| 国产精品免费小视频| 顶级欧美不卡一区二区三区| chinese学生gv video| 最新国产三级在线不卡视频| 亚洲人成网站在线播放| 无遮挡h肉3d动漫在线观看| 日韩在线av免费视久久| 欧美性xxx18一20| 男人j进女人j一进一出| 麻豆精品国产剧情观看| 空姐内射出白浆10p| 久久这里只有精品视频e| 久久精品在现线观看免费15| 精品无码久久久久久动漫 | 亚洲合集综合久久性色| 午夜一级视频| 亚州中文字幕| 亚洲国产精品综合久久一线| 亚洲第一页视频| 亚洲国产日韩制服在线观看|