因?yàn)橐獙?duì)百萬(wàn)、千萬(wàn)、甚至是過(guò)億的用戶提供各種網(wǎng)絡(luò)服務(wù),所以在一線互聯(lián)網(wǎng)企業(yè)里面試和晉升后端開(kāi)發(fā)同學(xué)的其中一個(gè)重點(diǎn)要求就是要能支撐高并發(fā),要理解性能開(kāi)銷(xiāo),會(huì)進(jìn)行性能優(yōu)化。而很多時(shí)候,如果你對(duì)Linux底層的理解不深的話,遇到很多線上性能瓶頸你會(huì)覺(jué)得狗拿刺猬,無(wú)從下手。
我們今天用圖解的方式,來(lái)深度理解一下在Linux下網(wǎng)絡(luò)包的接收過(guò)程。還是按照慣例來(lái)借用一段最簡(jiǎn)單的代碼開(kāi)始思考。為了簡(jiǎn)單起見(jiàn),我們用udp來(lái)舉例,如下:
int main(){ int serverSocketFd = socket(AF_INET, SOCK_DGRAM, 0); bind(serverSocketFd, 。。.); char buff[BUFFSIZE]; int readCount = recvfrom(serverSocketFd, buff, BUFFSIZE, 0, 。。.); buff[readCount] = ‘