1: 网卡自动完成MAC地址匹配(硬实现),非混杂模式下,若MAC匹配,则发生中断。
1.1: 可以控制硬件变成混杂模式。使每个包都发生中断。 (包进入网卡缓存也是硬实现)。 硬件的行为是可控的。
1.2: 网卡驱动向CPU注册了中断。
1.3: 抓包程序需要向网卡驱动注册,有发送到或接受的包就发一份给packet filter.其缓存下来.
1.4: 网卡驱动将会检查包头,主动将包传递给协议handler. 协议应该是线程。 猜测: 线程,进程的对外接口(windows中是句柄,handle)都在PCB(程序控制块)中登记了。 其他人有事,只要到PCB查询办事接口就行。
1.5:pcap_t * pcap_open_live(const char * device, int snaplen, int promisc, int to_ms, char * errbuf). 返回网络接口,实质是返回了packet filter的句柄,获取数据包需要使用这个句柄(类似政府地址),去查询有没有数据包获得。所以这里应该是创建了一个线程。 (猜测)
2. 几种不同实体间的通信方式:
2.1: 自己有事找政府,那么主动去政府办公厅(PCB)找对应的办事处(接口-句柄)。(有类似TCP和UDP两种方式)
2.2: 政府有你的事时,(事件发生)
2.2.1: 你提前向政府打招呼(注册), 有事就叫你干嘛(注册一个函数,系统直接跳转过来)。
2.2.2: 我主动天天到政府办公厅查询下有没有我的事。
3.程序总是躺在内存里,躺在寄存器里。
4. 进程间不能直接通信,需用软中断,即向政府开放办事处注册(SWI,进入内核空间),政府主动来帮你办事(和另外一个进程通信).