Hi~朋友,关注置顶防止错过消息
摘要
网络模型
网络模型按照标准有几类划分?
OSI模型的划分层次?
为什么出现了TCP/IP模型?
OSI模型过于复杂,只是概念理论上的分层,没有具体的实现方案。
TCP/IP模型的分层?
OSI模型和TCP/IP模型的层次对应关系如下图:
网络协议栈
网络通信的主机间必须要遵从一定的网络协议。我们的网络包每经过一层,都会被当前层进行一定的包装,当到达目的主机时,也会进行拆包装操作。
每一层给数据包做了哪些包装?
物理链路中的最大传输大小是?
在以太网中规定,最大传输单元(MTU)是1500字节,即网络层IP包的最大值。当IP数据包超过MTU时,就需要在网络层对其进行分片传输。
Linux中网络协议栈大体组成
网络包接收
主机中网络包的门神是?
网卡,专门负责接收和发送网络包,网卡接收到一个网络包以后,会通过DMA技术,将网络包放入到Ring Buffer(环形缓冲区)。
操作系统是如何判断一个网络包到达?
NAPI机制是什么?
混合中断和轮询的方式来接收网络包,核心就是首先采用中断唤醒数据接收的服务程序,然后通过poll方法来轮询数据。
网络包到达时,网卡发起硬件中断,执行网卡驱动程序中的中断处理函数,中断处理函数完成以后需要暂时屏蔽中断,然后通过唤醒软中断来轮询处理数据,直到没有新数据时才恢复中断,这样一次中断可以处理若干个网络包。
软中断如何处理网络包?
网络包的发送
发送流程和接收流程相反。
网络层在给数据包增加IP头时,会通过查询路由表确认下一跳的IP,并按照MTU进行分片。
分片后的网络包,在到达网络接口层后,会通过ARP协议获取下一跳的MAC地址,然后增加帧头帧尾,放到发包队列中。
一切准备好以后,会触发软中断告诉网卡驱动程序需要发送网络包,驱动程序通过DMA从发包队列中读取网络包,将其放到网卡的队列中,随后网卡将网络包发出去。