比较难的有关问题,网卡负责哪一层数据接收

比较难的问题,网卡负责哪一层数据接收?
TCP/IP网络传输分为:链路层、网络层、传输层和应用层。网卡负责到哪一层?
链路上数据的传输,握手,完整性验证等这些任务是不是网卡负责,即cpu不参与(不消耗cpu指令)。
    我用完成端口编写了一个服务程序,只负责接收数据,很少处理。如果数据接收和发送主要由网卡负责,那么数据收发的瓶颈主要在网卡而不是cpu。这样理解对吗?
    请指点!谢谢!

------解决方案--------------------
大哥,那当然了,在中断处理情况下DMA传送,cpu就像个门卫似的,过问一下就干别的事去了,但是如果网卡不是DMA方式的传送的(一般好像只有硬盘时DMA方式的,只有那种pci-e的网卡是的吧,得查查技术资料,忘了,发展太快),cpu就要负责搬数据了,这个就比较占周期了,还是网卡的是啊……还有问题,网卡只负责上MAC与LLC帧头,他是不上高层帧头的,不想路由器,这个问题还是看看资料比较仔细,我也忘的差不多了,完全讲明白是不太可能的,总之只接收数据的话,和处理数据是分开的,就算是最慢的现代cpu都比网卡的处理速度快(加帧头,脱帧头,分析)上很多倍,当然不是8086了,cpu会一直处于等待状态。
------解决方案--------------------
TCP/IP网络传输分为:链路层、网络层、传输层和应用层
-------------------------
虽然网络这么分,但是到了我们实际开发,又压根不是这样分的,一般由下到上:
物理层:处理电气特性,接受RJ45来的电信号,转换数字信号,应该由它自己的单片机控制
|
miniport微端口层:NDIS体系的最下层,一般的网卡驱动属于这层
|
中间层:NDIS体系的中间层,一般的软件防火墙关于规则的调用(比如禁止IGMP,ICMP),都是在这层通过中间层驱动实现
|
协议层:NDIS体系的最上层,主要由什么处理忘记了,反正是很少用
|
应用层:当然按照等级高低分为(SPI,RawSocket,WinSocket)


大致层次应该是这样,不对的请纠正 :)
------解决方案--------------------
网卡硬件本身属于物理层。而驱动程序属于数据链路层。 网卡工作时候,究竟是否需要cpu大规模参与,这要取决于不同的网络控制芯片的工作原理。有些稍微好点的芯片,支持收发数据包的“零拷贝”机制。 即在从协议层传数据包给驱动时候,和从驱动传数据包给协议层时候,不需要进行拷贝。她们共同使用一个缓冲池。对于网卡数据收发来说,耗时的是内存中数据的拷贝。---注意,是协议层和驱动之间的拷贝。dma是驱动层面的。不一样。
------解决方案--------------------
眼睛可以看到的和电流传送的部分都由物理层协议定义,比如定义芯片针脚,网线线序,板卡尺寸以及AC/DC,收发BIT标志等。
但是它同时参于了以太网协议(第二层:链路层)的工作,以太网协议包括了48位的源MAC地址和48位的目的MAC地址,所以它的MAC地址部分属于链路层。
一般在第二层以及之上的所有层,都需要CPU帮助运算,应用层完全只由CPU管。
这些是一般的网卡,特殊网卡有更复杂的功能:
TCP减负引擎(TCP Offload Engine :TOE)的技术:
http://www.it918.com/htm/jc/jcclbd/iptx/20040406C085439.shtml

现在使用一块好的网卡可以大大提高服务器的性能,前提是整体的性能平衡做好。