tcp丟包率 網路程式設計 TCP IP基礎知識

2021-10-11 23:29:49 字數 1859 閱讀 9726

tcp/ip基礎知識

網路由下向上可以分成:資料鏈路層(data-link layer)網路層(network layer)傳輸層(transport layer)ip層負責從源主機和目標主機傳輸資料報,它主要負責下面的事情:

乙個ip資料報的組成大概是這樣的:

[ip資料報] = [ip頭] + [ip資料]

[ip頭] = 源位址+目標位址+校驗資訊+...

關於ip協議還有一些要注意的地方:

ip位址組成:網路id+主機id。用掩碼可以得到各個部分,掩碼中的二進位制1表示網路id,0表示主機id,可讀方式如:255.255.255.0,這表示前3個位元組為網路id,第4個位元組為主機id。由於左邊的總是網路id,可以簡單表示為:204.152.189.0/24,24表示網路id佔24位。

ipv6也有回環位址::1和萬用字元位址::

一般帶有埠的位址表示法,ipv4:204.152.189.116:80,ipv6:[f000::a:1]:80

最常用的兩個傳輸層協議是tcp和udp,傳輸層增加了埠的概念,它把目標從主機進一步細分到程式,ip位址關注的是網路中的主機,而埠則是關注主機中的程式。

1024以下埠被預留給特殊的應用協議,所以我們自己寫的服務端程式一般埠要大於1023,比較常用的預留埠有:

udp在ip包之上僅僅增加了埠和資料校驗,所以它的優點是速度很快,缺點也很明顯,就是無連線和不可靠。

上面看到ip包如果超過mtu會產生碎片化,而udp沒有辦法知道最小mtu是多少,所以在實踐中udp包的大小要做限制,盡可能不要引起ip包碎片化,許多基於udp的程式選擇512位元組來限制udp包的大小。

tcp協議提供了可靠的,面向連線的,雙向的位元組流通信方式:

流量控制:這是了防止傳送端傳送資料過快,接收端來不及接收導致丟失資料,tcp使用乙個叫滑動視窗的演算法來控制流量。接收端在回發確認包時,告訴傳送端我這邊快取還有多少可用(視窗大小),傳送端根據這個視窗大小調整發包的速度,如果視窗為0,表示接收端緩衝區滿了,此時傳送端停止傳送。停了之後,傳送端會啟動乙個定時器,定時向接收端發探測段,接收端回應視窗大小,這樣傳送端又可以開始傳送資料。

擁塞控制:流量控制與接收方的快取狀態相關,而擁塞控制則與網路的擁堵情況相關,擁塞控制是為了防止傳送資料過快使網路擁堵,這可能會導致比較高的丟包率,而tcp有傳重機制,會繼續向網路重傳資料,這又進一步使網路擁堵。擁塞控制主要是結合了兩種演算法:慢啟動和擁塞避免,感興趣的可以進一步閱讀相關文件,這裡就略過了。

從上面描述可以看出,tcp的確是乙個非常複雜的協議,我們只是簡單的描述,也許有些細節不完全正確,如果想更深入了解tcp協議,請閱讀tcp/ip詳解。

網路丟包率如何解決

摘要 網路丟包是我們在使用ping 檢測某個系統能否正 常執行 對目站進行詢問時,資料報由於各種原因在通道中丟失的現象。ping使用了icmp回送請求與回送回答報文。icmp回送請求報文是主機或路由器 向乙個特定的目的主機發出的詢問,收到此報文的機器必須給源主機傳送icmp回送回答報文。這種詢問報文...

網路丟包率如何解決

網路丟包是我們在使用ping 檢測某個系統能否正 常執行 對目站進行詢問時,資料報由於各種原因在通道中丟失的現象。ping使用了icmp回送請求與回送回答報文。icmp回送請求報文是主機或路由器 向乙個特定的目的主機發出的詢問,收到此報文的機器必須給源主機傳送icmp回送回答報文。這種詢問報文用來測...

TCP通訊丟包原因總結

出處 今天在公司問老大,公司的專案底層,是使用的tcp,因為可靠,自動斷線重連,在底層都實現了,但是我記得tcp也會有掉包的問題,所以這文章就誕生了 關於tcp掉包的問題,tcp是基於不可靠的網路實現可靠的傳輸,肯定也會存在掉包的情況。如果通訊中發現缺少資料或者丟包,那麼,最大的可能在於程式傳送的過...