免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6007 | 回复: 21
打印 上一主题 下一主题

[网络子系统] 【请教】关于网络对大量小数据包的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-10 17:24 |只看该作者 |倒序浏览
最近面试遇到一个问题 "网络中如果对于大量的载荷非常小的数据包如何处理"

对于有看到过这个问题,应该为了减小网络负担,把这些发送向同一个目标的小数据组合成一个较大的数据包,然后在发送。

然后问题继续,如何在目的地址区分这些数据?

对于这个不是很明白,就说了一下我自己的观点,可能是在传输层进行的组装,即每个小数据包的传输层头部仍然保留,这样会导致根据传输层包头中的段口号可以判断出这些数据属于哪一个进程,但是按照我这么说  数据包的格式就成了  
                |--ethernet header--|--IP header--|--TCP header1--|TCP header2--|--UDP header1--|...

我不确定是否真的存在这样的数据包,电话面试之后,google,查到了关于  UDP 协议中cork部分的内容,其中通过函数  ip_append_data 进行处理,希望各位能帮忙解释,多谢。

论坛徽章:
0
2 [报告]
发表于 2014-04-10 17:29 |只看该作者
) 有些是大量 http头,呵呵
这个问题,我了解过相关东西
如果单机能做完成,单机dna
如果单机不能做,可以试试桥转发,做负载均衡,到其他机器上

论坛徽章:
0
3 [报告]
发表于 2014-04-10 22:24 |只看该作者
回复 2# kkddkkdd11

十分感谢回复,不过我不太明白您的意思,单机dna是值什么?
您提到的 桥转发 等内容可能属于 网络优化,我想请教的不是网络负载均衡部分的内容,是TCP/IP本身的机制。不知道您有没有研究过?
   

论坛徽章:
0
4 [报告]
发表于 2014-04-10 23:47 |只看该作者
本帖最后由 独孤九贱 于 2014-04-10 23:49 编辑

小包处理和tcp/ip本身好像关系不大。

同样100吨的货,10吨一次,只需要拉10次,1公斤一次,估计要累死司机,就是这个理了。

应该为了减小网络负担,把这些发送向同一个目标的小数据组合成一个较大的数据包,然后在发送。

——
这个思路类似于GRO/GSO……

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
5 [报告]
发表于 2014-04-11 08:58 |只看该作者
GSO和GRO,组包发送。对于小于mtu的包,tcp本身就会组包的。

论坛徽章:
0
6 [报告]
发表于 2014-04-11 11:26 |只看该作者
回复 4# 独孤九贱


    我查到TCP/IP 中的 TCP_CORK 选项,就是把小数据包组合成一个大的数据包。

    我想要请教的是,在接受端接受到这个大的数据包之后,怎么区分每个小的数据包?
    假设系统把不同 进程 对应的 小数据包组合成一个大的数据包发送(如果可以这么做的话),或者把同一个进程不同时刻需要发送的小数据组合成大数据包发送,那么接受方如何区分这些本来不相关的数据?

论坛徽章:
0
7 [报告]
发表于 2014-04-11 11:26 |只看该作者
回复 5# humjb_1983


     我查到TCP/IP 中的 TCP_CORK 选项,就是把小数据包组合成一个大的数据包。

    我想要请教的是,在接受端接受到这个大的数据包之后,怎么区分每个小的数据包?
    假设系统把不同 进程 对应的 小数据包组合成一个大的数据包发送(如果可以这么做的话),或者把同一个进程不同时刻需要发送的小数据组合成大数据包发送,那么接受方如何区分这些本来不相关的数据?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
8 [报告]
发表于 2014-04-11 12:36 |只看该作者
TCP是基于“流”的传输协议,不区分大包小包,只要保证数据流完整到达对端即可。

论坛徽章:
1
摩羯座
日期:2014-05-07 11:21:33
9 [报告]
发表于 2014-04-11 12:59 |只看该作者
tcp是基于流的,也就是说不同的流不会整合在一起,
  
    对于一条流,将小报文合成一个大报文发出去,对应用层数据进行合并,修改tcp头部再发出,MAC+ip+tcp+数据。
这样就不会在目的端出现你说的那种情况,

论坛徽章:
0
10 [报告]
发表于 2014-04-11 13:41 |只看该作者
回复 9# wan3610425

多谢回复,你解释的就是不同 流 就是指的 不同进程吗?所以就不会出现把不同进程需要的数据整合在一个数据包的情况,我可以理解,不知道有没有具体的出处?我想详细的看一看;
另外,即使是同一个进程需要的数据,即属于同一个 流,那么接受的进程 如何区分不同的数据呢?
或者我根本对你解释的 “流”理解错了。

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP