日韩精品中文字幕一区二区-日韩精品中文字幕一区-日韩精品中文字幕视频-日韩精品在线一区二区三区-第一页在线-第一福利视频

當前位置: 首頁IT技術 → nagle算法在網絡編程的作用

nagle算法在網絡編程的作用

更多

TCP/IP協議中,無論發送多少數據,總是要在數據前面加上協議頭,同時,對方接收到數據,也需要發送ACK表示確認。為了盡可能的利用網絡帶寬,TCP總是希望盡可能的發送足夠大的數據。(一個連接會設置MSS參數,因此,TCP/IP希望每次都能夠以MSS尺寸的數據塊來發送數據)。

Nagle算法就是為了盡可能發送大塊數據,避免網絡中充斥著許多小數據塊。

Nagle算法的基本定義是任意時刻,最多只能有一個未被確認的小段。 所謂“小段”,指的是小于MSS尺寸的數據塊,所謂“未被確認”,是指一個數據塊發送出去后,沒有收到對方發送的ACK確認該數據已收到。

舉個例子,比如之前的blog中的實驗,一開始client端調用socket的write操作將一個int型數據(稱為A塊)寫入到網絡中,由于此時連接是空閑的(也就是說還沒有未被確認的小段),因此這個int型數據會被馬上發送到server端,接著,client端又調用write操作寫入‘\r\n’(簡稱B塊),這個時候,A塊的ACK沒有返回,所以可以認為已經存在了一個未被確認的小段,所以B塊沒有立即被發送,一直等待A塊的ACK收到(大概40ms之后),B塊才被發送。整個過程如圖所示:

這里還隱藏了一個問題,就是A塊數據的ACK為什么40ms之后才收到?這是因為TCP/IP中不僅僅有nagle算法,還有一個ACK延遲機制 。當Server端收到數據之后,它并不會馬上向client端發送ACK,而是會將ACK的發送延遲一段時間(假設為t),它希望在t時間內server端會向client端發送應答數據,這樣ACK就能夠和應答數據一起發送,就像是應答數據捎帶著ACK過去。在我之前的時間中,t大概就是40ms。這就解釋了為什么'\r\n'(B塊)總是在A塊之后40ms才發出。

如果你覺著nagle算法太搗亂了,那么可以通過設置TCP_NODELAY將其禁用 。當然,更合理的方案還是應該使用一次大數據的寫操作,而不是多次小數據的寫操作。

熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)
主站蜘蛛池模板: 性视频网站在线| 查理和劳拉| 白洁少妇董汐星空传媒影视 | cctv6电影节目表| 少女集中营阅读| 大海歌词 张雨生| 风花电影完整版免费观看| 好像怎么造句 二年级| 追龙演员表全部名单| 洛克线| 山本裕典| 正在行动| 包青天开封奇案| 伦理<禁忌1| 何时了却这牵挂原唱| 今日航班一览表| 梦断楼兰电影| 好心人| 王瑞儿视频| 管路通| 湖南金鹰卡通节目表| 妖精的尾巴第三季| 一级片黄色录像免费看| 张志文| 我的仨妈俩爸演员表| 动漫秀场| 蚂蚁搬豆简谱| 电影院电影| 宙斯的12个儿子都是谁| 美少女战士变身| 爱之梦钢琴谱| 恋爱三万英尺| 鼻子旁边长痘是什么原因造成的| 迷夜电影| 陈若仪个人简历资料| 天降奇缘 电视剧| 李妍杜| 抗日电影完整版| 欧美成熟| 花非花电视剧演员表| 鹌鹑图片|