青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

libjingle源碼解析(4)-【PseudoTcp】建立UDP之上的TCP(2):對交互數據流的處理

轉載自:http://blog.csdn.net/leehark/article/details/7661271

對交互數據流的處理

TCP包含兩類數據流,交互數據流和成塊數據流。交互數據流的特點是每個報文數據字節數比較小,大部分是10字節一下,而成塊數據流的特點是大部分報文是滿長度的,一般能達到MSS

本文先介紹一些TCPPTCP對交互數據流的處理。

交互式輸入

    Rlogin是典型的交互數據流應用,每一按鍵都會產生數據分組,使客戶端傳輸一個報文,接連總共產生4個報文:

    a.C傳輸交互按鍵數據

    b.S確認C的數據

    c.S回顯C的按鍵

    d.C確認S的回顯

    上面的報文b,c可能會同時包含在一個報文段。而對于TCP報文-40個字節的頭部的協議報文來說每次只傳輸一個字節是個極大的浪費,此外Rlogin這類應用會在短時間內按N個字符,按如上的方式,至少要傳輸3*N個報文。

經受時延的確認

    經受時延的確認考慮了時間有關的細微之處,對于交互類應用,短時間內會產生多個報文。對于TCP,當接收數據時,并不立即發送確認,而先緩存,延遲發送,以便在短時間如果有該方向的數據需要發送,則一同發送,這樣能減少ACK報文的個數,提高報文的利用率。TCP通常等待200ms后發送ACK

    對于PTCP來說,也支持延時確認,默認延時時長為100ms,可以通過選項OPT_ACKDELAY更改延時時間。不另外,如果出現連續兩個不含數據的ACK需要發送,則不會等到100ms,直接會發送ACK報文。PTCP發送ACK的時機如下:

    A. 和SEND數據一起發送

    B. 等到超時(100ms后沒有數據時)時發送

    C. 出錯時發送(如發現對方傳來的數據和預期的不一致,或者ACK被丟失)

    雖然PTCP是等到100ms后發送ACK,但沒有提供任何定時器,只提供了下次需要被提醒的時間(通過方法GetNextClock),然后由業務層來實現定時器并通知到時(通過方法NotifyClock)。這樣,業務層就會有靈活的方式設置定時器,比如通過消息循環,等待事件,完成端口等等。

Nagle算法

    Nagle算法是為了避免在廣域網上出現大量的TCP小分組報文段。該算法要求一個TCP連接上最多只有一個未被確認的小分組。當已經發送的一個分組沒有被確認前,該算法積累所有需要發送的數據,等到未被確認的分組確認了,一同發送,這樣在短時間內出現的小分組合并成一個報文發送,提高了報文的利用率。這個算法是自適應的,得到確認越快,則發送頻率越高。偽代碼如下:

    if there is new data to send

      if the window size >= MSS and available data is >= MSS

        send complete MSS segment now

      else

        if there is unconfirmed data still in the pipe

          enqueue data in the buffer until an acknowledge is received

        else

          send data immediately

        end if

      end if

    end if

    PTCP也支持Nagle算法,可以通過選項OPT_NODELAY開啟或者關閉。Nagle算法的實現比較簡單,當嘗試發送數據時,發現如果有未確認的數據且等待發送的數據長度小于MSS,則延遲發送,如下:

    

  1. void PseudoTcp::attemptSend(SendFlags sflags) {  
  2.     ......  
  3.         // Nagle's algorithm.  
  4.         // If there is data already in-flight, and we haven't a full segment of  
  5.         // data ready to send then hold off until we get more to send, or the  
  6.         // in-flight data is acknowledged.  
  7.         if (m_use_nagling && (m_snd_nxt > m_snd_una) && (nAvailable < m_mss))  {  
  8.           return;  
  9.         }  
  10.     ......  
  11.     }  

窗口大小通告

    TCPPTCP都通過頭部的window字段通告接收緩沖區的可用窗口大小。當客戶端收到服務器的數據,并有等待發送的數據時(開啟Nagle算法時會經常出現此情況),通告給服務器的窗口大小總是小于接收緩沖區的大小,是因為,應用層還沒有拿取剛從服務獲取的數據之前,就會嘗試發送被緩沖的數據。

    PTCP的實現如下:

    當PTCP接收對方發送的數據時會調用NofifyPacket->parse->process,在Process先調用attemptSend發送緩沖的數據,然后通知應用層有可讀數據。

  1. bool PseudoTcp::process(Segment& seg) {  
  2. ......  
  3.         attemptSend(sflags);  
  4.          // If we have new data, notify the user  
  5.          if (bNewData && m_bReadEnable) {  
  6.               m_bReadEnable = false;  
  7.               if (m_notify) {  
  8.                 m_notify->OnTcpReadable(this);  
  9.               }  
  10.               //notify(evRead);  
  11.            }  
  12.          return true;  
  13. }  

posted on 2013-09-01 14:06 楊粼波 閱讀(414) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久伊人精品天天| 国产日韩精品在线观看| 91久久夜色精品国产九色| 亚洲精品偷拍| 国产精品家教| 午夜性色一区二区三区免费视频 | 99热精品在线| 欧美三日本三级三级在线播放| 亚洲午夜激情在线| 久久成人精品一区二区三区| 国产一区二区看久久| 美国十次成人| 亚洲一级影院| 免费久久99精品国产自| 一区二区高清视频| 国产日韩精品视频一区二区三区| 久久亚洲精品伦理| 亚洲精品一区二区三| 久久aⅴ乱码一区二区三区| 91久久午夜| 国产精品免费一区二区三区在线观看| 久久精品视频va| 亚洲精品欧美日韩| 老牛影视一区二区三区| 一区二区三区产品免费精品久久75| 国产麻豆视频精品| 欧美黄污视频| 欧美综合国产| 日韩亚洲欧美一区| 免费观看成人鲁鲁鲁鲁鲁视频| 中文在线资源观看网站视频免费不卡| 狠狠色2019综合网| 欧美午夜精品久久久久久孕妇| 久久人人九九| 亚洲男女自偷自拍| 亚洲裸体视频| 欧美国产综合| 久久久久一本一区二区青青蜜月| 亚洲最新在线视频| 在线观看精品视频| 国产日韩欧美成人| 国产精品二区影院| 欧美日韩ab片| 免费成人激情视频| 久久九九久久九九| 亚洲欧美国产制服动漫| 99成人在线| 亚洲二区三区四区| 牛夜精品久久久久久久99黑人| 性色av一区二区三区| 中文一区二区| 999在线观看精品免费不卡网站| 一区二区视频免费完整版观看| 国产精品久久久久久亚洲毛片| 欧美剧在线观看| 免费在线看成人av| 久久手机精品视频| 久久精品一区| 久久高清免费观看| 久久国产视频网| 欧美伊久线香蕉线新在线| 亚洲在线观看视频网站| 在线亚洲一区二区| 一本久久a久久免费精品不卡| 亚洲日本在线观看| 亚洲激情视频网| 欧美激情一二区| 欧美激情一区二区三区蜜桃视频| 欧美成人午夜激情| 麻豆精品精品国产自在97香蕉| 久久久久久9999| 久久久久久久综合| 久久综合九色综合欧美狠狠| 久久激情综合网| 久久亚裔精品欧美| 欧美多人爱爱视频网站| 欧美激情中文字幕一区二区| 欧美激情小视频| 亚洲激情偷拍| 日韩亚洲成人av在线| 99国产精品一区| 亚洲自拍偷拍福利| 欧美一区二区三区四区高清 | 亚洲经典一区| 亚洲第一天堂av| 亚洲欧洲在线看| 99在线精品观看| 亚洲免费在线观看| 久久精品夜色噜噜亚洲aⅴ| 噜噜噜在线观看免费视频日韩| 欧美高清视频一区二区| 欧美日韩免费看| 国产精品影片在线观看| 激情综合电影网| 亚洲精品一二区| 亚洲性感美女99在线| 久久精品国产亚洲5555| 欧美xx视频| 在线一区视频| 久久精品国产一区二区电影| 欧美福利视频在线| 国产精品嫩草99av在线| 精品不卡视频| 亚洲午夜精品一区二区三区他趣| 午夜在线观看欧美| 欧美xxx在线观看| 中文亚洲欧美| 久久亚洲一区二区| 国产精品黄色在线观看| 激情小说另类小说亚洲欧美| 亚洲另类自拍| 久久成人羞羞网站| 亚洲激情av在线| 午夜视黄欧洲亚洲| 欧美伦理影院| 国内精品久久久久久久影视麻豆 | 国产亚洲午夜| 日韩视频在线免费| 久久精品在线| 亚洲精品乱码久久久久久黑人| 香蕉久久夜色精品国产| 欧美人与禽猛交乱配| 黑丝一区二区三区| 亚洲无线观看| 亚洲黄色影片| 久久久999精品| 国产精品美女久久久久久2018| 亚洲国产高清aⅴ视频| 久久福利资源站| 日韩午夜电影| 欧美xxx成人| 国内精品美女在线观看| 亚洲欧美国产毛片在线| 亚洲日本免费| 免费影视亚洲| 玉米视频成人免费看| 久久成人免费网| 亚洲视频免费在线观看| 欧美大秀在线观看| 一区二区三区在线视频观看| 欧美伊人久久大香线蕉综合69| 亚洲另类一区二区| 欧美11—12娇小xxxx| 在线观看成人小视频| 久久久久久夜精品精品免费| 亚洲综合精品| 国产精品高精视频免费| 一个色综合导航| 亚洲精品视频在线| 欧美激情在线| 亚洲经典在线| 亚洲大胆人体在线| 久久婷婷久久| 尤物yw午夜国产精品视频| 久久久久99| 欧美在线免费视屏| 国内外成人在线| 久久青青草原一区二区| 亚洲欧美一区二区视频| 国产精品一区二区久久国产| 亚洲欧美日韩一区二区三区在线| 一本一道久久综合狠狠老精东影业| 欧美激情一二区| 99精品国产在热久久| 亚洲精品综合| 国产精品扒开腿做爽爽爽软件| 亚洲午夜高清视频| 亚洲午夜激情网站| 国产午夜精品一区理论片飘花| 欧美亚洲一区二区在线观看| 午夜精品久久久久| 国产一区二区高清不卡| 久久婷婷丁香| 免费看成人av| 一二三区精品福利视频| 在线亚洲国产精品网站| 国产伦精品一区二区三区免费 | 欧美在线视频导航| 在线观看久久av| 91久久香蕉国产日韩欧美9色| 欧美日韩综合| 性色av香蕉一区二区| 久久久国产一区二区三区| 亚洲高清在线| 一本色道久久综合亚洲精品高清| 国产精品日本一区二区| 久久久久久亚洲精品杨幂换脸| 美女诱惑一区| 亚洲午夜在线观看视频在线| 亚洲综合色在线| 韩日成人av| 日韩视频第一页| 国产偷久久久精品专区| 欧美高清一区| 国产精品视频yy9299一区| 免费的成人av| 国产精品v欧美精品∨日韩| 久久蜜桃精品| 欧美日韩网址| 另类人畜视频在线|