不久前,Fei Ge参加了官方的“ Q&A”专栏。在本专栏中,我和我的网民以“对Linux网络的深入了解”为主题,并就每个人在日常生活中关注的某些问题进行了一些技术讨论。
今天,我将记录此活动中讨论的所有内容,并与所有人分享!
问题1:在虚拟化时代,端口号为65535是不够的,对吗?
问:Linux最多可以具有65535个端口。因此,现在,当虚拟化普遍存在时,这65535更可能被填充。如何处理?
答:首先,Linux最多可以拥有65535个端口的陈述不准确。由于即使在一个Linux上也可以配置多个IP,因此每个IP可以具有65535个端口。
让我们谈谈现代虚拟化。在2008年发布的.6.24内核版本中,引入了一个称为网络名称空间的内容。这是现代容器虚拟化的基石。在每个名称空间中,您都可以拥有自己的独立IP,端口号,路由表和其他网络资源。对于现在常用的一个,一个对应于网络名称空间(在非宿主模式下)。每个容器都有65536个端口。
要知道的另一件事是,如果您连接到不同的服务器,即使您只有一个IP,也可以使用相同的端口号连接到不同的服务器。因此,不必担心65535限制。
问题2:访问该机器的IP是否会通过开关或路由器?
问:IP填充您自己的计算机会通过交换机还是路由器?
答:不,您可以尝试。无论是使用本机IP还是127.0.0.1,它都仅通过环回设备lo。您可以通过在LO上捕获数据包来看到,但是您无法在真实的物理网卡下捕获数据包。
问题3:服务器端中只有一个端口,发送和接收请求是否会混乱?
问:老师,我认为我不明白,但是在阅读了上述问题之后,我有些困惑。当服务器收到Web或其他请求时,无论是80还是443,暴露的端口基本上都是相同的,并且HTTP请求到达。此后,请求会互相干扰吗?或者在同一端口上可以找到多少个HTTP请求,我自己都搞砸了,谢谢老师!
答:我们将通过三个步骤理解您提到的问题。
首先,服务器端将在接收新连接时创建新的连接。这个新的具有完整的Quad(内部源IP,源端口,目标IP和目标端口)信息,并以某种方式进行管理。
其次,TCP网络软件包内的源IP,源端口,目标IP和目标端口都在中载有。
第三。当内核收到网络数据包时,处理协议堆栈时将解析数据包标头,并将包装头中的完整Quad与内核中的托管匹配匹配。只有当四核信息完全一致时,收到的数据才能将数据放在接收队列中。用于不同请求的上部四倍信息并不完全一致,因此请求不会彼此干扰。
问题4:互联网上著名的C10K并发连接的具体问题是什么?
问:互联网上著名的C10K并发连接的具体问题是什么?
答:C10K问题是历史上的问题。在Linux上最早的开发模型中,只有线程编程模型。如果用户来了,他需要使用过程来处理它。但是,随着开发的爆炸式增长,服务器端支持的并发次数越来越高。如果您继续使用此模型,则需要投资大量的服务器资源。因此,C10K问题是处理如何同时使服务器处理10,000个用户连接请求。 EPOLL出生后,C10K不再是问题。
问题5:如何解决网络数据包丢失
问:我碰巧在TCP传输中遇到了可疑的数据包丢失。我想问老师这种问题调查的总体想法和顺序是什么。
答案:TCP传输数据包损耗问题使用数据包捕获来查看重试的方式,使用打开,使用过滤器TCP ..查找重传中的数据包。还有一个基于EBPF的轻量级工具,您也可以尝试。但是,EBPF对Linux版本有很高的要求。
问题6:机器最多可以支持多少个TCP连接?
问:机器最多可以支持多少个TCP连接?这个公式是什么?如何计算,多少个Linux服务器可以支持64GB?
答:机器可以支持多少个TCP连接?让我们谈谈服务器端。首先,它受到内核参数的限制,例如在Linux中配置的打开文件手柄的数量,但是这些易于修改,只需调整一些参数即可。第二个是内存,这是一个硬限制。至少必须约为3.3 kb。因此,如果计算限制下的TCP连接数,则只需将64 GB除以3.3kb即可。但这通常留给发送和接收缓冲区和其他应用程序
问题7:TCP需要多少内存?
问:TCP连接消耗多少内存? MySQL和用户登录信息之类的连接数量是否也是TCP连接?
答案:TCP连接在内核中消耗了两个内存。一种意味着TCP连接约为3.3k。第二个是用于接收和发送数据的缓冲区。这可以很大或很小。传输速度很大时速度更快,并且记忆在较小时会保存。但是在较新的版本中,只要发送和接收完成,就可以回收内存。您在MySQL用户登录等中提到的数据等。TCP中传输的数据。该数据取决于如何存储用户流程。如果它存在于内存中,则占据内存,并且将其存储在磁盘中,则占据磁盘。
问题8:CPU飙升至100%
问:您好,老师,我的在线服务总是使CPU飙升至100%,然后突然落在某个时刻,而记忆和IO几乎是正常的。我应该从哪个方面开始?
答:这需要对特定问题进行特定分析。这取决于用户状态内存消耗是否高还是内核状态消耗率高。相关命令包括TOP,SAR等。如果它处于内核模式,请使用命令来计算系统调用的耗时情况,以查看是否存在特别长时间的时间。您还可以考虑使用PURP火焰图进行分析。
问题9:是否有任何推荐的网络调整和监视工具?
问:张老师,您是否有任何推荐的网络调整和监视工具?
答:网络相对复杂。最好先了解其内部工作原理,然后查看“深入了解Linux网络”,然后找到相应步骤的工具。您可以看一下“表演顶部”,这更好。
问题10:net.ipv4有很多属性,您需要一个一个一个一个一个记忆吗?
问:net.ipv4有很多属性,您需要一个一个一个一个一个一个属性吗?现在,我正处于不知道从哪里开始的阶段。我不知道您的书是否可以帮助建立知识结构,知道它是什么以及它是为什么。
答:无需记住它。最重要的是要了解网络工作的基本工作原理,以便在查看这些参数时很容易理解。这就像割牛的厨师一样。如果您对牛骨骼肌的内部原理有非常透彻的了解,那么切开牛时自然会很容易。而不是死记硬背地记住这些内核参数。
我们的“深入了解Linux网络”是一本书,介绍了网络的基本工作原理。该书将介绍半连接的排队和完整连接的工作方式。如果您了解此原则,则可以轻松理解此参数。而且,当您遇到TCP中的三个握手等问题时,您可以快速解决并找到原因。
问题11:在线被冲走,请帮助
问:您好,我曾经解决了在在线服务器高峰期间被冲走的问题。原因是它们与网络有关。在使用搜索引擎进行解决之后,他们仍然处于知道真相但不知道原因的情况下。请帮我
首先,Gao Feng被冲走了。阅读MySQL后,该程序没有任何异常,并且怀疑这是一个网络问题。然后-n | AWK计算了各种TCP连接状态的数量,发现其他很少的独立机器也很少,这也很高。带宽直接填充
然后修改文件 - 最大并配置以下和其他一些属性,然后立即删除。
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre data-tool="mdnice编辑器" style="margin: 12px auto;color: rgb(0, 0, 0);font-size: 16px;text-align: left;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 2px -2px, rgba(0, 0, 0, 0.12) 0px 3px 6px 0px, rgba(0, 0, 0, 0.09) 0px 5px 12px 4px !important;"><code style="padding: 15px 16px 16px;overflow-x: auto;color: rgb(171, 178, 191);display: -webkit-box;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;font-size: 12px;background: rgb(40, 44, 52);border-radius: 5px;">net.ipv4.tcp_syncookies = 1<br />net.ipv4.tcp_tw_reuse = 1<br />net.ipv4.tcp_tw_recycle = 1<br /></code></pre></p>
最后,添加了NGINX IP电流限制以解决问题。尽管我搜索了几个NET.IPV4配置的含义,但我仍然不知道为什么有这么多。
答:问题的根本原因是,在流量较大(可能攻击流量)请求的情况下,使用短连接。每个短连接的主动释放不会直接消失,但将首先释放内核对象的部分,然后进入状态,然后将端口号占据约2分钟。重用的共同功能是最大程度地减少在房屋上所花费的时间,以便可以尽快发布端口。尽快退出以释放端口,确保当以后的用户到来时,当服务器请求数据服务器(例如MySQL)时,可能会有足够的端口。
问题12:建立Linux网络连接后,文件层将发生什么变化?
问:建立Linux网络连接后,文件层发生了哪些更改?据说Linux中的所有内容都是文件。如何通过网络连接找到连接的相应文件?是一个文件还是多个文件?
答:Linux中的所有内容都是文件,实际上是一个文件结构。磁盘上的文件具有这样的文件对象,这是内核上层的抽象。
但是磁盘文件在内核上仍然完全不同。 CAT命令无法将数据内容显示为一个。如果您必须使用类似猫的功能,则可以使用Linux下的NCAT命令。
服务器端
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre data-tool="mdnice编辑器" style="margin: 12px auto;color: rgb(0, 0, 0);font-size: 16px;text-align: left;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 2px -2px, rgba(0, 0, 0, 0.12) 0px 3px 6px 0px, rgba(0, 0, 0, 0.09) 0px 5px 12px 4px !important;"><code style="padding: 15px 16px 16px;overflow-x: auto;color: rgb(171, 178, 191);display: -webkit-box;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;font-size: 12px;background: rgb(40, 44, 52);border-radius: 5px;"><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"># ncat -v -lp 8081</span><br />Ncat: Version 6.40 ( http://nmap.org/ncat )<br />......<br />hello world<br /></code></pre></p>
客户
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre data-tool="mdnice编辑器" style="margin: 12px auto;color: rgb(0, 0, 0);font-size: 16px;text-align: left;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.16) 0px 1px 2px -2px, rgba(0, 0, 0, 0.12) 0px 3px 6px 0px, rgba(0, 0, 0, 0.09) 0px 5px 12px 4px !important;"><code style="padding: 15px 16px 16px;overflow-x: auto;color: rgb(171, 178, 191);display: -webkit-box;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;font-size: 12px;background: rgb(40, 44, 52);border-radius: 5px;"><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"># nc -v 127.0.0.1 8081</span><br />Ncat: Version 6.40 ( http://nmap.org/ncat )<br />Ncat: Connected to 127.0.0.1:8081.<br />hello world<br /></code></pre></p>
问题13:是否有任何常见的在线配置核心参数?
问:关于连接和性能瓶颈,我们经常在网上遇到问题时搜索解决方案。是否有必须在线配置的通用核心参数?
答:实际上,默认情况下已经准备了一般内核。不幸的是,企业之间存在太多差异,因此基本上不可能将一组参数调整到所有企业中。这也取决于工程师根据当前业务的特征进行适当而灵活的调整。
--- EOF ---
建议↓↓ |