专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

UDP为什么没有epoll

  首先,讲讲UDP编程为什么不需要用到系统的epoll函数,
  RichardStevens在不朽的经典《Unix网络编程卷一》中已经说了:大多数情况下,TCP服务器是并发的,UDP的服务器是迭代的。
  上面这句话可能不太容易理解。
  我基于自己的理解,用大白话跟大家讲,为什么UDP用不到epoll的系统函数。
  首先借用一句话,内核不是解决方案,而是问题所在。
  linux操作系统为什么需要提供epoll函数,在epoll之前还有selectpoll函数。这些函数是干什么的。
  首先,多路复用这个词是针对面向链接协议的说法,一个客户端连接就是一路。
  但是实际上,在IP层,或者说在网络底层,根本就没有什么多路,只有一路。没错,只有一路。
  TCP服务器一般是这样的流程,一个线程处理一个客户端连接:
  C音视频开发学习资料:点击领取音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)
  创建服务器描述符sfdsfdsocket()把服务器fd绑定地址端口bind(sfd)正式开始监听listen()阻塞等待TCP3次握手cfdaccept(sfd)开启新线程处理cfd的读写。
  UDP服务器程序一般是这样的流程:创建服务器描述符sfdsfdsocket()把服务器fd绑定地址端口bind(sfd)直接接受客户端数据包recvfrom()
  可以看到,UDP实际上是TCP的简化版。recvfrom是一个阻塞函数。IP层有数据包到了,就检查IPheader的协议字段,判断IPbody里是不是udp的数据,如果是就激活recvfrom(),这样UDP就能拿到客户端的数据。这个激活,好像是一个软中断还是一个信号,具体在linux4。4内核的哪一块代码,我需要花点时间找一找,先埋个坑,后续补充,暂时理解为激活就行。
  从UDP跟IP层的交互来看,你可以看到,实际上没有什么多路,所有的客户端数据都在一路里面传递给IP层,再由IP层传给UDP层recvfrom()。
  既然如此,那为什么TCP会出现多路,而且因为多路带来性能问题,需要再用epoll解决。
  这里就需要先讲解一下什么是面向连接的协议?
  我们在教科书经常看到,TCP是面向连接的,而UDP不是。
  实际上上面这句话是什么意思呢?
  首先,TCP的实现是在linux内核代码里面的,所以TCP属于linux内核的一部分。
  首先讲解一下,连接状态,它并不是特别真实的一个东西,这个东西比较虚,连接状态,只是内存里面的一个变量,而且还不是实时更新的。
  为什么说它不是实时更新的,就是当底层网络,通信链路不可达的时候,什么是通信链路不可达?直接把中间路由的网线拔开就是了。
  当通信链路不可达的时候,TCP里面的链接状态不会非常快的更改为断开状态。之前在《视频传输协议设计》演示过,把网线拔开之后,TCP要经过多次重传失败,才会认定底层通信链路不可达,然后返回一个信号给调用层。当网线断开的时候,TCP客户端从重试到确认链接断开用了19秒才知道网线断开。
  所以说TCP里面的连接状态只是内存的一个变量,一个虚拟的东西。
  再来说说,为什么协议栈的发展,会演变出连接状态这个内存变量?
  要讲这个问题,就需要先讲为什么广域网的协议,基本上都有3次握手,TCP,UDT,SRT,你可以看到这些协议都有3次握手。
  TCP的3次握手是自带的,UDT是基于UDP的协议,自己实现3次握手,SRT是基于UDT的。
  这个先抛出个问题,UDT既然是用UDP实现的,UDP本身没有3次握手,没有不是更好,可以少几次RTT的时间,通信更快。
  为什么UDT还要自己搞一套3次握手,不用3次握手不是更快吗?
  从直觉来讲,没有3次握手,确实会更快,例如IP层,MAC层的各种协议,就没有什么3次握手。
  但是,需要注意的是,IP层MAC层,他是工作在路由器,交换机里面的,他的数据包发给下一站就完事了,通常下一站不是太远。
  而UDT,TCP,他们的传输,可能是从东大陆到北极,100M的数据,从东大陆某个主机发出来,经过那么多路由器,交换机,跨越海洋,到达北极的某台服务器。如果没有3次握手,提取沟通一下双方的一些情况,100M的传输效率会极其低下,并不会因为没有3次握手而更快,相反,由于上层协议栈没有握手导致一些信息掌握不全面,发送跟接受策略不行,会导致IP层丢包,大量重传。
  所以3次握手,干的是什么的事?就是提前沟通一下双方的信息,例如我的MTU是多少,你的MTU是多少之类的。
  这里再抛出另一个问题,为什么是3次握手,不是4次,2次?
  这个问题实际上是一个ACK设计问题,由于IP层不可靠会丢包,特别是经过那么多路由器转发,丢包的概率会增加,例如路由器负载太高,他就会丢弃数据包减轻负载。
  所以基于IP层的协议,想要在广域网上实现可靠传输,都需要自己实现一套ACK机制,TCP自带ACK,UDT协议是自己实现ACK。
  因为ACK机制的出现,再加上广域网上传输可靠数据需要提前沟通,沟通好才开始正式开始传输数据。
  ACK提前沟通,就形成了3次握手,举个例子。
  客户端要开始传数据给服务器,客户端先发一个UDP包,里面有他的MTU等信息,然后服务器端收到了这个UDP包,因为要有确认机制,所以服务器需要发一个ACK的UDP包给客户端,告诉客户端,服务器已经收到了他MTUUDP包。但是同时,服务器也需要告诉客户端自己的一些信息,为了提高效率,服务器的MTU信息也会放进去ACK里面一起返回去给客户端。
  然后客户端收到了服务器的ACK,客户端知道MTU信息服务器端拿到了,客户端就不会重传。同时,客户端也收到服务器的MTUUDP包,客户端需要回复服务器一个ACK,说自己拿到了。
  上面这些流程,就是3次握手,也就是TCP里面的SYNACKSYNACK。
  回到之前的问题,为什么UDP不需要多路复用,是因为UDP他本身没实现3次握手跟链接状态的功能。那是不是如果一个基于UDP的协议栈实现了3次握手跟建立连接,就会需要多路复用,其实也不是。
  C音视频开发学习资料:点击领取1音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)
  举个例子,基于UDP设计一个协议。我把他叫UDL。
  简洁的流程如下:
  1,服务器recvfrom()阻塞等待IP层把IPbody的数据丢上来。
  2,服务器recvfrom()拿到了客户端的UDP数据,有端口,有客户端IP,有客户端MTU这些数据。
  3,服务器开始回复ACK,3次握手省略,3次握手成功之后然后我服务器创建一个map,把客户端IPPORT作为一个key传进去map,代表这个客户端IPPORT已经建立连接了。可以正式传输数据。
  4,服务器继续阻塞在recvfrom()等待数据。
  5,服务器再次从recvfrom()拿到UDP包,检测UDP包里面有没有SYN,如果有就是开一个新的链接,没有SYN就在map里面找客户端IPPORT,如果存在就继续走,如果不存在就代表之前没建立连接,没沟通好,不能传数据,直接把RST标记放进去UDP发回去。
  6,这里服务器每次从recvfrom()拿到UDP包,都是丢给线程池处理,主线程不阻塞处理。
  上面的流程,我基于UDP实现了一个3次握手,跟链接状态,大家觉得里面有没用到多路复用?我觉得没有,由此至终都是有一个路,所有客户端数据都是通过
  recvfrom()拿到了,然后传给线程池处理。
  那为什么TCP有多路复用跟EPOLL,是因为TCP把3次握手,链接状态等等东西,封装进内部逻辑,做了抽象,方便调用层使用。
  上层协议栈,实现了3次握手跟链接状态的功能并不会出现多路复用,而是由于对这些东西做了封装才会出现多路复用,这个具体是什么意思呢?
  我再仔细讲解一下,Linux里面有个谚语一切皆文件,包括TCP的socket也是一个文件描述符,tcp的socketfd是跟文件fd,复用了一个内核的数据结构,由于linux内核打开的文件描述符是有限制了,这个封装通用设计,就会导致一些问题。
  大家可以看看上面的UDL协议设计,并没打开什么文件描述符,我只是申请了块内存,来存客户端IPPORT的链接状态。
  因为TCP的内部实现用了文件描述符这个数据结构,所以他受到了文件描述符的数量限制。这是TCP实现没考虑的问题。TCP实现是linux内核实现的一部分。
  TCP里面的客户端socketfd,实际上跟上面的UDL一样,只是把客户端IPPORT转成一个socketfd,一个整数,方便调用层使用。
  讲了这么多,还没开始讲,TCP为什么就有多路,而且要复用,而我们上面自己基于UDP实现的类似协议,却没有多路,也不需要复用。
  其实这个问题我自己也不是很清楚,估计是因为TCP里面的网络fd跟操作系统的文件fd是共用的某个数据结构,所以一个TCP网络fd,跟文件fd是一样的,写一个文件就是一路,写多个文件就是多路。系统的文件描述符可以监听变化,TCP服务器会生成很多的clientfd,每个线程阻塞监听clientfd效率太低,所以出了epoll统一监听所有网络fd。
  所以说,估计是因为TCP的内部实现跟操作系统的文件实现耦合太严重了,导致他出现多路,需要epoll来解决。
  TCP应用早期有C10k问题,但是运营商的NAT硬件防火墙,要处理的TCP链接,肯定超过10k,他是怎么解决的?修改linux内核,或者不用linux内核,把硬件性能压榨到极致。TCP标准只是定义了TCP的行为,没有强制一定要像linux内核那样跟文件系统通用数据结构。可以自行实现TCP的行为,符合标准就行。

中国政法大学和西南政法大学相比较哪个更好?中国政法大学被誉为中国法学教育的最高学府中国人文社会科学领域的学术重镇,更是211国家重点大学,并且被纳入双一流建设高校,为国家培养了一大批优秀的法学和法治人才。全校共有24个本科山东有哪些著名的摇滚音乐人?说到摇滚音乐人,大众普遍印象都是有个性,张扬,浑身印满纹身的愤怒青年。而对于摇滚音乐,也是普遍认为吵,爆裂的鼓声和有争议的歌词。本人非常喜欢摇滚乐,不过对于骨灰级摇滚迷来说我还只能如何评价河南建业的伊沃?伊沃是职业球员中,集球技人品于一身的优秀球员,是靠个人技术和能力一个人盘活一支球队的典型代表,是河南建业队核心和精神领袖,是建业队的攻防转换枢纽和节拍器,有开阔的视野和良好的大局观鼻根偏低,是否适合做线雕?不管你鼻根高还是低,都是不建议做线雕隆鼻的。简单来说,就是做线雕隆鼻风险大改善又很有限,且效果又不持久,不值得做的。线雕隆鼻的做法也许很多宣传说线雕隆鼻微创效果立竿见影,但事实上,格拉苏蒂在朗格面前真的很不堪吗?玩表VS懂表在表圈,有这么两个群体,一个是玩表人群,这一类群体习惯性地把手表当作谋利的途径,看重价格,至于懂不懂表就不确定了,总之就是会花几十万买一只烂大街的热门款坐等它升值。还有生活有哪些残忍的真相?1没有人希望你过得比她好。没事不要瞎炫耀,容易得罪人。2。落魄久了,亲朋好友都会离开你。3。你做事越认真,领导越会把更多的工作派给你做,因为你靠谱,最后挨骂最多的也是你。4。偶尔糊大家都说2022年会更难,到底有多难,老百姓应该做哪些准备?2021年,台风洪水限电限产再加上反反复复的新冠疫情,我们终于艰难的挺过来了!但是,对于即将到来的2022年,很多人都一脸茫然,而且内心充满了悲观和失望!不管是医学界金融界科技界,奥迪a4allroad双离合怎样?当你在路上见到这辆新款奥迪A4allroad就知道,它并不简单,那种说不清道不明的逼格和情怀,是大卖场的货色绝对不能和它相提并论。这些旅行车最吸引人的地方是既能让你的瓦罐情怀落地,10001500元左右买什么手机好?文小伊评科技10001500元这个价位算是国内消费者最热衷选择的一个价位,出货份额也是最高的,那么在这个价位选择手机什么是最重要的?个人觉得有如下几个方面1。性能性能直接决定手机系只带手机不带手机卡能查到我的行踪轨迹吗,有何方法?只带手机但是不插电话卡,原则上讲是不好查找你的位置的,但如果你的手机连接了网络,则是可以查找到你的踪迹的。大家知道,手机插上手机卡以后就可以打电话发信息,而且手机卡还有定位的功能。都说宁夏盐池滩羊肉是羊肉中的爱马仕,吃过的朋友感觉咋样?宁夏盐池的羊肉确实好吃,肉质细腻,肥而不膻,我建议还用农村的柴火大锅炖,不要添加太多佐料,那味道才纯正!作为一个东北人,原籍鲁西,一直也有吃羊传统,受家庭影响,从小就喜欢吃羊肉。我
原来公司工资直接打银行卡,现改为支付到个人微信上,这对公司和个人有什么利弊?如果是老板私人微信账号给员工的微信转账当做发工资,相当于是现金发放工资,很多公司会将这部分工资作为账外工资,不申报收入。这种做法对公司和个人都是弊大于利。对公司的利弊有利方面微信支药流后吃什么补身体?药流后吃什么补身体?药流后需保证营养供应,适当吃富含蛋白质维生素铁的食物,如鸡蛋鸡肉瘦肉豆制品奶制品新鲜蔬菜等。药流,即应用药物进行终止妊娠的方法。流产之后身体比较虚弱,要多吃些营在深圳交社保,中间断了,去了另外一家公司,公司帮交社保,但中间断了,需要先补缴吗?这要看断缴的原因。如果是上一家企业在劳动关系存续期间没有给你及时缴纳造成的断缴,责任在企业,他有责任为你补缴,政策也允许补缴。如果是和上一家企业解除劳动关系,和下一家企业尚未签订劳正常人天天吃人参和鹿茸,身体会有什么变化?您好,很高兴回答您的问题。正常人不可以天天吃鹿茸和人参,长期过量且不恰当的使用补益类中药极容易引起诸多的不良反应,众所周知,人参是补气药之首,药性歌括中说人参味甘,大补元气,元气是找工作靠自己,还是靠关系哪个更靠谱?两者结合更靠谱有能力无伯乐赏识难以施展才华若有人引见登堂入室方能施展拳脚岂不善哉故,内有实力外有推力何乐不为凌远长著三月份是一个找工作的季节,在找工作的过程中,有人容易,有人困难,在迪卡侬工作是怎样的体验?法国体育用品零售商,米歇尔雷勒克于1976年,在法国里尔附近的小村庄恩洛斯开了第一家店。40年后,迪卡侬以它独有特色的品牌服务,把店铺伸展到世界各地,如今在我国已经有4000多迪卡家里想弄个家庭影院,5。1套装大概多少钱?有必要装5。1吗?5。1声道的音响系统看电影(玩游戏)的效果确实要好过普通的2。0或2。1声道的音响,现在很多人已经在尝试7。1甚至全景声了,那种身临其境的音响效果是普通的2。0和2。1声道音响无法家里人欠网贷,最经济的还款方式是什么?回答问题之前,首先我要分享一个好消息,我已经成功的还清了信用卡和网贷总计40万债务,从2013年负债,2016年还债,2018年被起诉,2019年执行为老赖到2021年初,用时8年孕晚期假设破水了需要平躺,可是家里楼梯太高陡,怎样下楼?破水了,孕妈为什么要平躺?又如何去医院就诊?很多孕妈可能存在误解,这里给大家科普一下哈。什么是破水?破水,指的是胎膜破裂羊水不受控制地流出来了,分为高位破水和低位破水两种。高位破水为什么说不愿意拉穷亲戚一把的有钱人,才是真正想开了?我不算那个有钱的亲戚,但是我干过傻事。有一年,一个远房表哥找我,说生活不太好过,有机会了一起搞点事情。我当时在鼓捣上市公司流通股质押融资,于是就跟他说,你可以留意一下。过了一个多月为什么美剧里面随处可见投币电话亭,我们却没有?为什么中国没有美国到处可见的投币电话亭?这有两方面的原因。一是美国的手机基站覆盖率相对于中国来说比较低,使得上个世纪出现的电话亭延续工作到现在。现在全球有500多万座4G基站,其中
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软网