国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

TCP為什么是可靠的(怎么保證有效傳輸的)?

這篇具有很好參考價值的文章主要介紹了TCP為什么是可靠的(怎么保證有效傳輸的)?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

TCP為什么是可靠性的?

可靠傳輸就是通過TCP連接傳送的數據是沒有差錯、不會丟失、不重復并且按序到達的。TCP是通過序列號、檢驗和、確認應答信號、重發(fā)機制、連接管理、窗口控制、流量控制、擁塞控制一起保證TCP傳輸的可靠性的。

總結:

TCP保證可靠性一般有以下幾種方法:

  1. 檢驗和:在數據傳輸過程中,吧傳輸的數據當作一個16位整數。吧所有的數據加起來,最前面的進位補到最后一位,然后取反得到校驗和。發(fā)送方和接收方驗證校驗和是否相同。不相同則數據傳輸有誤,相同也可能有問題。
  2. 確認應答:ACK和序列號(一應一答)機制保證數據的完整性(三次握手于四次揮手過程中通過比對Seq和ACK來實現)
  3. 超時重傳:發(fā)送數據包在一定的時間周期內沒有收到相應的ACK,等待一定的時間,超時之后就認為這個數據包丟失,就會重新發(fā)送(也就是發(fā)送數據后,長時間沒收到回應,會把數據再發(fā)一次。)
  4. 連接管理:三次握手,四次揮手
  5. 最大消息長度:理想的情況下是該長度的數據剛好不被網絡層分塊。
  6. 擁塞控制:控制傳輸上流量(發(fā)送數據時開始是慢啟動,先發(fā)送一點點數據去探測網絡擁塞不擁塞,如果不擁塞了,則大量的發(fā)送數據。如果突然擁塞了,則又很慢的發(fā)送數據。這樣是為了盡可能快的發(fā)送數據,避免網絡擁塞造成一系列問題)
  7. 流量控制:TCP利用滑動窗口實現流量控制,流量控制是為了控制發(fā)送方的發(fā)送速率,保證接收方來的及時接收

原理解析

一、檢驗和

檢驗和:通過檢驗和的方式,接收端可以檢測出來數據是否有差錯和異常,假如有差錯就會直接丟棄TCP 段,重新發(fā)送。

TCP在計算檢驗和時,會在TCP首部加上一個12字節(jié)的偽首部。

檢驗和總共計算3 部分:

  • TCP首部
  • TCP數據
  • TCP偽首部;

TCP為什么是可靠的(怎么保證有效傳輸的)?

計算方式如下:在數據傳輸的過程中,將發(fā)送的數據段都當做一個16位的整數。將這些整數加起來。并且前面的進位不能丟棄,補在后面,最后取反,得到校驗和。

  • 發(fā)送方:在發(fā)送數據之前計算檢驗和,并進行校驗和的填充。
  • 接收方:收到數據后,對數據以同樣的方式進行計算,求出校驗和,與發(fā)送方的進行比對。
    TCP為什么是可靠的(怎么保證有效傳輸的)?

注意:如果接收方比對校驗和與發(fā)送方不一致,那么數據一定傳輸有誤。但是如果接收方比對校驗和與發(fā)送方一致,數據不一定傳輸成功。

二、序列號/確認應答

序列號/確認應答機制過程如下:

  • 發(fā)送端每次發(fā)送數據時,TCP就給每個數據包分配一個序列號并且在一個特定的時間內等待接收端對分配的這個序列號進行確認,如果發(fā)送端在一個特定時間內沒有收到接收端的確認,則發(fā)送端會重傳此數據包。
  • 接收端利用序列號對接收的數據進行確認,以便檢測對方發(fā)送的數據是否有丟失或者亂序等,接收端一旦收到已經順序化的數據,它就將這些數據按正確的順序重組成數據流并傳遞到高層進行處理。

上述過程中,只要發(fā)送端有一個包傳輸,接收端沒有回應確認包(ACK包),發(fā)送端就會認為數據丟包,然后進行重發(fā)?;蛘呓邮斩说膽鸢?,發(fā)送端沒有收到也會重發(fā)數據。這就可以保證數據的完整性。

TCP為什么是可靠的(怎么保證有效傳輸的)?

另外:序列號的作用不僅僅是應答的作用,有了序列號能夠將接收到的數據根據序列號排序,并且去掉重復序列號的數據。這也是TCP傳輸可靠性的保證之一。

三、超時重傳

首先,TCP可靠性中最重要的一個機制是處理數據超時和重傳。正是因為有這樣的重傳機制作為保障,在我們傳輸過程發(fā)生錯誤的時候,可以通過重傳機制進行收尾。

超時重傳原理

TCP協(xié)議要求在發(fā)送端每發(fā)送一個報文段,就啟動一個定時器并等待確認信息;接收端成功接收新數據后返回確認信息。若在定時器超時前數據未能被確認,TCP就認為報文段中的數據已丟失或損壞,需要對報文段中的數據重新組織和重傳。

導致重傳的情況

首先,發(fā)送方沒有接收到響應的ACK報文原因可能有兩點:

  • 數據在傳輸過程中由于網絡原因等直接全體丟包,接收方根本沒有接收到。
  • 接收方接收到了響應的數據,但是發(fā)送的ACK報文響應卻由于網絡原因丟包了。

那么發(fā)生上述情況,我們的發(fā)送方在發(fā)送完數據后等待一個時間,時間到達沒有接收到ACK報文,那么對剛才發(fā)送的數據進行重新發(fā)送。

  • 如果是剛才第一個原因,接收方收到二次重發(fā)的數據后,便進行ACK應答。
  • 如果是第二個原因,接收方發(fā)現接收的數據已存在(判斷存在的根據就是序列號,所以上面說序列號還有去除重復數據的作用),那么直接丟棄,仍舊發(fā)送ACK應答。

我們知道,一來一回的時間總是差不多的,都會有一個類似于平均值的概念。比如發(fā)送一個包到接
收端收到這個包一共是0.5s,然后接收端回發(fā)一個確認包給發(fā)送端也要0.5s,這樣的兩個時間就是
RTT(往返時間)。然后可能由于網絡原因的問題,時間會有偏差,稱為抖動(方差)。

所以,超時重傳的時間大概是比往返時間+抖動值還要稍大的時間。

注意:在重發(fā)的過程中,假如一個包經過多次的重發(fā)也沒有收到對端的確認包,那么就會認為接收端異常,強制關閉連接。并且通知應用通信異常強行終止。

四、連接管理

連接管理就是三次握手與四次揮手的過程,過程如下圖所示:

TCP為什么是可靠的(怎么保證有效傳輸的)?

TCP為什么是可靠的(怎么保證有效傳輸的)?

五、最大消息長度

在建立TCP連接的時候,雙方約定一個最大的長度(MSS)作為發(fā)送的單位,重傳的時候也是以這個單位來進行重傳。

理想的情況下是該長度的數據剛好不被網絡層分塊。

雙方協(xié)商最大報文消息長度流程如下所示:
TCP為什么是可靠的(怎么保證有效傳輸的)?

六、擁塞控制

滑動窗口控制解決了兩臺主機之間因傳送速率而可能引起的丟包問題,在一方面保證了TCP數據傳送的可靠性。然而如果網絡非常擁堵,此時再發(fā)送數據就會加重網絡負擔,那么發(fā)送的數據段很可能超過了最大生存時間也沒有到達接收方,就會產生丟包問題。為此TCP引入慢啟動機制,先發(fā)出少量數據,就像探路一樣,先摸清當前的網絡擁堵狀態(tài)后,再決定按照多大的速度傳送數據。

發(fā)送開始時定義擁塞窗口大小為1;每次收到一個ACK應答,擁塞窗口加1;而在每次發(fā)送數據時,發(fā)送窗口取擁塞窗口與接送段接收窗口最小者。

慢啟動:在啟動初期以指數增長方式增長;設置一個慢啟動的閾值,當以指數增長達到閾值時就停 止指數增長,按照線性增長方式增加至擁塞窗口;線性增長達到網絡擁塞時立即把擁塞窗口置回 1,進行新一輪的“慢啟動”,同時新一輪的閾值變?yōu)樵瓉淼囊话搿?/p>

擁塞控制算法主要有:慢啟動、擁塞避免、快重傳和快恢復;

他們的傳播過程圖如下所示:
TCP為什么是可靠的(怎么保證有效傳輸的)?

1、慢啟動

通常在一條TCP連接開始時,cwnd 被設置為 1 個 MSS(最大報文段),也即 cwnd = 1 該階段,每當TCP發(fā)送方將發(fā)送窗口的數據發(fā)送完,并順利接收到所有的確認后,就會將擁塞窗口大小翻倍,也即慢啟動階段,cwnd 以指數形式增長,如下圖所示;注意這里忽略了接收窗口的影響,擁塞窗口會一直增長直到到達慢開始門限 ssthresh,開始執(zhí)行擁塞避免算法。

2、擁塞避免

? 該階段的擁塞窗口變?yōu)榫€性增長,每次 cwnd + 1,也即每次增加一個 MSS;

? 隨著擁塞窗口的增加,發(fā)送速率不斷提高,當TCP遇到分組超時重傳時,即認為發(fā)生了網絡擁塞,此時將更新 擁塞窗口閾值 為當前擁塞窗口閾值的一半,下圖中是更新為 24 的一半即 12 更新 cwnd 的值為1然后繼續(xù)執(zhí)行慢啟動——擁塞避免,如下圖所示;

? 如果TCP發(fā)送方接收到連續(xù)的3個重復確認,則認為是正常的網絡包丟失,而不是網絡擁塞造成的(這正是快重傳算法的功勞)重傳丟失的分組執(zhí)行快恢復算法;

3、快重傳

? 所謂的快重傳算法,就是讓發(fā)送方盡快重傳,而不是等待計時器超時再重傳;

? (1)要求接收方不要等待自己發(fā)送數據時才捎帶確認,而是要立即發(fā)送確認;

? (2)即使是失序的報文段,也要立即發(fā)送對已收到的報文段的重復確認;

? (3)發(fā)送方一旦收到3個連續(xù)的重復確認就認為發(fā)生數據丟包,就將相應的報文段立即重傳,而不是等待該報文的重傳計時器超時再重傳;

TCP為什么是可靠的(怎么保證有效傳輸的)?

4、快恢復

如果發(fā)送方收到了3個重復確認,就執(zhí)行快恢復;

然后將快開始門限(慢啟動閾值)擁塞窗口閾值都設置為原來的一半,然后執(zhí)行慢啟動——擁塞避免;

七、流量控制

流量控制:如果發(fā)送方把數據發(fā)送得過快,接收方可能會來不及接收,這就會造成數據的丟失。

所謂流量控制就是讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來得及接收。利用滑動窗口機制可以很方便地在TCP連接上實現對發(fā)送方的流量控制。

TCP 流量控制是通過滑動窗口機制來實現的,下面我們來看一下:

滑動窗口機制

滑動窗口技術通過動態(tài)改變窗口大小來調節(jié)兩臺主機間數據傳輸,相互連接的主機間存在兩個滑動窗口:

  • 一個用于接收數據(可用窗口)
  • 一個用于發(fā)送數據(發(fā)送窗口)

根據接收端的接收情況,動態(tài)去調整窗口大小,然后來控制發(fā)送端的數據流量。

TCP為什么是可靠的(怎么保證有效傳輸的)?文章來源地址http://www.zghlxwxcb.cn/news/detail-406244.html

到了這里,關于TCP為什么是可靠的(怎么保證有效傳輸的)?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • TCP如何保證可靠性,TCP如何實現可靠性傳輸的

    TCP如何保證可靠性,TCP如何實現可靠性傳輸的

    tcp 如何保證可靠性 大家都知道TCP是可靠性傳輸協(xié)議,既然是可靠的,就需要解決比如包丟失了、數據被破壞了、包重復了、亂序了等等這樣的問題。下面將從幾個方面介紹TCP的可靠性。 1. 校驗和 TCP每一段報文都有校驗和,這保證了報文不被破壞或篡改,如果收到的報文在校

    2024年02月10日
    瀏覽(24)
  • TCP如何保證傳輸的可靠性

    TCP采用哪些方式保證數據傳輸可靠? 答: 1、數據分塊:將數據包劃分為合適的大小,這樣更能適應網絡的限制,如果數據發(fā)生錯誤或丟失,只要重傳有問題的部分即可,減少重傳的數據量。方便進行流量和擁塞控制。 2、數據包有序號,可以根據序號對失序的數據包進行重

    2024年04月11日
    瀏覽(25)
  • TCP 和 UDP 的區(qū)別、TCP 是如何保證可靠傳輸的?

    TCP 和 UDP 的區(qū)別、TCP 是如何保證可靠傳輸的?

    先來介紹一些osi七層模型 分為應用層、表示層、會話層、運輸層、網絡層、鏈路層、物理層。 應用層(數據):確定進程之間 通信的性質 以及滿足用戶需要以及提供網絡和用戶應用,為應用程序提供服務,DNS,HTTP,HTTPS,DHCP,FTP,POP3(Post Office Protocol)、SMTP(Simple Mail Transfer P

    2024年02月11日
    瀏覽(20)
  • 【HBZ分享】TCP可靠性傳輸如何保證的?

    ACK機制是發(fā)送方與接收方的一個相互確認 客戶端向服務端發(fā)送連接請求,此時服務端要回饋給客戶端ACK,以表示服務端接到了客戶端請求,這是第一和的第二次握手 客戶端接收到服務端響應后,同樣也要回饋服務端的響應,告知服務端我收到了你的回饋,我們可以進行傳輸

    2024年02月10日
    瀏覽(20)
  • 計算機網絡-TCP如何保證傳輸可靠性

    計算機網絡-TCP如何保證傳輸可靠性

    TCP協(xié)議傳輸的特點主要就是面向字節(jié)流、傳輸可靠、面向連接。 TCP協(xié)議如何確保傳輸的可靠性的? TCP協(xié)議保證數據傳輸可靠性的方式主要有: 1.校驗和 2.序列號 3.確認應答 4.超時重傳 5.連接管理 6.流量控制 7.擁塞控制 1.校驗和 發(fā)送方:在發(fā)送數據之前計算檢驗和,并進行校驗

    2024年02月05日
    瀏覽(25)
  • 為什么 volatile不能保證原子性

    volatile 本質上是一種內存屏障,它可以確保在 volatile 變量寫操作和讀操作之間不會發(fā)生重排序,這樣就可以保證對 volatile 變量的修改能夠立即對其他線程可見。但是, volatile 只能保證可見性,并不能保證原子性。 在 Java 中,原子性是指一個操作是不可中斷的,即使在

    2024年02月15日
    瀏覽(28)
  • RSA加密為什么能保證安全

    RSA加密為什么能保證安全

    一、原則:公鑰機密、私鑰解密、私鑰簽名、公鑰驗簽 公鑰私鑰都可以加密和解密數據,但是因為持有公鑰和私鑰的人不同,在具體的使用場景中,公私鑰的使用方式,也是有明確規(guī)定的。 公鑰加密/私鑰解密: 因為公鑰是暴露在外的,私鑰確實某個人單獨持有的,當使用私

    2024年02月16日
    瀏覽(25)
  • ChatGPT 在做什么,為什么有效?

    原文:What Is ChatGPT Doing … and Why Does It Work? 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 這本簡短的書試圖從第一原理解釋 ChatGPT 是如何工作的。在某種程度上,這是關于技術的故事。但它也是關于科學的故事。以及關于哲學的故事。為了講述這個故事,我們將不得不匯集許多世紀以來的

    2024年04月09日
    瀏覽(29)
  • ArrayList為什么不是線程安全的,如何保證線程安全?

    ArrayList為什么不是線程安全的,如何保證線程安全?

    官方曰, 線程安全就是多線程訪問時,采?了加鎖機制,當?個線程訪問該類的某個數據時,進?保護,其他線程不能進?訪問直到該線程讀取完,其他線程才可使?。不會出現數據不?致或者數據污染。線程不安全就是不提供數據訪問保護,有可能出現多個線程先后更改數

    2024年02月07日
    瀏覽(45)
  • 為什么說HTTPS比HTTP安全? HTTPS是如何保證安全的?

    為什么說HTTPS比HTTP安全? HTTPS是如何保證安全的?

    在上篇文章中,我們了解到 HTTP 在通信過程中,存在以下問題: 通信使用明文(不加密),內容可能被竊聽 不驗證通信方的身份,因此有可能遭遇偽裝 而 HTTPS 的出現正是解決這些問題, HTTPS 是建立在 SSL 之上,其安全性由 SSL 來保證 在采用 SSL 后, HTTP 就擁有了 HTTPS 的加密

    2024年03月19日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包