OSI和TCP/IP
- 内核分配一个主内存地址段(DMA缓冲区),网卡设备可以在DMA读写数据。
- 当一个网络包到达网卡后,网卡通过DMA的方式,将网络包放到收包队列中;然后通过硬中断,通知中断处理程序已经收到网络包。
- 中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧。
- 内核协议栈从缓冲区取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧。
- 最后,应用程序就可以使用 Socket 接口,读取到新接收到的数据了。
网络性能指标
- 带宽:表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)
- 吞吐量:表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。
- 延时:表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时),或一个数据包往返所需的时间(比如 RTT)。
- PPS:是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即 PPS 可以达到或者接近理论最大值)。而基于 Linux 服务器的转发,则容易受网络包大小的影响。
- 可用性:网络是否能正常通信
- 并发连接数:TCP连接数量
- 丢包率:丢包百分比
-
TMP
物理链路中不能传输任意大小的数据包,网络接口配置的最大传输单元(MTU),就规定了单个IP数据包的大小,常用以太网中,MTU的默认值是1500,也是linux的默认值。一旦网络数据包大于1500,就会在网络层分片。