接收过程:
从网络上到来的数据,通过网卡接收,此时网卡会向系统发出中断,告诉系统处理。系统得知数据到来时,在中断处理中把数据从网卡的缓存中读到内存中交由链路层处理,链路层把数据放到自己的backlog对列中,然后把bh_base中的network flag置位,就是利用bottom half机制。
当进程调度器(process schduler)看到network flag被置位时,它会运行相应的例程,例程会把packet从backlog对列中弹出,与相应的协议(通常是ip协议)来进行匹配,然后把packet传递给相应协议的接受函数进行处理。ip层对packet进行错误检测,然后进行路由,packet或者进入outgoing queue(转发)或者交由传输层进行处理(发往本机)。传输层会进行错误检测,查找与端口相关联的socket,然后把packet放到相应的socket的接收对列中。
一旦packet进入到socket的对列中,socket会唤醒拥有此socket的进程。此进程也许会从read系统调用中返回,把数据从对列中拷贝到自己的buffer中。
从网络上到来的数据,通过网卡接收,此时网卡会向系统发出中断,告诉系统处理。系统得知数据到来时,在中断处理中把数据从网卡的缓存中读到内存中交由链路层处理,链路层把数据放到自己的backlog对列中,然后把bh_base中的network flag置位,就是利用bottom half机制。
当进程调度器(process schduler)看到network flag被置位时,它会运行相应的例程,例程会把packet从backlog对列中弹出,与相应的协议(通常是ip协议)来进行匹配,然后把packet传递给相应协议的接受函数进行处理。ip层对packet进行错误检测,然后进行路由,packet或者进入outgoing queue(转发)或者交由传输层进行处理(发往本机)。传输层会进行错误检测,查找与端口相关联的socket,然后把packet放到相应的socket的接收对列中。
一旦packet进入到socket的对列中,socket会唤醒拥有此socket的进程。此进程也许会从read系统调用中返回,把数据从对列中拷贝到自己的buffer中。