首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP /TSO技术

TCP /TSO技术
EN

Stack Overflow用户
提问于 2011-09-12 07:47:24
回答 1查看 1K关注 0票数 0

为什么所有接口(路由器和网桥)都必须支持LRO/TSO技术?

EN

回答 1

Stack Overflow用户

发布于 2012-08-22 12:28:56

路由器不需要桥接器。

外部路由器、集线器、交换机或与网络外部连接的任何东西都不会看到TSO的影响,只有设备内部与TSO的接口才会受到任何影响--这是一个软件问题。

路由器是通过以太网电缆、光纤电缆、无线通信等连接到网络的外部设备。这些通信介质遵守国际标准,如以太网803.2或无线803.11 --它们是硬件设备,硬件设备对它们的通信方式有非常严格的规定。

桥是一种内部软件结构,并且是特定于您的操作系统的。

让我们以803.2 (以太网)和linux主机为例。

应用程序调用要创建的套接字,然后将一个大数据块推入套接字。linux内核决定应该在哪个接口上传输这些数据。内核接下来将询问该接口的驱动程序,以确定它的功能,如果接口具有TSO能力,内核将向接口驱动程序传递一个带有单个“模板”头和一大块数据(价值超过1个数据包)的sk_buff。

,让我们先考虑一个标准接口,直接到硬件网卡:

一些接口有假的TSO (它们在驱动程序中分割数据包),还有一些有真正的TSO (模板头和数据被传递到硬件中,但改动很小)。此时,驱动程序或NIC硬件将将这一大段数据转换为多个、符合标准的803.2以太网帧,外部设备(如路由器、集线器、交换机、调制解调器或其他主机)将在线路上看到这些兼容帧。

现在让我们考虑一下软件桥后面的几个NIC:

尽管内核知道每个NIC的级别较低,但网络堆栈只知道新娘,因此只有所有底层NIC所具有的功能才应该传递给网桥。如果一个sk_buff被传递给一个桥,那么桥中的所有接口都将接收相同的sk_buff。我们将假设内核再次将我们的大型TSO sk_buff传递给一个桥,如果任何底层接口不支持TSO,那么数据包很可能会被硬件NIC丢弃。

概述:

最糟糕的情况是,网桥将反复尝试在中断的接口上发送相同的数据块,整个网桥将被锁定,直到应用程序决定放弃为止。最好的情况是,非TSO似乎已经死了。

也就是说,如果NIC的驱动程序中有不安全的代码,那么这可能会导致分割错误,从而使整个系统瘫痪。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7384739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档