TCP Segment Offload(TSO)的实现原理浅析

早上太燥热,突然想起三周前有人跟我交流了TSO的问题,我也描述了其原理,这个原理说来也是特别简单,无非就是靠网卡硬件来分段,计算
checksum,从而解放CPU周期。其实只要说一个就够了,既然靠硬件来分段,那么只能由硬件来计算checksum了,因为你根本就不知道硬件的分
段细节,所以你也没法在分段前计算好每一个段的checksum....
       TSO的原理几乎每个人都知道,事实上它是怎么实现的这个问题也不难,难的是细节。在做完了正事之后,我想把这个原理展现出来,当然可能和实际的实现有超级大的出入,不管怎样,它是一个原理框图,仔细观察,应该也能自己实现一个比我这个更好的TSO了。

这个设计是一个数字逻辑,时序电路的范畴,而这个领域十分地高大上,并不是普通的软件程序员能hold住的,像我这样的半瓶子也一样。所以我依然是按照老
样子,试图直接给出一个结果,而不是要求听书的人事先做一些准备,往往在人们做这些准备工作的时候,就已经厌倦放弃了。
      
基础知识不难,就是一些门电路,与门,非门,比较器,译码器,触发器之类的,这些东西随便找一本计算机组成原理,都很齐全。关键是怎么组合它们,这是另一
个领域的编程。此时,我想起了15年前我的高中物理老湿刘丹青在讲电路的时候说过的一句话:让电流流一下。这句话在科班人看来完全不符合电路设计的基本原
则,他们可能更倾向于首先建模,然后分析,然后使用描述语言VHDL写出代码,最后再给出电路,我觉得这适合于设计本身,但是不适合于对一个门外汉讲述其
精彩。对于一个门外汉来讲,他唯一所知道的就是,让电流流一下,然后冲过这个门,冲过那个管,好了,高电平变成低电平了....在我看来,就是这么回事。

在一张白纸上,画出一堆的门电路,然后随性随意组合它们,慢慢的,我突然发现,这个电路就是TSO的框架了。我记得上周帮人固化了路由转发表,然而那种固
化行为可能会因为成本过高而被pass掉,毕竟如今的软实现已经够用了吧。所以只有核心传输网才需要这种固化的转发表,然而TSO却是服务器领域的首推,
服务器太多了,远比核心转发设备多,它们的CPU需要减负,确实,CPU去计算一些固定模式的东西,有点浪费,它应该花更多的精力去处理一些不可控的东
西。所以TCP分段这种事情自然而然就由网卡代劳了。你,我,他,我们都遇到过TSO,但是我们只会开启,关闭它,如果你想知道它到底是怎么
Offload的,请看下图,让电流流一流:


TCP分段和IP分片的区别很大,这个事你一定要明白。然后才可以看懂上面的图。

以上的解析只是一个特例,事实上,所有的硬件加速机制无非都是一样的机制。当我在看Intel千兆/万兆网卡的手册时,我想到在芯片的内部,这种电路的元
件几乎是海量的,实现了RSS,硬件hash分类等。这就是我所谓的江河泛滥,沿着沟壑瞬间吞噬大地,我们该如何挖沟填壑,这不是本文的目的,本文只是描
述了这种可能性。这也是这种专用电路和通用CPU之间的本质区别。CPU存在着一个指令集,这意味着它是关注于外部如何调用的,而专用电路的关注点在于内
部的执行逻辑,它几乎不对外提供任何接口,唯一的就是设置几个寄存器的值,比如MTU,数据包长度,数据包头长度等,其它的执行逻辑,外部无权过问。这是
串行编程和并行执行的本质区别。
      
对于指令系统,也有一些要说的。在内部控制逻辑上,有一个统一的指令分发系统,实际上就是发射出一系列的0和1的组合,这个组合中的0和1作用于各种门电
路,这些门电路接受了这些不同的输入后,产生不同的输出,然后再作为另外的门电路的输入,造成不同的输出,如此反复...难道事实不是这样子吗?你很难否
则定。
      
让电流流一流,如果你觉得比较抽象,那就观察洪水泛滥的过程吧,大河决堤的地点不同,造成的灾难也不同,关键在于决堤处的地势以及其所连接的各种地形,这
一切都是同时发生的,和电流一样,水流在经过一个弯道或者一道拱桥的时候,也会有一些延时和分流,这就可以类比电路中的各种门。
       吃饭了,吃饭了,真烦!

时间: 2025-01-02 05:49:24

TCP Segment Offload(TSO)的实现原理浅析的相关文章

Method of offloading iSCSI TCP/IP processing from a host processing unit, and related iSCSI TCP/IP offload engine

A method of offloading, from a host data processing unit (205), iSCSI TCP/IP processing of data streams coming through at least one TCP/IP connection (3071?,307?2?,307?3), and a related iSCSI TCP/IP Offload Engine (TOE). The method including: providi

【Spark Core】TaskScheduler源码与任务提交原理浅析2

引言 上一节<TaskScheduler源码与任务提交原理浅析1>介绍了TaskScheduler的创建过程,在这一节中,我将承接<Stage生成和Stage源码浅析>中的submitMissingTasks函数继续介绍task的创建和分发工作. DAGScheduler中的submitMissingTasks函数 如果一个Stage的所有的parent stage都已经计算完成或者存在于cache中,那么他会调用submitMissingTasks来提交该Stage所包含的Tas

Handler原理浅析

    理解Handler的原理首先要搞清楚什么是Looper,在我的上一篇博文中对此有专门的介绍.Looper的作用是开启一个消息循环,从MessageQueue(Message队列,是Looper的成员变量)中循环取出消息处理.一个线程要使用Handler来处理来自其它线程的消息,这个线程必须有且仅有一个Looper对象与之绑定,也可以说一个Looper对象是是与一个线程一一对应的. Hander有一个Looper类型的成员,在Handler的构造函数(new Handler()或者new

Wireshark中TCP segment of a reassembled PDU的含义

By francis_hao    Sep 16,2017 在用Wireshark抓包的时候,经常会看到TCP segment of a reassembled PDU,字面意思是要重组的协议数据单元(PDU:Protocol Data Unit)的TCP段.比如由多个数据包组成的HTTP协议的应答包,如下 这里的分段是指:上层协议HTTP的应答由多个分段组成,每个分段都是TCP协议的.TCP本身没有分段的概念,它的sequence number和acknowledge number 是使TCP

微信QQ的二维码登录原理浅析

在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗就不说了),二维码验证,多终端辅助授权应用开始多起来,这里先说下啥是二维码,其实二维码就是存了二进制数据的黑白图片,当出现要求二维码登录的时候,服务器会生成一条临时的唯一的二维码信息,发送到客户端以二维码(图片)的形式写入到网页,然后你就会看到统一的四个方形的二维码,如果做的好这个二维码信息应该是有时效的,这里暂且不考虑这些,就简单的微信登录作为例子看看吧: 首先说下整个授权流程: 在客户端网页中会不断向服

TCP segment of a reassembled PDU【转】

TCP segment of a reassembled PDU 抓包发现一个TCP segment of a reassembled PDU,搜了一下blog,找到一些博友的文章,很好地解决了我的问题,遂分享 "TCP segment of a reassembled PDU"指的不是IP层的分片,IP分片在wireshark里用"Fragmented IP protocol"来标识.详细查了一下,发现"TCP segment of a reassemb

云计算之路-阿里云上:消灭“黑色n秒”第三招——禁用网卡的TCP/IP Offload

程咬金有三板斧,我们有三招.在这篇博文中我们要出第三招,同时也意味着昨天在"希望的田野"上的第二招失败了. 前两招打头(CPU)不凑效,这一招要换一个部位,但依然要坚持攻击敌人最弱(最忙最累)部位的原则.那除了CPU,最忙最累的部位是哪里呢?对于Web服务器来说,毫无悬念,当然是网卡.而且阿里云的云服务器,所有的网络负载都集中在一块内网网卡上,SLB(负载均衡)用它,OCS(缓存服务)用它,RDS(数据库服务)也用它.所以,就对它出招! 招式受这篇博文(XenServer – Wind

LINQ内部执行原理浅析

C#3.0 增加LINQ的特性 一.基本概念 LINQ,语言级集成查询(Language INtegrated Query) 经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段.程序员现在都已经认同像类(classes).对象(objects).方法(methods)这样的语言特性.考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来

关于TOE(TCP/IP Offload Engine)

前言 昨天在电脑上抓取的报文,想进行回话,但是发现全部被设备丢弃了,没有debug信息,查看了抓包文件,原来是IP头和TCP.UDP头的检验和全部为0,也就是TOE(TCP/IP Offload Engine)导致的. TOE(TCP/IP Offload Engine) 传统的TCP/IP处理网络数据传输过程中,要占用大量的主机CPU资源,为了减轻CPU的压力,一种叫TOE(TCP/IP offload engine,TCP/IP卸载引擎)的技术应运而生.TOE技术对TCP/IP协议栈进行扩展