TCP/IP协议栈是谁维护的?操作系统?物理网卡?还是上层应用开发者?

Shiftyman 2014-04-23 10:07:08
1、对于计算机网络协议,我们学习了很多协议的原理,各种机制,比如TCP的确认和重传机制,滑动窗口机制等等,我想问的是,这些确认机制,滑动窗口这些是谁实现的呢?操作系统实现的?还是网络适配器?还是开发者在开发程序的时候按照TCP协议的标准实现的??抑或是,开发语言本身的API实现了,开发者只需要调用相关的接口?
简单地说,就是所谓的网络协议,是不是只是一个标准,规定好一些报文首部格式,然后开发者在开发程序的时候自己去根据标准的规定实现逻辑?还是说,操作系统本身已经维护好一个协议栈,已经实现好传输层及以下的各层处理逻辑,程序员无需关心?

我的理解是:操作系统维护了TCP/ip协议栈,屏蔽了从链路层到传输层的实现细节,对上层应用提供socket,开发应用的人员只要调用socket即可,无需关心TCP等实现细节。不知道对不对呢?

2、不知道有没有朋友用过WinPcap来抓包?我想请问一下,WinPcap绕过了协议栈而对数据包进行捕获,那么它有实现对IP分片的重组吗?还是直接地捕获原生的链路层数据包(即IP分片后的包)?我做了下实现,在局域网链路的MTU为1500的情况下,传输一个3000字节的数据包,捕获的时候竟然是一个完整的数据包。实现的环境是,两台机器连接同一个家庭路由器,然后发送数据。当ping的时候,发现超过1472是提示要分片的,即MTU为1500。但是我们抓包明明是抓取的链路层的包,怎么抓到的不是几个分片后的包呢??难道WinPcap已经实现了IP分片重组?

请朋友们解答和讨论一下!谢谢!
...全文
1497 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 3
是这样的OSI只是一个网络通讯的参考模型.现在TCP/IP协议簇已经成为业界的协议标准了.具体就TCP/IP协议簇而言,现在是如此实现的. 物理层和数据链路层的一些协议(比较底层的协议,如介质访问控制的相关协议)由网卡NIC通过硬件实现.数据链路层的其他协议,网络层的全部协议,传输层的全部协议是由操作系统负责实现的.操作系统通过socket向应用层提供接口,应用层程序仅需使用传输层借口即可完成网络通讯. 至于楼主的第二个问题,IP数据包的分片重组问题.我没有十分准确的把握,这方面的知识还是欠缺.但是我可以提出我的猜想.既然数据链路层的一些底层协议是由网卡实现的,应该网卡(硬件)就会将IP分片重组,进而上交给操作系统.WinPcap抓取的数据帧是从网卡向操作系统提交的缓冲区内复制而来的.既然是网卡向操作系统上交的数据,应该已经经过了一些底层的数据链路层的协议的处理的.(比如像楼主所说的IP分片的重组)这样,用WINPCAP所得到就是3000而不是1500的数据帧. 鉴于楼主的实验网络环境是以太网,楼主可以查阅一下CSMA的具体功能.看看它是否在帧的层面上完成了帧重组.
小狼- 2014-09-09
  • 打赏
  • 举报
回复
1楼2楼没懂楼主的意思。 楼主的意思是协议栈是怎么(由谁?网卡或操作系统)实现的。比如说楼主的例子,TCP的滑动窗口、确认重传。 同问这个问题, 不过我分析应该不是操作系统(仅针对windows系列),因为我查看了一下那些socket函数导出的文件,在mswsock.dll、winsockhc.dll、wsock32.dll里面,虽说这些也是操作系统提供的dll,但是从一个什么模型(忘记了,应该是操作系系统或计算机原理的什么模型,非osi模型)上来看,这些文件也只算是应用层的东西,非操作系统、非内核的部分。 所以我认为,楼主的疑问,TCP/IP协议栈的实现应该是应用程序实现的,只不过是被封装成了一各个dll文件,有应用程序调用。 如果错误,请见谅。
静c心 2014-05-09
  • 打赏
  • 举报
回复
估计是一个国际组织把
__cc__ 2014-04-25
  • 打赏
  • 举报
回复
一句话,协议是规则,由物理设备(制造商),操作系统,应用程序(软件开发者)共同遵守和维护。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧