在发送一个数据包的过程中,winsock的具体作用是什么
winsock只是用来向下层转发数据的一个接口,其他的它什么也不做,对吗?
Tcp或Udp头是在winsock层加入的,还是在下一层,比如TDI,或都NDIS加入的?
Tcp的各种机制比如超时重发,滑支窗口是在winsock层实现的,还是在驱动层实现的
甚至是在spi层实现的,具体是怎么样的,有人知道吗?
请大家多多发言
winsock只是用来向下层转发数据的一个接口,其他的它什么也不做,对吗?
Tcp或Udp头是在winsock层加入的,还是在下一层,比如TDI,或都NDIS加入的?
Tcp的各种机制比如超时重发,滑支窗口是在winsock层实现的,还是在驱动层实现的
甚至是在spi层实现的,具体是怎么样的,有人知道吗?
请大家多多发言
这种说法???
Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 BerkeleySocket功能调用的集合,以及为Windows所作的重要扩充。
是的Tcp或Udp头是在winsock层加入的,还是在下一层,比如TDI,或都NDIS加入的?
在TDI的TCPIP设备驱动程序实现Tcp的各种机制比如超时重发,滑支窗口是在winsock层实现的,还是在驱动层实现的甚至是在spi层实现的,具体是怎么样的,有人知道吗?
TDI(驱动层)实现Winsock层,只是一个抽象的接口层,真正设计“包解析”“包操作”“IO方法”“协议栈”等等等等,都是由驱动层完成,而且各个网络协议的协议栈,本来就是在驱动层实现的。详细的,看DDK资料。
我只是借助分层的思想来说明一下
想说明不同的层次之间实现的功能是不能的,体现出一种分层结构
不同的层次实现的功能是不一样的
如果需要做点什么的话(比如,把数据加密),就需要自己在Winsock和TDI层进行处理了。Winsock用SPI,TDI就要写“过滤器型(Filter)驱动程序”。TCP协议栈的实现确实是在TDI层,当TCP包到达WINSOCK层时,系统的确是什么都没有做。所以,我一直就认为WINSOCK只是抽象的接口。它只是封装,并暴露简单而且方便使用的接口,使普通的网络开发人员能更好地使用各种网络协议,而不必涉及底层驱动和网络协议栈。当然,也不能绝对地是“WINSOCK什么都没有做”,一些不是最核心的东西,它还是牵涉了的。但就“网络数据”这块来说,它确实什么都没有做。唯一就是:TCP包在到达WINSOCK层时,TCP头在TDI层被“剥”掉了,只把一块“赤裸裸”的数据交给WINSOCK(即WIN32应用程序层)。
的一个功能,但是winsock也可以直接构造IP数据包的,这又是怎么回事了
往楼上的高人能解答一下
谢谢
总结:把数据分发给哪一个进程,还是在TDI(协议层)完成的
但是winsock也可以直接构造IP数据包的,这又是怎么回事了“直接构造IP数据包”,就是使用“原始(Raw-socket)套接字”。不错,这个东西看来像是Winsock的(因为它能够在Winsock里使用),但是实际上,它的实现,却是依靠调用内核态的函数(TDI)来实现的,只不过有时侯给人的感觉是“可以在Winsock下使用”。这也就是说,只要你功力足够,你完全可以不使用WINSOCK来发送-接受网络数据(若有兴趣,可参看DDK的帮助文档)。目前,一些很牛的木马就是这样来饶过Winsock层的防火墙的。总结:还是那个意思,Winsock并没有实现“任何TCP协议栈来实现的东西”,它不会越俎代庖的。:)