回覆列表
  • 1 # 運維的榕樹

    根據定位問題到解決問題的思路:

    1.確認網路鏈路問題,ping測和traceroute確認鏈路是否健康。如果鏈路有問題,找對應網路管理員排查網路。

    2.確認系統問題,透過wireshark或者tcpdump在應用系統兩端抓包,定位問題所在,排查是傳送或者接受系統網絡卡、效能問題

    3.從tcp應用本身排查,透過在程式上新增除錯程式碼,核查是否應用邏輯處理問題

    4.如果上述步驟無法定位問題,請教附近同事幫忙分析下,避免自己陷入固定思維而忽略了什麼細節,導致問題複雜化了。

  • 2 # 運維攻城獅

    一、回答這個問題之前,要考慮TCP協議為什麼會丟包,在什麼樣的情況下會丟包。

    1、TCP協議定義(Transimission Control Protocol)是以一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。

    2、TCP是基於不可靠的網路實現可靠傳輸,肯定會存在丟包問題。

    3、如果在通訊過程中,發現缺少資料或者丟包,那邊麼最大的可能性是程式傳送過程或者接受過程中出現問題。

    例如:我有2臺伺服器 ,A和B伺服器。

    A伺服器傳送資料給B伺服器頻率過高時,B伺服器來不及處理,造成資料丟包。(原因可能是程式邏輯問題,多執行緒同步問題,緩衝區溢位問題)

    如果A伺服器不對傳送頻率進行控制,或者資料進行重發的話,那麼B伺服器收到資料就會少。就會造成丟失資料

    二、TCP協議丟包後,如何解決丟包的問題

    為了滿足TCP協議不丟包。TCP協議有如下規定

    1、資料分片:傳送端對資料進行分片,接受端要對資料進行重組,由TCP確定分片的大小並控制分片和重組

    2、到達確認:接收端接收到分片資料時,根據分片資料序號向傳送端傳送一個確認

    3、超時重發:傳送方在傳送分片時設定超時定時器,如果在定時器超時之後沒有收到相應的確認,重發分片資料

    4、滑動視窗:TCP連線的每一方的接受緩衝空間大小固定,接收端只允許另一端傳送接收端緩衝區所能接納的資料,TCP在滑動視窗的基礎上提供流量控制,防止較快主機致使較慢主機的緩衝區溢位

    5、失序處理:作為IP資料報來傳輸的TCP分片到達時可能會失序,TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層;

    6、重複處理:作為IP資料報來傳輸的TCP分片會發生重複,TCP的接收端必須丟棄重複的資料;

    7、資料校驗:TCP將保持它首部和資料的檢驗和,這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到分片的檢驗和有差錯,TCP將丟棄這個分片,並不確認收到此報文段導致對端超時並重發

  • 3 # 迷茫的風來了

    目前我們的計算機網路體系是一種分層結構,一共七層!下層為上層提供服務!比如連線,傳輸等!而TCP屬於第四層傳輸層!傳輸層的任務就是網路上提供完整的資料傳送!

    TCP是一個面向連線的可能的傳輸層協議!來自上層的資料到達傳輸層後首先雙方傳送同步資料包建立連線,再有TCP分組分片!把整個的資料分成符合大小的塊,然後分別傳送,在TCP的頭部有記錄順序的序列號,有控制傳送速度的滑動視窗,校驗和等資訊!一個或多個塊到達接收端後,由接收端檢驗資料包的正確性,然後傳送相應序列號的確認,沒有被確認的序列號資料塊將被重新傳送來保證資料的完整性!

    同時接收端可以根據自己的緩衝區大小,傳送改變相應的滑動視窗資料值以避免傳送端傳送速率過快而是接受端沒有緩衝而丟包!

  • 4 # 青蓮網路雲服務

    TCP在不可靠的網路上實現可靠的傳輸,必然會有丟包。TCP是一個“流”協議,一個詳細的包將會被TCP拆分為好幾個包上傳,也是將會把小的封裝成大的上傳,這就是說TCP粘包和拆包難題。

    但是許多人有不同的理解。TCP協議本身確保傳輸的資料不會丟失完整性。如果在傳輸過程中發現數據丟失或資料包丟失,最大的可能性是在傳送或接收程式的過程中出現問題。

    例如,伺服器向客戶端傳送大量資料,並且傳送頻率非常高,因此傳送連結中很可能會出現錯誤(1、程式處理邏輯錯誤;2、多執行緒同步問題;3、緩衝區溢位等)如果傳送失敗得不到處理,那麼客戶端收到得資料將少於理論資料,這將導致資料丟失與資料包丟失。這種現象,其實本質上來說不是丟包,也不是丟資料,只是因為程式處理有錯誤,導致有些資料沒有成功地被socket傳送出去。

    關於send函式的問題:

    首先必須明確send函式做了什麼。 他是將資料傳遞給本地TCP層,還是將資料傳遞給應用層,確認接收方TCP層後再返回。在後者的情況下,你說的沒錯,其實不然。 那是由於nagle演算法不能使用了,即該演算法將send函式接收的小資料彙總成大資料包傳送。

    即使send函式能進行資料傳送,對方也不一定被接受。 TCP協議只是在傳輸層履行義務,send函式只是應用層起到向TCP層傳遞資料的作用,除此之外與TCP層沒有任何關係。

    常見的解決方案包括拆包、新增包頭和傳送組合包。如果伺服器或客戶端斷開連線,一般會使用心跳測試。

    心跳測試:每隔一段時間向伺服器傳送資料包。為了節省資源,通常會發送空資料包。如果傳送失敗表明套接字已斷開,此時需要根據特定條件釋放資源並重新連線。

    TCP傳輸可以保證資料交換的可靠性,這意味著一臺主機將資料正確地傳輸到目標計算機,目標計算機的協議棧有一定的限制,如果不及時處理在目標計算機上接收到的資料,堆疊就會溢位。

    這種溢位不是由TCP協議本身引起的,而是由系統的IP協議棧的緩衝區溢位引起的。

  • 5 # 拋開想象空間

    TCP在不可靠的網路上實現可靠的傳輸,必然會有丟包。TCP是一個“流”協議,一個詳細的包將會被TCP拆分為好幾個包上傳,也是將會把小的封裝成大的上傳,這就是說TCP粘包和拆包難題。

    但是許多人有不同的理解。TCP協議本身確保傳輸的資料不會丟失完整性。如果在傳輸過程中發現數據丟失或資料包丟失,最大的可能性是在傳送或接收程式的過程中出現問題。

    例如,伺服器向客戶端傳送大量資料,並且傳送頻率非常高,因此傳送連結中很可能會出現錯誤(1、程式處理邏輯錯誤;2、多執行緒同步問題;3、緩衝區溢位等)如果傳送失敗得不到處理,那麼客戶端收到得資料將少於理論資料,這將導致資料丟失與資料包丟失。這種現象,其實本質上來說不是丟包,也不是丟資料,只是因為程式處理有錯誤,導致有些資料沒有成功地被socket傳送出去。

    關於send函式的問題:

    首先必須明確send函式做了什麼。 他是將資料傳遞給本地TCP層,還是將資料傳遞給應用層,確認接收方TCP層後再返回。在後者的情況下,你說的沒錯,其實不然。 那是由於nagle演算法不能使用了,即該演算法將send函式接收的小資料彙總成大資料包傳送。

    即使send函式能進行資料傳送,對方也不一定被接受。 TCP協議只是在傳輸層履行義務,send函式只是應用層起到向TCP層傳遞資料的作用,除此之外與TCP層沒有任何關係。

    常見的解決方案包括拆包、新增包頭和傳送組合包。如果伺服器或客戶端斷開連線,一般會使用心跳測試。

    心跳測試:每隔一段時間向伺服器傳送資料包。為了節省資源,通常會發送空資料包。如果傳送失敗表明套接字已斷開,此時需要根據特定條件釋放資源並重新連線。

    TCP傳輸可以保證資料交換的可靠性,這意味著一臺主機將資料正確地傳輸到目標計算機,目標計算機的協議棧有一定的限制,如果不及時處理在目標計算機上接收到的資料,堆疊就會溢位。

    這種溢位不是由TCP協議本身引起的,而是由系統的IP協議棧的緩衝區溢位引起的!

  • 6 # 朋友圈影院

    回答這個問題之前,要從以下兩個方面去排查:一、TCP協議為什麼會丟包,在什麼樣的情況下會丟包。

    1、TCP協議定義(Transimission Control Protocol)是以一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。

    2、TCP是基於不可靠的網路實現可靠傳輸,肯定會存在丟包問題。

    3、如果在通訊過程中,發現缺少資料或者丟包,那邊麼最大的可能性是程式傳送過程或者接受過程中出現問題。

    舉個栗子:假如我有2臺伺服器 ,a和b伺服器。

    a伺服器傳送資料給B伺服器頻率過高時,b伺服器來不及處理,造成資料丟包。(原因可能是程式邏輯問題,多執行緒同步問題,緩衝區溢位問題)

    如果a伺服器不對傳送頻率進行控制,或者資料進行重發的話,那麼b伺服器收到資料就會少。就會造成丟失資料

    二、TCP協議丟包後,如何解決丟包的問題

    為了滿足TCP協議不丟包。TCP協議有如下規定

    1、資料分片:傳送端對資料進行分片,接受端要對資料進行重組,由TCP確定分片的大小並控制分片和重組

    2、到達確認:接收端接收到分片資料時,根據分片資料序號向傳送端傳送一個確認

    3、超時重發:傳送方在傳送分片時設定超時定時器,如果在定時器超時之後沒有收到相應的確認,重發分片資料

    4、滑動視窗:TCP連線的每一方的接受緩衝空間大小固定,接收端只允許另一端傳送接收端緩衝區所能接納的資料,TCP在滑動視窗的基礎上提供流量控制,防止較快主機致使較慢主機的緩衝區溢位

    5、失序處理:作為IP資料報來傳輸的TCP分片到達時可能會失序,TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層;

    6、重複處理:作為IP資料報來傳輸的TCP分片會發生重複,TCP的接收端必須丟棄重複的資料;

    7、資料校驗:TCP將保持它首部和資料的檢驗和,這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到分片的檢驗或有差錯,TCP將丟棄這個分片,並不確認收到此報文段導致對端超時並重發

    TCP三次握手,四次釋放圖:

  • 中秋節和大豐收的關聯?
  • 宏碁筆記本f1到f12鍵圖示代表什麼?