最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一般来讲,客户端(client)与服务端(server)之间的某个进程要进行通信时,在运输层层面来讲先要通过三次握手来建立TCP连接
通信结束后,需要关闭连接,这时候就要通过TCP的四次挥手来进行关闭连接了
从TCP四次挥手的过程我们可以看到,主动关闭连接的一端(注意这里是说主动关闭连接的一端,即 client 和 server 都可以是主动关闭连接的一端)在收到对方的FIN包请求之后,发送ACK包进行响应,这时候会处在TIME_WAIT状态
即:谁先发起关闭连接的请求,谁就存在 TIME_WAIT 连接
案例中的 agent 由于配置的是主动模式,主动模式下会主动建立(关闭)与 proxy 的连接,也就会存在 TIME_WAIT 状态
为什么要有 TIME_WAIT 连接?
- 首先,TIME_WAIT 状态使得 TCP 全双工连接的终止更加可靠
我们知道,网络的本质是不可靠的,四次挥手关闭 TCP 连接的过程中,最后一个 ACK 包是由主动关闭连接一端发出的
而这个 ACK 有可能在路上丢失,使得处在 LAST_ACK 状态的一端(server 端)接收不到,如果接收不到,server 就会超时重传 FIN 请求
所以 client 需要处在 TIME_WAIT 状态并等待 2MSL 时间来处理 server 重传的 FIN 请求,来使得 server 能够正常关闭
- 其次,TIME_WAIT 状态的存在可以处理延迟到达的报文
网络的本质是不可靠的,也就意味着 TCP 报文有可能会延迟到达,TIME_WAIT 状态时,两端的端口不能使用,要等到 2MSL 时间结束后才可以继续使用,并且在等待 2MSL 时间的过程中,任何迟到的报文都将被丢弃
这样就可以避免延迟到达的 TCP 报文被误认为是新 TCP 连接的数据,并且使得这些延迟报文在网络上消失
解决问题
其实,出现一定数量的TIME_WAIT连接是正常现象,但是在线上生产环境可能会出现极端的情况——大量的TIME_WAIT连接
大量的TIME_WAIT连接会占用系统本地端口,导致不能再创建新的TCP连接
既然已经知道问题的根本原因,解决方法也呼之欲出
- 方法一
关于 windows 存在大量无法释放的 TIME_WAIT 状态连接,微软提供了一个受支持的修复程序
但是需要联系微软官方去获取(好活!)
- 方法二
error WSAENOBUFS (10055) - Windows Client | Microsoft Learn
1、在Windows开始菜单中,单击“运行”
2、在运行对话框中输入 ”regedit“ 后按回车打开注册表编辑器
3、在注册表编辑器中打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”路径
我们新增两个 key——MaxUserPort 或 TcpTimedWaitDelay
在新增之前,先来看下这两个 key 是怎么用的
- MaxUserPort
表示当应用程序向系统请求获取可用的用户端口时,TCP/IP 可指定的最大端口号
看下微软提供的说明
Value Name: MaxUserPort
Value Type: DWORD Value data: 65534 Valid Range: 5000-65534 (decimal) Default: 0x1388 (5000 decimal) Description: This parameter controls the maximum port number that is used when a program requests any available user port from the system. Typically, ephemeral (short-lived) ports are allocated between the values of 1024 and 5000 inclusive.
- TcpTimedWaitDelay
表示从关闭连接开始直到这个连接能够释放并重用的时间
这段时间,是 2MSL 时间,称为两倍最大段生存期
缺省为240秒,最低为30秒,最高为300秒。建议设为30秒
通过降低 TcpTimedWaitDelay 的值,TCP/IP 可以更快地释放关闭的连接,并为新连接提供更多资源
看下微软提供的说明
An additional TCPTimedWaitDelay registry parameter determines how long a closed port waits until the closed port can be reused.
总之一句话:较高的 MaxUserPort 表示能产生更多 TIME_WAIT 状态连接,较低的 TcpTimedWaitDelay 表示套接字在 TIME_WAIT 状态中等待的时间更短
4、创建新的 REG_DWORD 值 TcpTimedWaitDelay,将此值设置为十进制30,即十六进制 0x0000001e。此值将等待时间设置为 30 秒
5、创建新的 REG_DWORD 值 MaxUserPort(可略)
这个值需要根据服务器的实际应用负载来修改,不建议盲目地按照网上的改成65534
一般来说,新增 TcpTimedWaitDelay 之后就能够解决这个问题了,如果还是解决不了,就可以考虑修改 MaxUserPort
PS:修改了注册表之后记得要重启机器!
解决完之后,在女同事们羡慕崇拜的目光下,咸鱼留下一个潇洒的背影,去茶水间泡枸杞去了
最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!