TCP/IP协议栈是谁维护的?操作系统?物理网卡?还是上层应用开发者?
1、对于计算机网络协议,我们学习了很多协议的原理,各种机制,比如TCP的确认和重传机制,滑动窗口机制等等,我想问的是,这些确认机制,滑动窗口这些是谁实现的呢?操作系统实现的?还是网络适配器?还是开发者在开发程序的时候按照TCP协议的标准实现的??抑或是,开发语言本身的API实现了,开发者只需要调用相关的接口?
简单地说,就是所谓的网络协议,是不是只是一个标准,规定好一些报文首部格式,然后开发者在开发程序的时候自己去根据标准的规定实现逻辑?还是说,操作系统本身已经维护好一个协议栈,已经实现好传输层及以下的各层处理逻辑,程序员无需关心?
我的理解是:操作系统维护了TCP/ip协议栈,屏蔽了从链路层到传输层的实现细节,对上层应用提供socket,开发应用的人员只要调用socket即可,无需关心TCP等实现细节。不知道对不对呢?
2、不知道有没有朋友用过WinPcap来抓包?我想请问一下,WinPcap绕过了协议栈而对数据包进行捕获,那么它有实现对IP分片的重组吗?还是直接地捕获原生的链路层数据包(即IP分片后的包)?我做了下实现,在局域网链路的MTU为1500的情况下,传输一个3000字节的数据包,捕获的时候竟然是一个完整的数据包。实现的环境是,两台机器连接同一个家庭路由器,然后发送数据。当ping的时候,发现超过1472是提示要分片的,即MTU为1500。但是我们抓包明明是抓取的链路层的包,怎么抓到的不是几个分片后的包呢??难道WinPcap已经实现了IP分片重组?
请朋友们解答和讨论一下!谢谢!