生活工程体验信仰哲学精神
投稿投诉
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

DPVSSNAT实现

5月13日 风雨峰投稿
  DPVS的数据流量从以流入流出划分为:outbond:指数据包从内网服务器DPVS外网服务器(如qq。com)inbond:指数据包从外网服务器(如qq。com)DPVS内网服务器outbond方向数据包处理流程
  内网服务器需要访问外网某个功能接口,请求数据包到达了DPVS服务器。数据包从网卡某个队列queuex进入后,被cpux接收并开始相关的逻辑处理。收包路径大概包括如下:netiflooplcorejobrecvfwdlcoreprocesspacketsnetifdelivermbufnetifdelivermbuf函数中根据packettype分别调用相应的func函数,func类型主要包括:ipv4、ipv6、arp三种类型。这里主要以IPv4分析SNAT整个过程。IPv4类型的包处理函数是ipv4rcv,经过IP层相关检查和校验处理后,调用INETHOOK来执行相关的钩子函数,这里调用的是INETHOOKPREROUTING位置钩子,包括:dpvspreroutingdpvsin函数,核心代码入口在dpvsin里边
  在dpvsin中其实调用的是dpvsin函数,主逻辑入口在这个函数中体现:首先调用协议查找函数dpvsprotolookup,确认此数据包是哪种协议类型,如TCP或UDP等,每种协议的相关处理逻辑不同,后续的相关操作会根据对应协议注册的回调函数来执行。假设本次是请求是首包,需要调用proto的connsched函数进行连接的初始化和调度,TCP的连接调度函数是tcpconnsched。调度时,只有TCPsyn包才能触发正常调度流程。首先,根据数据包的相关数据确认该包是否属于我们配置的服务,调用dpvsservicelookup函数进行查找,不过这里查找到的service类型是match方式。如果找不到响应的svc就跳出SNAT主流程。找到svc后,调用dpvsschedule进行主调度流程,并创建初始化新的连接Entry。调用svcschedulerschedule函数,从RS列表中挑选出一个RS作为dest对于SNAT模式,调用dpvssnatschedule()函数此时已确认dest作为源IP地址,调用safetch根据源地址选择相对应的源port调用dpvsconnfillparam将相关数据赋值到param变量中去。确定相关参数后,调用dpvsconnnew建立初始化新的连接条目。申请newconn连接内存资源,调用dpvsconnalloc初始化inbond和outbond连接表关联的ntuple哈希初始化newconn的相关字段为conn绑定对应的dest,并设置对应的xmit函数添加newconn到连接表中dpvsconnhash初始化相关的计数器和定时器到此为止,一个新的SNAT连接已经完成连接调度成功后,根据模式,SNAT初始化方向为DPVSCONNDIROUTBOUND不同于其他模式。调用proto的statetrans函数,进行相关协议状态机的转换。调用xmitoutbound将数据包发送出去。调用相关接口,确认output路由,并修改三层和四层信息确认下一跳等相关信息,调用neighoutput发出数据包
  到此从SNAT数据包的接收、处理、转发等过程,完成SNAToutbond方向的整个流程。inbond方向数据包处理流程
  内网服务器发送请求数据包后,外网服务器执行相关操作,发出响应数据包,此数据包到达了DPVS服务器。此时DPDK驱动程序会根据关键字段进行FDIR规则匹配,数据包从同样的网卡度列queuex进入后,被cpux接收并开始相关的逻辑处理,这样整个连接都是被同一个cpux来处理的。收包路径大概包括如下:
  在dpvsin前的收包处理流程和outbond基本一致,这里就不分析了。根据数据包字段,确认协议类型,调用dpvsprotolookup确认本次是TCP协议根据响应数据包的4元组来查找连接表(根据元组字段和tuplehash字段),正常情况能够找到对应的连接表。进行协议的状态机转换调用xmitinbound将数据包发送出去,具体细节与outbond很类似。
  不断的重复outbond和inbond流程,就能够通过多次数据包的交互完成连接过程中业务的传输,从而实现SNAT功能
  存在问题:ICMP处理问题。内网服务器ping外网是一个很常见的需求,从实验测试和代码分析来看,响应ICMP包可能命中到其它网卡队列,导致连接表miss的问题,这个问题可以通过FDIR功能将ICMP包都定位到固定的网卡queue上,这样可以简单的方式来解决这个问题。
  NAT模式原理
  对于inbound方向的流量,实际上做的是dnat,将目标ip由lbvip转换成真正的rsip,此时后端rs是能拿到clientip的。outbond的流量做snat,将源地址换成lbvip
  returnverdictINETXXXaffrommbufl3type?No!Thefieldisrewrittenbynetifandconflictswithm。packettype(anunion),sousingawrappertogetaf。staticintdpvsin(voidpriv,structrtembufmbuf,conststructinethookstatestate,intaf){intdir,verdict,err,lcoreidtcid,FIXME:useotherfield?assert(mbufstate);获取当前运行的lcoreidcidpeercidrtelcoreid();数据包不是发往本机的,直接返回ACCEPT,之后执行ipv4rcvfinif(unlikely(etype!ETHPKTHOST))returnINETACCEPT;填充内部dpvsiphdr,如果出错,主要是协议族不正确,直接返回ACCEPTif(dpvsfilliphdr(af,mbuf,iph)!EDPVSOK)returnINETACCEPT;处理ICMP消息,类似于linux内核中icmperror相关的处理逻辑if(unlikely(iph。protoIPPROTOICMPiph。protoIPPROTOICMPV6)){handlerelatedICMPerrortoexistingconnverdictdpvsinicmp(af,mbuf,related);if(relatedverdict!INETACCEPT)letunrelatedandvalidICMPgoesdown,mayimplementICMPfwdinthefuther。}查找四层处理协议,目前实现了tcp,udp和icmpprotdpvsprotolookup(iph。proto);if(unlikely(!prot))returnINETACCEPT;DefragipvsforwardingTCPUDPisnotsupportedforsomereasons,RSSflowdirectordonotsupportTCPUDPfragments,meansitsnotabletodirectfragstosamelcoreasoriginalTCPUDPpackets。perlcoreconntablewillmissiffragsreachswronglcore。Ifweredirectfragstocorrectlcore,itmaycauseperformanceissue。AlsoitneedtounderstandRSSalgorithm。Moreover,forthecasefragsinsameflowarenotoccurinsamelcore,agloballockisneeded,whichisnotagoodidea。目前不支持ip分片,此处与flowdirector相关if(afAFINETip4isfrag(ip4hdr(mbuf))){RTELOG(DEBUG,IPVS,s:fragnotsupport。,func);returnINETDROP;}调用proto相关connlookup函数查找会话,tcp中为tcpconnlookup。有可能会drop掉。dir是设置数据流方向,从client到LB,还是从realserver到LB,peercid为查找时决定处理该连接的lcoreidpacketbelongstoexistingconnection?connprotconnlookup(prot,iph,mbuf,dir,false,drop,peercid);if(unlikely(drop)){RTELOG(DEBUG,IPVS,s:denyiptrytovisit。,func);returnINETDROP;}Theconnectionisnotlocallyfound,howevertheredirectisfoundsoforwardthepackettotheremoteredirectownercore。如果不在当前lcore上处理,则恢复mbufdataoff指向L2header后转发给其他lcore处理,此处ringenqueue成功后返回INETSTOLEN,否则返回DROP丢弃数据包if(cid!peercid){recovermbuf。dataofftoouterEtherheaderrtepktmbufprepend(mbuf,(uint16t)sizeof(structrteetherhdr));returndpvsredirectpkt(mbuf,peercid);}对于新建的连接,肯定是没有会话的,connsched根据请求选择一个后端realserver建立连接if(unlikely(!conn)){tryscheduleRSandcreatenewconnection调用proto中connsched接口选择一个后端rs建立连接,如果创建连接失败,返回verdictif(protconnsched(prot,iph,mbuf,conn,verdict)!EDPVSOK){RTELOG(DEBUG,IPVS,s:failtoschedule。,func);}snat模式,则是内部服务器访问外部服务,内网服务器dpvs外网服务器(baidu),所以设置dirDPVSCONNDIROUTBOUNDonlySNATtriggersconnectionbyinsideoutsidetraffic。if(conndestfwdmodeDPVSFWDMODESNAT)dirDPVSCONNDIROUTBOUND;else其余模式设置dirDPVSCONNDIRINBOUNDdirDPVSCONNDIRINBOUND;}else{assert(conndestsvc!NULL);if(conndestconndestsvcprotconnexpirequiescent(conndestsvcflagsDPVSCONNFEXPIREQUIESCENT)){if(rteatomic16read(conndestweight)0){RTELOG(INFO,IPVS,s:theconnisquiescent,expireitrightnow,anddropthepacket!,func);protconnexpirequiescent(conn);dpvsconnput(conn);returnINETDROP;}}}特殊处理,synproxyif(connflagsDPVSCONNFSYNPROXY){if(dirDPVSCONNDIRINBOUND){FilteroutinackpacketwhencpisatSYNSENTstate。Dropitifnotavalidpacket,storeitotherwiseif(0dpvssynproxyfilterack(mbuf,conn,prot,iph,verdict)){dpvsstatsin(conn,mbuf);dpvsconnput(conn);}Reusesynproxysessions。Reusemeansupdatesynproxyseqstructandcleanackmbufetc。if(0!dpvssynproxyctrlconnreuse){if(0dpvssynproxyreuseconn(af,mbuf,conn,prot,iph,verdict)){dpvsstatsin(conn,mbuf);dpvsconnput(conn);}}}else{Synproxy3logic:receivesynackfromrsif(dpvssynproxysynackrcv(mbuf,conn,prot,iph。len,verdict)0){dpvsstatsout(conn,mbuf);dpvsconnput(conn);}}}状态迁移,tcp中为tcpstatetransif(protstatetrans){errprotstatetrans(prot,conn,mbuf,dir);if(err!EDPVSOK)RTELOG(WARNING,IPVS,s:failtotransstate。,func);}holdingtheconn,needaputlater。根据流量方向dir,来选择如何发送数据if(dirDPVSCONNDIRINBOUND)returnxmitinbound(mbuf,prot,conn);elsereturnxmitoutbound(mbuf,prot,conn);}
  原文链接:https:www。cnblogs。comcodestackp15717792。html
投诉 评论 转载

DPVSSNAT实现DPVS的数据流量从以流入流出划分为:outbond:指数据包从内网服务器DPVS外网服务器(如qq。com)inbond:指数据包从外网服务器(如……2499元起!VIVOS16系列发布这可能是今年最好看的手机时间来到了晚上的七点,vivo这边带来了2022年的收官之作vivoS16系列。熟悉这个产品系列的朋友应该知道,这是vivo一直以来主打设计与自拍美学的系列,而今天全新的viv……梅西身高170,站在c罗和卡卡旁边像个小矮人,他证明了球技胜阿根廷著名足球运动员梅西,出生于1987年比82年的卡卡和85年的c罗都要小几岁,有着巴西和意大利双重国籍的卡卡身高有186,葡萄牙著名足球运动员C罗的身高有187,所以当卡卡……乔丹贝尔缺阵朱旭航22分新疆5人得分上双力克广州夺取5连胜北京时间1月5日19时30分,202223赛季CBA常规赛第二阶段,新疆队对阵广州队。历经一番角逐,新疆队11383力克广州队夺取5连胜。数据统计新疆队:朱旭航22……iPhoneSE4全新大屏设计曝光丨iPhone14标签曝光iPhoneSE第四代iPhoneSE也算是苹果很奇葩但又成功的产品了,自推出初代之后,不少人认为就是苹果用来消耗老模具和库存的产品,除了处理器,其它配置简直是古董。……据说每个儿子都会错过自己的父亲十次,错一次少一次以下是网友的语录:1、泪眼,太真实了,我爸去年走了,经常梦到他,有一次梦里很清楚他已经去世了,觉得静静看着他,不要出声他就不会走,哭醒了。2、羡慕别人四五十岁了还有……陕西将建一条高速,长87。417公里,时速100120公里,近日,《光明日报》刊发了《2022年中国中小城市高质量发展指数研究成果》,其中给出了百强县榜单,这里的百强县指的是综合实力,然而研究了一下,发现如果光看经济的话,有一座城市的排……联想刘军PC稳定发展,销售额市场份额再创新高11月15日,在联想中国区召开的202223上半年财年(49月)总结大会上,联想集团执行副总裁兼中国区总裁刘军表示,克服重重不利因素,PC市场份额保持稳定,销售额市场份额再创历……写给那个走了的,可怜的孩子,他父亲的一封信侄子你好!从网上知道了你的事。知道了事情全部过程。你现在可能在医院里护理你的妻子,在你们心里特别难过伤心的时候,作为一个相当于你叔伯辈分的老人,流着混浊的老泪,任凭滴滴泪水打在……OPPO平板将推ColorOSforPad全新控制中心,支持品玩1月3日讯,OPPO今天宣布,将为OPPOPad系列平板电脑推出全新布局的控制中心,支持一站式多设备管理。该控制中心将WiFi、蓝牙改为了重点操作控件,并新增媒体播放……海南周刊海口龙华区新坡镇文山村山光水色最忆文山原标题:海南周刊海口龙华区新坡镇文山村:山光水色最忆文山文海南日报记者郭萃图海南日报记者封烁海口龙华区新坡镇文山村是一个典型的琼北传统村落,古井、古墙、古石碑……鹅鸭杀用什么加速器好?最好的加速器推荐戳这最近火遍全网的线上狼人杀游戏goosegooseduck鹅鸭杀(鹅鹅鸭)受到了不少玩家的欢迎,其可爱的画风和多种多样的玩法也是深深的吸引了不少玩家进行游玩,但是不少的玩家在游玩……
集团化管控的演变工作调动个人考察材料半夜点就醒睁眼到天亮看千年古方如绕到造句用绕到造句大全为啥白头发会越长越多?不一定是老了,或跟缺乏3种营养有关平民白手赚钱成功案例二零零六夏秋之交一面膜天天敷皮肤越敷越脆弱索马里造句用索马里造句大全中超第4支降级队曝光,5人相继消失,假球保级作废,广州队重生揭秘岳飞死亡真相揭皇帝不育伤疤55年主动辞去大将军衔,后当了19年副总理,主席去世时他号啕屠格涅夫《父与子》主要内容概要及赏析生活中的智慧作文董竹君从青楼卖唱女到锦江饭店的创始人解读大学的教育思想养猪竟这么耗电,牧原一年电费几十亿,发力新能源正当时水果腐烂一部分还能吃吗?多数人都吃错了!那个辞掉体面工作,不顾身份差别嫁给农民的女记者,输得一塌糊涂央视揭秘假活佛的两个身份原先是济南监狱系统人员鹅口疮治疗上常见的误区逆向行驶交罚款需要带什么证件怎么有效治胃炎?做好3个注意事项,不让胃炎找上门朦胧岁月二十五孙遥邀请栾溪风上台合唱九九艳阳天

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找