1. 程式人生 > >UDP的流量控制和資料報丟失問題試驗分析

UDP的流量控制和資料報丟失問題試驗分析

伺服器程式有效程式碼片段

#include "unp.h"
#include <stdio.h>
static int counter;
static void recvfrom_int(int signo)
{
    fprintf(stdout, "\nreceived %d datagrams\n", counter);
    exit(0);
}
void dg_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
    int n;
    counter = 0;
    socklen_t len;
    char buf[MAXLINE];
    Signal(SIGINT, recvfrom_int);
    for(;;){
        len = clilen;
        n = Recvfrom(sockfd, buf, MAXLINE, 0, pcliaddr, &len);
        Sendto(sockfd, buf, n, 0, pcliaddr, len);
        usleep(1);
        counter++;
    }
}

客戶端程式有效程式碼片段

#include "unp.h"

const int NUM = 2000;
const int DGRAM_LEN = 1400;
void do_cli(FILE *fp, int sockfd,
const struct sockaddr *pservaddr, socklen_t servlen)
{
    int n;
    char buf[MAXLINE];
    int i = 0;
    for(i = 0; i < NUM; ++i){
        Sendto(sockfd, buf, DGRAM_LEN, 0, pservaddr, servlen);
    }
}

試驗假想:

1.因為本機是在同一臺主機上面執行的程式所以我們需要,通過呼叫usleep()函式來模擬,伺服器端程式在低速主機上面執行。

2.客服戶成傳送2000個大小為1400位元組的UDP資料報給伺服器,然後通過回射處理髮回。

3.通過伺服器程式中counter計數來表明伺服器接收到的UDP資料報個數。

執行結果如下:


實驗結果:接受到了402個數據報,那個造成了資料報丟失率為80%

結果多次試驗結果下圖:


伺服器接受的資料報的數目不確定性分析:

1、網路負載。

2、客戶機處理負載。

3、伺服器主機處理負載。

針對資料問題解決方案:

增大套接字緩衝區大小

通過呼叫setsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)

伺服器埠程式:

#include "unp.h"
#include <stdio.h>
static int counter;
static void recvfrom_int(int signo)
{
    fprintf(stdout, "\nreceived %d datagrams\n", counter);
    exit(0);
}
void dg_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
    int n;
    int bufsize = 2000 * 1500;
    int flag = setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize));
    if(flag == 0 ) printf("set up successfully\n");
    counter = 0;
    socklen_t len;
    char buf[MAXLINE];
    Signal(SIGINT, recvfrom_int);
    for(;;){
        len = clilen;
        n = Recvfrom(sockfd, buf, MAXLINE, 0, pcliaddr, &len);
        Sendto(sockfd, buf, n, 0, pcliaddr, len);
        usleep(1);
        counter++;
    }
}
執行結果:

綜合以上結果分析,將UDP的接受緩衝區改大對試驗結果改善程度不是很明顯。


相關推薦

UDP流量控制資料丟失問題試驗分析

伺服器程式有效程式碼片段 #include "unp.h" #include <stdio.h> static int counter; static void recvfrom_int(int signo) { fprintf(stdout, "\n

UDP迭代伺服器示例UDP流量控制的缺失

        我們知道, 有tcp伺服器, 也有udp伺服器, 這是按照協議來區分的。 如果按照服務方式來分, 還可以分為迭代伺服器和併發伺服器。         所謂迭代伺服器, 就是單個程序/執行緒在單個埠上順序處理所有客戶端的請求, 而併發伺服器就不一樣了, 可以通

TCPUDP流量控制擁塞控制

URL訪問網站時的網路傳輸全過程,歸納起來就是: 首先要通過域名找到IP,如果快取裡沒有就要請求DNS伺服器;得到IP後開始於目的主機進行三次握手來建立TCP連線;連線建立後進行HTTP訪問,傳輸並獲取網頁內容;傳輸完後與目的主機四次揮手來斷開TCP連線。 整個過程基本分

TCP的流量控制擁塞控制

建立 可見 art 個數 組裝 fff 效率 分享 設定 TCP的流量控制 1. 利用滑動窗口實現流量控制 如果發送方把數據發送得過快,接收方可能會來不及接收,這就會造成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。 利用滑動

TCP 流量控制擁塞控制中的重要機制

TCP 流量控制 擁塞避免 停止等待協議: 放送方發送一個數據包,要收到接收方對該包的確認後,才發送下一個數據包。 缺點:慢,信道利用率低。 ARQ Automatic Repeat reQuest 接收方采用累加確認的方式,接收方不必對每一個分組進行缺,只需要對按序到達的最後一個分組發送確認。

TCP流量控制擁塞避免

流量 第一次 操作 recovery 報文段 規律 進入 等於 長度 TCP的流量控制 所謂的流量控制就是讓發送方的發送速率不要太快,讓接收方來得及接受。利用滑動窗口機制可以很方便的在TCP連接上實現對發送方的流量控制。TCP的窗口單位是字節,不是報文段,發送方的

資料鏈路層_流量控制差錯控制、協議

data link layer最重要的職能就是流量控制(flow control)和差錯控制(error control), 這些控制功能就是我們所說的鏈路控制(data link control)。 那麼流量和差錯到底怎麼控制呢,下面讓我們一起來看看: 流量控制

TCP協議的流量控制擁塞控制

流量控制與擁塞控制可是TCP協議的兩大特點,這兩者是有一定關聯的。 流量控制就是讓傳送方的發生速率不要太快,要讓接收方來的及接收,不然會找出資料溢位丟失。流量控制是利用滑動視窗機制實現的。 1.

《TCP/IP協議族》:TCP的流量控制擁塞控制

1.流量控制  所謂的流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接受。利用滑動視窗機制可以很方便的在TCP連線上實現對傳送方的流量控制。TCP的視窗單位是位元組,不是報文段,傳送方的傳送視窗不能超過接收方給出的接收視窗的數值。 如圖所示,

流模式資料模式的區別

“TCP是一種流模式的協議,UDP是一種資料報模式的協議”, 1、TCP 打個比方比喻TCP,你家裡有個蓄水池,你可以裡面倒水,蓄水池上有個龍頭,你可以通過龍頭將水池裡的水放出來,然後用各種各樣的容器裝(杯子、礦泉水瓶、鍋碗瓢盆)接水。 上面的例子中,往

Storm 的流量控制多執行緒併發處理

面臨問題: storm多執行緒的時候,會遇到併發修改的問題,會報concurrentModificationException,如下圖所示 解決方法: 第一種治標不治本的方法: 一方面,對傳送到kafka的資料進行控制,將執行緒sleep的時

網路層概述.虛電路網路資料網路

1 網路層提供您主機到主機的服務。(什麼服務?資料傳輸嗎) 2 網路層的主要功能是路由和轉發,部分網路層還提供連結服務(如ATM)。路由是從端到端的確定資料在整個網路上的傳輸路徑,轉發是在某個節點將資料從輸入埠轉發的適當的輸出埠,路由演算法的執行結果確定了每個路由器的轉發表

虛電路資料的區別以及應用

TCP的特性就是面向連線的,是可靠傳輸,可以差錯控制和流量控制,TCP的資料傳送是建立在虛電路的基礎上的。 為面向連線的會話建立的通訊通道自然是邏輯的,常被稱作虛電路(virtual circuit),它關心的是端點。與在網路上尋求一條實際的物理路徑相比,這條通道更關

面試之路(29)-TCP流量控制擁塞控制-滑動視窗協議詳解

擁塞: 擁塞發生的主要原因在於網路能夠提供的資源不足以滿足使用者的需求,這些資源包括快取空間、鏈路頻寬容量和中間節點的處理能力。由於網際網路的設計機制導致其缺乏“接納控制”能力,因此在網路資源不足時不能限制使用者數量,而只能靠降低服務質量來繼續為使用者服務,也

資料資料間的聯絡差別

   資料單元(data unit)指許多資訊單元。常用的資料單元有服務資料單元(SDU)、協議資料單元(PDU)。SDU是在同一機器上的兩層之間傳送資訊。PDU是傳送機器上每層的資訊傳送到接收機器上的相應層(同等層間交流用的)。

TCP的流量控制擁塞控制 (小結)

1、TCP的流量控制 1. 利用滑動視窗實現流量控制     如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。     利用滑動視窗機制可以很方便地在TCP連線上實現對傳送方的流量控制。 2、TCP的擁塞

TCP的流量控制阻塞控制

擁塞避免 探測 此外 理論 傳輸速率 相互 其他 個數 可能 流量控制和阻塞控制實例: 可以用一個例子來說明這種區別。設某個光纖網絡的鏈路傳輸速率為1000Gbit/s。有一臺巨型計算機向一臺個人電腦以1Gbit/s的速率傳送文件。顯然,網絡本身的帶寬是足夠

TCP流量控制擁塞控制

random 很快 tcp報文 使用 空間 正常 出現 防止 數據 轉自:https://www.cnblogs.com/wxgblogs/p/5616829.html RED不是等到已經發生擁塞後才把所有隊列尾部的分組全部丟棄,而是在檢測到網絡擁塞的早期征兆時(即路

sentinel流量控制熔斷降級執行流程之原始碼分析

前言:  sentinel是阿里針對服務流量控制、熔斷降級的框架,如何使用官方都有很詳細的文件,下載它的原始碼包 裡面對各大主流框都做了適配按理,本系列文章目的 主要通過原始碼分析sentinel流量控制和熔斷降級的流程 提前準備好sentinel控制檯 如有下載原始碼啟動sentinel dashboard

計算機網路(七)--使用者資料協議UDP傳輸控制協議TCP概述

使用者資料報協議UDP只在IP的資料報服務之上增加了很少一點的功能:複用、分用、差錯檢測。 (1)UDP是無連線的,即傳送資料之前不需要建立連線(當然,傳送資料結束時也沒有連線可釋放),因此減少了開銷和傳送資料之前的時延。 (2)UDP使用盡最大努力交付,即不保證可靠交付,