极客时间-linux性能优化 33 关于 Linux 网络你必须知道这些(上)

我的本职工作就是网络流量分析领域,所以网络这块的课程我很感兴趣

极客时间-linux性能优化 33 关于 Linux 网络你必须知道这些(上)_第1张图片

物理链路上不能传输任意大小的数据包。网络接口配置的最大传输单元MTU,就是规定了最大的IP包大小。网络数据包超过MTU的大小,就会在网络层分片,以保证分片有的IP包不大于MTU。

 

当一个网络帧到达网卡后,网卡会通过DMA将网络数据包放到环形收包队列中,然后通过硬中断,告诉中断处理程序已经收到网络包

 

接着网卡中断处理程序会为网络帧分配skb_buff结构,并将其拷贝到skb_buff缓冲区中,然后再通过软中断,通知内核收到了新的网络帧。

 

内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧。

 

网络层取出IP头后,判断网络包下一步的走向,当网络层确认数据包是发给本机的,就会取出上层协议的类型(比如TCP或UDP),去掉IP头,交给传输层处理。

 

传输层取出TCP头或UDP头后,根据<源IP,源端口,目的IP,目的端口>四元组作为标识,找到对应的socket,并将数据拷贝到socket的接收缓冲区中

 

最后,应用程序就可以使用socket来读取新接收到的数据了。

你可能感兴趣的:(性能优化-专栏,linux网络数据包收包流程)