25张图,一万字,拆解Linux网络包发送过程(超级详细~)
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)題雖然在線上經(jīng)常看到 ,但我們似乎很少去深究