请教关于TCP/IP协议栈实现问题??(有点难度!)

hjdaifool 2005-09-13 10:48:01
我最近在作IP QOS方面的工作,有几个问题请教:
1,我们使用Socket在Server和client(或是嵌入式系统)来实现TCP(UDP)/IP的封装,在一个host(或是嵌入式系统)中,如果有多个socket,那么在TCP/IP协议栈(不是应用层)实现中,是否由两个线程(发送和接收)处理所有的socket,实现TCP(UDP)/IP的封装处理和解封装(就是说,来自多个socket buffer的应用层的数据都是由一个协议栈线程进行封装和调用硬件驱动发送和接收数据)? 还是每个socket都对应两个线程(发送和接收)?
2, 对于发送数据,如果应用程序发送的数据速率大于协议栈的处理能力(或者硬件接口的发送数据速率),那么这些发送数据的应用程序是否会被阻塞?
3,对于接收数据端,如果应用层处理接受的数据速率很慢,socket从协议栈接收的速率很快,socket的buffer满了,那么这时候从硬件接口收到的数据是否会被丢掉? 就是在TCP的带有sliding window size的acknowledge报文到达接收端.

谢谢!
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwj_dxy 2005-09-19
  • 打赏
  • 举报
回复
up
daemeon 2005-09-14
  • 打赏
  • 举报
回复
linux的网络栈不是以内核线程的形式实现的。

1. 接收数据分为两部分, Interrupt和SoftIRQ完成网络栈对数据的大部分处理,然后处于休眠状态的进程, 进程通过recv系统调用将数据从内核空间拷贝到用户空间。
发送数据的几乎所有处理都是在系统调用中完成的(知道把数据加入设备的队列中)

2. 可能阻塞也可能不阻塞, 具体要看使用的协议(tcp/udp)和send的flags参数.


3. 会丢掉(不过tcp的sliding window机制就是防止这种情况发生的,发生的机会似乎很小)
yyy790601 2005-09-14
  • 打赏
  • 举报
回复
不懂。
关注并帮顶。

4,438

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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