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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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):對交互數(shù)據(jù)流的處理

轉(zhuǎn)載自:http://blog.csdn.net/leehark/article/details/7661271

對交互數(shù)據(jù)流的處理

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

本文先介紹一些TCPPTCP對交互數(shù)據(jù)流的處理。

交互式輸入

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

    a.C傳輸交互按鍵數(shù)據(jù)

    b.S確認C的數(shù)據(jù)

    c.S回顯C的按鍵

    d.C確認S的回顯

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

經(jīng)受時延的確認

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

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

    A. 和SEND數(shù)據(jù)一起發(fā)送

    B. 等到超時(100ms后沒有數(shù)據(jù)時)時發(fā)送

    C. 出錯時發(fā)送(如發(fā)現(xiàn)對方傳來的數(shù)據(jù)和預期的不一致,或者ACK被丟失)

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

Nagle算法

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

    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開啟或者關(guān)閉。Nagle算法的實現(xiàn)比較簡單,當嘗試發(fā)送數(shù)據(jù)時,發(fā)現(xiàn)如果有未確認的數(shù)據(jù)且等待發(fā)送的數(shù)據(jù)長度小于MSS,則延遲發(fā)送,如下:

    

  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字段通告接收緩沖區(qū)的可用窗口大小。當客戶端收到服務器的數(shù)據(jù),并有等待發(fā)送的數(shù)據(jù)時(開啟Nagle算法時會經(jīng)常出現(xiàn)此情況),通告給服務器的窗口大小總是小于接收緩沖區(qū)的大小,是因為,應用層還沒有拿取剛從服務獲取的數(shù)據(jù)之前,就會嘗試發(fā)送被緩沖的數(shù)據(jù)。

    PTCP的實現(xiàn)如下:

    當PTCP接收對方發(fā)送的數(shù)據(jù)時會調(diào)用NofifyPacket->parse->process,在Process先調(diào)用attemptSend發(fā)送緩沖的數(shù)據(jù),然后通知應用層有可讀數(shù)據(jù)。

  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 楊粼波 閱讀(410) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   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>
            国产精品久久久久9999吃药| 亚洲美女在线看| 亚洲人成在线播放网站岛国| 亚洲大片精品永久免费| 亚洲高清在线| 99re亚洲国产精品| 夜久久久久久| 午夜在线观看欧美| 可以免费看不卡的av网站| 欧美国产视频在线| 亚洲精品乱码久久久久久久久| 亚洲一区精品视频| 欧美综合激情网| 免费看的黄色欧美网站| 91久久精品久久国产性色也91| 日韩亚洲精品视频| 小处雏高清一区二区三区| 久久综合九色综合网站| 欧美日韩的一区二区| 国产精品久久久| 亚洲激情啪啪| 欧美主播一区二区三区美女 久久精品人| 久久久国产一区二区| 亚洲精品你懂的| 亚洲午夜视频| 欧美成ee人免费视频| 国产精品视频xxxx| 99国产精品久久久久久久成人热| 亚洲欧美日韩在线综合| 欧美大胆成人| 午夜精品在线| 欧美色欧美亚洲另类二区| 在线欧美一区| 久久久久久久国产| 亚洲天堂视频在线观看| 免费观看成人| 国产一区二区三区在线免费观看| 99re6热只有精品免费观看| 久久综合色综合88| 欧美一区二区三区四区夜夜大片 | 国产精品成人v| 在线色欧美三级视频| 久久精品视频在线看| 亚洲免费福利视频| 久久理论片午夜琪琪电影网| 国产精品一区二区久激情瑜伽| 一本到高清视频免费精品| 欧美aⅴ99久久黑人专区| 欧美一区二区三区在线看| 国产精品女人网站| 亚洲一区久久| 一二三区精品福利视频| 欧美日韩成人在线播放| 亚洲最快最全在线视频| 91久久国产精品91久久性色| 美女成人午夜| 亚洲国产黄色| 亚洲国产成人久久综合一区| 免费亚洲电影在线| 91久久久一线二线三线品牌| 欧美激情偷拍| 欧美日韩亚洲一区| 亚洲永久免费av| 亚洲午夜精品在线| 国产日韩欧美| 猛男gaygay欧美视频| 麻豆精品在线观看| 久久久久久综合| 欧美一区二区在线观看| 激情视频亚洲| 亚洲大片免费看| 美女视频黄 久久| 亚洲精品乱码| 一本色道**综合亚洲精品蜜桃冫 | 欧美精品在线一区| 99国产精品国产精品久久| 亚洲久色影视| 国产乱码精品一区二区三区av| 久久高清一区| 久久视频免费观看| 亚洲麻豆国产自偷在线| aa国产精品| 国产一区二区中文| 亚洲人成网站在线观看播放| 欧美裸体一区二区三区| 欧美亚洲一区在线| 老牛影视一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 久久裸体艺术| 日韩一二三区视频| 亚洲色图自拍| 在线观看亚洲精品视频| 亚洲国产成人高清精品| 国产精品嫩草99av在线| 欧美成年人视频网站| 欧美日韩一区在线观看| 久久婷婷麻豆| 国产精品国产三级国产普通话蜜臀 | 99精品视频一区二区三区| 亚洲一区二区视频在线| 亚洲成人在线网站| 亚洲视频免费在线| 最新亚洲激情| 久久精品国产69国产精品亚洲| 亚洲精品一二三| 欧美一区影院| 亚洲一二三区在线| 蜜臀av在线播放一区二区三区| 午夜一区在线| 欧美日韩免费一区二区三区视频 | 欧美成人午夜视频| 欧美国产激情二区三区| 国产精品亚洲欧美| 免费欧美在线视频| 国产精品青草久久| 亚洲精品一区二区三区福利| 国产在线精品二区| 亚洲免费影院| 亚洲视频日本| 欧美日韩国产bt| 亚洲激情影视| 亚洲黄色av一区| 久久蜜桃精品| 猛干欧美女孩| 亚洲国产岛国毛片在线| 久久久久久夜| 免费一区二区三区| 一区在线观看| 久久综合久久综合久久综合| 久色成人在线| 亚洲高清视频一区| 欧美成年人视频网站| 亚洲国产91精品在线观看| 亚洲国产欧美不卡在线观看| 免费人成网站在线观看欧美高清| 欧美国内亚洲| 一本色道久久综合| 欧美午夜电影一区| 亚洲一区二区三区四区五区黄| 亚洲午夜在线观看视频在线| 国产精品久久久久久久午夜片| 亚洲视频图片小说| 久久成人综合网| 精品99一区二区三区| 另类激情亚洲| 亚洲精品视频在线观看网站| 亚洲一区二区三区午夜| 国产伦精品一区二区三区四区免费| 亚洲综合精品自拍| 久久综合福利| 亚洲精品资源美女情侣酒店| 欧美日本国产在线| 亚洲免费一级电影| 美日韩在线观看| aa国产精品| 国产美女精品视频免费观看| 久久九九99视频| 最新国产乱人伦偷精品免费网站| 亚洲视频一区在线观看| 国产在线国偷精品产拍免费yy| 欧美1级日本1级| 亚洲午夜激情网页| 欧美bbbxxxxx| 亚洲欧美国产三级| 亚洲国产精品一区二区久| 欧美性淫爽ww久久久久无| 久久青草欧美一区二区三区| 日韩亚洲一区二区| 美女精品视频一区| 亚洲一区二区三区在线| 极品尤物久久久av免费看| 欧美伦理一区二区| 久久久另类综合| 在线亚洲一区二区| 欧美国产日本韩| 久久精品视频va| 一区二区三区免费网站| 在线成人欧美| 国产日韩av一区二区| 欧美绝品在线观看成人午夜影视 | 国产精品成人一区二区三区夜夜夜 | 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品综合| 国外成人在线| 欧美视频久久| 欧美成人日本| 久久精品免费看| 亚洲一级特黄| 亚洲理论在线观看| 欧美激情成人在线| 麻豆精品91| 久久国产精彩视频| 亚洲欧美国产制服动漫| 日韩一区二区福利| 亚洲人www| 亚洲国产综合在线| 影音先锋久久精品| 激情综合电影网| 一区二区三区在线观看国产| 国产免费成人在线视频|