QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 629|回复: 5

关于网络编程的问题

[复制链接]
发表于 2004-5-9 21:39:22 | 显示全部楼层 |阅读模式
1.能否在读取socket时知道数据到达的时间?比如我用select()得到一个可读描述符集后,怎样知道这些网络数据到达的时间先后?
2.网络上数据的传输据说是会分成很多较小的包的,那么当我读取一个socket时,怎样才能保证每次都能读取到一个完整的数据包?
发表于 2004-5-9 22:00:12 | 显示全部楼层
数据包重组是IP负责的
回复

使用道具 举报

 楼主| 发表于 2004-5-9 22:26:06 | 显示全部楼层
[quote:314562dbd7="_z_"]数据包重组是IP负责的[/quote]

在客户端对socket的写操作,是不是一次写入的数据就会被当作一个数据包?然后当这个数据包的所有部分都到达了服务器端后服务器端的对应socket才会变成可读?
回复

使用道具 举报

发表于 2004-5-9 22:43:48 | 显示全部楼层
不一定

根据你实际写的数据量有关,例如:
用户层写的数据保存在缓冲区,应该是那个sk_buff吧
TCP根据MSS将数据处理成TCP段,若数据大于一个MSS,就会处理为多个段
IP将TCP传递过来的段处理成IP报文,若报文长度超过接口MTU,就会被分片。
接收端IP将分片重新组装成IP报文,再传递给TCP处理。

大概是这样的
回复

使用道具 举报

 楼主| 发表于 2004-5-10 00:03:24 | 显示全部楼层
汗……看不懂……………………

不过我终于还是看懂了一句话:
不一定


回复

使用道具 举报

发表于 2004-5-12 19:16:37 | 显示全部楼层
发送的时候,每个包都有编号的,到达的顺序不一定,看网络的情况,
超时的包,将重新传!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 09:16 , Processed in 0.037303 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表