100分,关于winsock的几个基本问题,每题20分

zhangyanli 2008-01-02 06:35:12
高手帮我回答几个问题:
1.重叠I/O模型中的重叠是什么意思,指的是什么重叠?
2.完成端口重的完成什么意思,完成是怎么回事?
3.“投递”一个接收,发送操作,“投递”怎么讲,谁投递,投递给谁?
4.套接字缓冲区,和应用程序缓冲区有什么区别?
5.当接收和发送时,数据按照一个什么样的路径传递,麻烦详细解释一下?

100分
...全文
330 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodmrning 2008-01-09
  • 打赏
  • 举报
回复
帮顶
zhangyanli 2008-01-09
  • 打赏
  • 举报
回复
继续讨论
美丽海洋 2008-01-08
  • 打赏
  • 举报
回复
我觉得好多地方和串口通讯差不多,我建议大家讨论可以和串口通讯对比来说明一下!
美丽海洋 2008-01-08
  • 打赏
  • 举报
回复
通过大家的回答:

1.重叠I/O模型中的重叠是什么意思,指的是什么重叠?
重叠:第一个I/O还没有完成,就重复请求多个I/O,windows内部有线程池,一个I/o请求达到时先看看有没有空闲线程,有就用,没有就阻塞。一个i/o完成后,线程并不释放,而是装载一个阻塞的新i/o,以达到并行处理的效果。

重叠就是前面一个读写还没有完成的时候,就进行下一个读写操作,两个读写操作的重叠。在读写操作完成的时候,它会通过事件通知你。
这两个答案基本一致!
linlan999 2008-01-08
  • 打赏
  • 举报
回复
5.当接收和发送时,数据按照一个什么样的路径传递,麻烦详细解释一下?
如果你指的是数据包在网络上的路由的话,可以搜“路由算法”。它是由路由器执行的算法(程序),有好多种。
它决定将路由器收到的各个数据包应往那个“网络”(路由器的端口)上投!
zhangyanli 2008-01-07
  • 打赏
  • 举报
回复
to formular1:
4.我觉得是有区别的。
5.就是接收到数据后在本地怎么传递。
zhangyanli 2008-01-07
  • 打赏
  • 举报
回复
to wufeng1985:
不过是从不同的角度去化这个层次图,我的那个图是从函数调用的角度画的,你是按网络的分层体系结构画的。
Formular1 2008-01-07
  • 打赏
  • 举报
回复
说一下个人的理解:

高手帮我回答几个问题:
1.重叠I/O模型中的重叠是什么意思,指的是什么重叠?
重叠:第一个I/O还没有完成,就重复请求多个I/O,windows内部有线程池,一个I/o请求达到时先看看有没有空闲线程,有就用,没有就阻塞。一个i/o完成后,线程并不释放,而是装载一个阻塞的新i/o,以达到并行处理的效果。

2.完成端口重的完成什么意思,完成是怎么回事?
一个接口,是重叠i/o的使用方法。完成端口是i/o服务的使用者和服务提供者之间的接口或界面。

3.“投递”一个接收,发送操作,“投递”怎么讲,谁投递,投递给谁?
投递:指一个i/o操作的发起指定,投递后就开始检查是否有空闲线程。。。i/o请求方就投递者,服务提供者就是被投递者。

4.套接字缓冲区,和应用程序缓冲区有什么区别?
没有区别吧??

5.当接收和发送时,数据按照一个什么样的路径传递,麻烦详细解释一下?
不明白题目什么意思?

100分
美丽海洋 2008-01-07
  • 打赏
  • 举报
回复
在这里大开眼界,能不能有人给说一下整个过程,说一些注意的地方,如异步,叠加等这些东西的意思?
wufeng1985 2008-01-07
  • 打赏
  • 举报
回复
我不知道楼主想知道什么,但针对上面那个图,我觉得我这个更为正规。

|-------------------|---------------------------------|
| | Winsock API | 平时我们用的socket一般是来自Winsock API,但其实他只能控制应用层,不能截获
| 应用层 |---------------------------------| 下层的包,使用raw socket可以发送和拷贝下层数据包,但也是利用下层接口实现。
| | Winsock SPI | 以DLL形式存在,为Winsock API提供接口。
|-------------------|---------------------------------|
| 传输层 | Transport Data Interface (TDI)| \
|-------------------|---------------------------------| \
| | | \ Windows XP 中以TCPIP.sys 存在,可以视为网络层协议驱动,将数据流中的IP包
| 网络层 | Network Driver Interface | / 提出,并自动完成TCP/IP协议中的一系列工作。
| | Specification (NDIS) | /
|-------------------| | /
| | |
| 链路层 |---------------------------------|
| | Adapter Driver | 网卡驱动。
|-------------------|---------------------------------|
| 物理层 | Adapter | 网卡。
|-----------------------------------------------------|
zhangyanli 2008-01-06
  • 打赏
  • 举报
回复
UP
zhangyanli 2008-01-06
  • 打赏
  • 举报
回复
没人来 啊
zhangyanli 2008-01-06
  • 打赏
  • 举报
回复
up
zhangyanli 2008-01-05
  • 打赏
  • 举报
回复
up
zhangyanli 2008-01-04
  • 打赏
  • 举报
回复
1.你说在在transport API,和winsock API之间就是指的winsock dll了。
这是在别的资料上找到的:
+-------------++-------------+
| Winsock 2 || Winsock 2 |
| Application || Application |
+-------------++-------------+
| Winsock 2 API |
+----------------------------+
| Winsock 2 DLL |
| Transport Namespace |
| Function Function |
+----------------------------+
| Transport Namespace |
| API API |
+----------------------------+
| Transport Namespace |
| Service Service |
| Provider Provider |
+----------------------------+

“这只是用户或者系统为传输时方便应用而进行的资源分配(可以是暂时冗余的),它不属于任何一层,”
==================================
套接字缓冲区可以有用户分配?对于你的话我这样理解对吗?首先套接字并不存在,仅仅是上层向下层提供创建命令(包括创建参数),然后在最下层创建一个“传输通路”,而下层在返回一个对他的描述,而所谓的套接字缓冲区不过是根据临时需要分配一块内存用来暂存传输的数据,而他最终来自或发往“应用程序的缓冲区(供我们用)”。这样理解对吗?

2.如果是上面那样的话,第二个就好理解了。

3.我是想知道驱动程序他在下层是操纵硬件,或与他的内嵌软件交流,但是它上面呢,是不是应该是winsock API或者其实现(winsock dll),还是在往下的provider,不过好像winsock dll里面也有许多操作是直接向下调用的。驱动被所有这些层调用吗?

4.因为我还是个学生,所以我觉得暂时把许多问题弄明白还是很有必要的。其实我知道在上班时主要是解决问题。我在群里问问题时已经深切体会了,如果是学生,他们大多会帮你讲解原理,而上班的朋友们呢,大多是提供解决方案,或替代解决方案,我说的没错吧,:-)

tcxjia 2008-01-04
  • 打赏
  • 举报
回复
有些东西不需要深入,没必要深入,也没时间深入.做软件开发的,效率很重要.
僵哥 2008-01-04
  • 打赏
  • 举报
回复
做应用的,不需要钻研得太过深入。只要从逻辑上,理论上可以达到你当前所需要的目的就行了。否则,你越钻越迷惑,到头来不仅仅没有达到你的初衷,反倒浪费了大把时间在无谓的问题当中。
僵哥 2008-01-04
  • 打赏
  • 举报
回复
1.Winsock API与Transport API中间的都把它算是Provider,把Transport API及以下层称之为驱动层(因为这些都是应用无法触及的,并且也是可以有诸多变动的)。套接字缓驱动,主要是用于传输前后的数据缓冲,这只是用户或者系统为传输时方便应用而进行的资源分配(可以是暂时冗余的),它不属于任何一层,只是给相关的系统或设备进行使用。

2.核心内存,在Win平台下也称之为未分页内存,这个我在前面的回答当中已经有提及。更多的建议参考Windows操作系统相关资料。套接字缓冲区仅仅只是一个传输前后的数据缓存,你禁止的只是它自己去进行再次分配,以及数据复制。就好比它是一个浇灌者,正常情况下,它有自己的一个浇灌桶进行暂时的储水,所以每次你让它浇水的时候,会先把你交给它的水,先转移到它自己的浇灌桶当中再去灌溉,而现在你不让它用它自己的浇灌桶,而是直接使用你交水给它时所使用的器皿,这个明显省去了,一个转移水资源的过程。而这里所说的投递,就是你交水给它(交水给它,就相当于同时下达了浇灌指令,这是它的职责,并且是单一的职责)。发送比拟成浇灌,同理,接收就好比取水。

3.驱动层,除了真正的与硬件相交互的电平信号管理,同时还有更多复杂的传输及逻辑信号处理。驱动代表的是统一协调工作的一组直接或间接与硬件交互的可执行代码。具体它是跟硬件ROM当中的软件交互,还是直接控制电平信号,这个我们无须理会,否则你就应该去学硬件,而不是做应用软件。

4.书,本来就是越看越不理解,这个很正常,需要通过思考,实践,再思考,再解惑,再实践,等一系列过程才能够掌握,并且就算掌握了,那也仅仅只是“冰山一角”。
zhangyanli 2008-01-04
  • 打赏
  • 举报
回复
首先声明,我已加分,:-)

1.僵哥,我看别的资料上说,winsock分这几层,winsock application,winsock API,winsock DLL,transport API
还有就是提供程序层(provider层),你说的驱动层应该具体指哪层或哪层以下呢,我觉得应该是provider以下 吧。那套接字缓冲区应该是属于驱动层吧。

2.核心内存?具体指哪部分?“当用户将发送和接收缓冲区设置为0的时候,驱动层当中采用了更加良好的内存管理,而并不是所预想的真正不使用核心内存,因为驱动是无法直接操作用户内存的。否则的话,会报出内存不足的错误。”这句话也不是很明白的?在这种情况下可以直接投递到用户缓冲区,是谁投递的呢,既然套接字的缓冲区已经被禁用了?总觉得跟你说的联系不上,所以理解困难?

3.驱动是真正的“通讯员”,那么他联系谁跟谁呢?至于后面所说的优化,我觉得可能不太重要了,他只不过是os的一种机制,对吗,没必要细究。

4.最后一点也是最关键的:我现在在看《windows网络编程第二版》,这本书不错,可是现在这部分看的差不多快完了,可是就是不怎么理解,我现在应该补充一下哪方面的东西呢,才能把这本书理解到位呢?TCP/IP协议?,总之很迷茫。我觉得我的概念理解很不到位,所以整体知识结构很模糊,或者说根本没有建立起来,望指点,谢谢你了!
zhangyanli 2008-01-04
  • 打赏
  • 举报
回复
up
加载更多回复(17)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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