国产毛多水多高潮高清,久热这里只有精品视频6,国内精品久久久久久久久电影网,国产男同志CHINA69,精品999日本久久久影院,人人妻人人澡人人爽人人精品,亚洲中文无码永久免

25张图,一万字,拆解Linux网络包发送过程(超级详细~)-新2体育

25张图,一万字,拆解Linux网络包发送过程(超级详细~)

2026-01-18 17:33:41投稿人:尊龍現(xiàn)金AG旗艦廳(揚(yáng)州)有限公司圍觀37463 評(píng)論

25張圖,一萬(wàn)字,拆解Linux網(wǎng)絡(luò)包發(fā)送過(guò)程(超級(jí)詳細(xì)~)

半年前我以源碼的方式描述了網(wǎng)絡(luò)包的接收過(guò)程。之后不斷有粉絲提醒我還沒(méi)聊發(fā)送過(guò)程呢 。好 ,安排!

在開(kāi)始今天的文章之前,我先來(lái)請(qǐng)大家思考幾個(gè)小問(wèn)題 。

  • 問(wèn)1 :我們?cè)诓榭磧?nèi)核發(fā)送數(shù)據(jù)消耗的 CPU 時(shí),是應(yīng)該看 sy 還是 si  ?
  • 問(wèn)2:為什么你服務(wù)器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多?
  • 問(wèn)3 :發(fā)送網(wǎng)絡(luò)數(shù)據(jù)的時(shí)候都涉及到哪些內(nèi)存拷貝操作?

這些問(wèn)題雖然在線(xiàn)上經(jīng)??吹?,但我們似乎很少去深究 。如果真的能透徹地把這些問(wèn)題理解到位 ,我們對(duì)性能的掌控能力將會(huì)變得更強(qiáng)。

帶著這三個(gè)問(wèn)題 ,我們開(kāi)始今天對(duì) Linux 內(nèi)核網(wǎng)絡(luò)發(fā)送過(guò)程的深度剖析 。還是按照我們之前的傳統(tǒng) ,先從一段簡(jiǎn)單的代碼作為切入。如下代碼是一個(gè)典型服務(wù)器程序的典型的縮微代碼 :

int main(){  fd = socket(AF_INET, SOCK_STREAM, 0); bind(fd, ...); listen(fd, ...); cfd = accept(fd, ...); // 接收用戶(hù)請(qǐng)求 read(cfd, ...); // 用戶(hù)請(qǐng)求處理 dosometing();  // 給用戶(hù)返回結(jié)果 send(cfd, buf, sizeof(buf), 0);}

今天我們來(lái)討論上述代碼中