第19章 TCP的交互数据流 19.4 Nagle算法 在前一节我们看到 , 在一个R l o g i n连接上客户一般每次发送一个字节到服务器,这就产生了一些4 1字节长的分组:2 0字节的I P首部...一种简单和好的方法就是采用RFC 896 [Nagle 1984]中所建议的N a g l e算法。...19.4.1 关闭Nagle算法 有时我们也需要关闭 N a g l e算法。...插口API用户可以使用T C P _ N O D E L A Y选项来关闭Nagle算法。...Host Requirements RFC声明T C P必须实现N a g l e算法,但必须为应用提供一种方法来关闭该算法在某个连接上执行。
除此之外,TCP 还有很多其他算法和策略用来优化网络的使用。 2. Nagle 算法 2.1. 概述 Nagle 算法是一种减少 TCP/IP 网络拥塞控制的算法,主要用来解决小包问题。...Nagle 算法在确认数据发送时把数据放入缓存中,直到上一条数据被确认才会发送新的数据。...Nagle 算法保证一个 TCP 连接上最多只有一个未被确认的未完成小分组,在该分组被确认前不能发送其他小分组。 2.2. 算法规则 1. 如果包长度达到 MSS(最长报文大小),则允许发送; 2....在 linux 中,通过修改下列配置文件 TCP/IP 参数可以实现自动配置 TCP/IP 参数的功能: linux 可调节 tcp 参数设置 可调节的参数 默认值 选项说明 /proc/sys/net...tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值 /proc/sys/net/ipv4/tcp_low_latency 0 允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项应该禁用
Nagle算法 TCP_NODELAY和TCP_CORK Nagle算法 根据创建者John Nagle命名。该算法用于对缓冲区内的一定数量的消息进行自动连接。...注:Nagle虽然解决了小封包问题,但也导致了较高的不可预测的延迟,同时降低了吞吐量。 实际上这就的你动手来自己实现以下Nagle算法了。...实际上Nagle算法并不是很复杂,他的主要职责是数据的累积,实际上有两个门槛:一个就是缓 冲区中的字节数达到了一定量,另一个就是等待了一定的时间(一般的Nagle算法都是等待200ms);这两个门槛的任何一个达到都必须发送数据了...实际上这样就已经实现了Nagle算法,而且不需要经常调用GetTickCount而降低了系统的性能。 TCP_CORK TCP链接的过程中,默认开启Nagle算法,进行小包发送的优化。...这个时候可以置位TCP_NODELAY关闭 Nagle算法,有数据包的话直接发送保证网络时效性。在进行大量数据发送的时候可以置位TCP_CORK关闭Nagle算法保证网络利用性。
一、不重启电脑,禁用启用swap,立刻生效 # 禁用命令 sudo swapoff -a # 启用命令 sudo swapon -a # 查看交换分区的状态 sudo free -m 二、重新启动电脑...,永久禁用Swap 把根目录文件系统设为可读写 sudo mount -n -o remount,rw / 用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出 vi /etc...进入insert 插入模式 :wq #保存退出 mount -a # 使 fstab 文件生效 重新启动电脑,使用free -m查看分区状态 reboot sudo free -m 参考文献# linux...禁用 swap 不用重启也能让fstab生效的一条命令 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
这个员工的名字叫做:Nagle。上面描述的算法就是Nagle算法。这个算法于1984年作为征求意见稿(RFC)发布。...自此Nagle算法就声名鹊起,很多的TCP的实现者们都会提供一个接口来让用户自己去设置是否开启Nagle算法。他们通常给这个参数起名叫:TCP_NODELAY。...有时候也叫做TCP_QUICKACK,比如Linux在2001年就支持了这个参数。 在Netty中也有这样的配置,有时候我们希望禁用Nagle算法,就可以使用如下配置。...算法在海量流量的场景下非常有效,但是会造成一定的数据延迟。...如果对数据传输延迟敏感,那么应该禁用该参数。 现在发现导弹和Netty的关系了吧~
~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled [always] madvise never 若上面扩号是在never的位置,说明禁用了透明大页.../etc/grub.conf 追加如下配置: transparent_hugepage=never 重启主机: shutdown -Fr now 再次查询AnonHugePages发现透明大页并没有被禁用...transparent_hugepage=never Once modified the line will read similar to the following example: title Oracle Linux.../sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux
在本文中我们将展示如何在Linux 中禁用 shutdown 和 reboot 在 Linux 中禁用关机和重启命令 最简单的禁用方法 shutdown 和 reboot 命令使用 /etc/sudoers
解决方案 您应该考虑的第一件事情是 Nagle 算法满足一种需求。由于这种算法对数据进行合并,试图构成一个完整的 TCP 报文段,因此它会引入一些延时。...要禁用 Nagle 算法,您可以设置 TCP_NODELAY socket 选项,如清单 1 所示。 清单 1....为 TCP socket 禁用 Nagle 算法 int sock, flag, ret; /* Create new stream socket */ sock = socket( AF_INET...Nagle 算法几乎可以加倍提高读性能。...结束语 尝试使用本文中介绍的技巧和技术来提高 socket 应用程序的性能,包括通过禁用 Nagle 算法来减少传输延时,通过设置缓冲区的大小来提高 socket 带宽的利用,通过最小化系统调用的个数来降低系统调用的负载
为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。 在本教程中,我们将讨论三种不同的方法来禁用 Linux 机器上的 USB 存储设备。...请尝试用这些方法来禁用 USB 存储,如果您遇到任何问题或有什么疑问,请告知我们。
启用、禁用网卡有很多种方法。在这篇文章里,我们会介绍我们使用过的最好的 5 种方法。 启用禁用网卡可以使用以下 5 个方法来完成: ifconfig 命令:用于配置网卡。它可以提供网卡的很多信息。...以下显示的是我的 Linux 系统中可用网卡的信息。...# ifdown eth1 从以下输出结果可以看到网卡已经被禁用了。...在禁用网卡的时候,你需要使用配置名称而不是设备名称。...# nmtui 选择你要禁用的网卡,然后点击 “Deactivate” 按钮,就可以将网卡禁用。 如果要启用网卡,使用上述同样的步骤即可。 ----
wikipedia对nagle算法的描述: https://en.wikipedia.org/wiki/Nagle%27s_algorithm 算法实现: if there is new data to...nonagle && tp->packets_out && tcp_minshall_check(tp))); } 根据上面代码,nagle算法生效的条件是: 1、当前发送的包小于mss 2、启用TCP_NAGLE_CORK...并禁用TCP_NODELAY,或者启用TCP_NODELAY,有需要发送的数据以及还未ack的数据包 明确nagle算法的条件后,问题来了,为什么上一个包的ack是经过了40ms才返回,正常情况应该就是一个...根据算法的描述可以看到:nagle算法和delayed ack都是为了减少小数据包在网路中传输的数量,优化网络性能。...如果发送方确实存在有多个小包要分别发送,并使用长连接的情况,最好是禁用nagle算法,其实这也是主流的做法,nginx在keeplive模式下就禁用了nagle算法。
则表明MTU小于1500,不断改小data_length值,能够终于測算出gateway的MTU值; 对于linux OS: ping -c -M do -s 如: ping -c 1 -M...Nagle算法与CORK算法差别 Nagle算法和CORK算法非常类似。...Nagle算法全然不受用户socket的控制,你仅仅能简单的设置TCP_NODELAY而禁用它,CORK算法相同也是通过设置或者清除TCP_CORK使能或者禁用之,然而Nagle算法关心的是网络拥塞问题...就会禁用Nagle算法。应用程序调用Send发送的数据包会马上被 投递到网络,而没有延迟。...禁用Nagle算法,让每一个数据包单独的发送。 3、服务端在一个循环中调用Recv接收数据包。给Recv传递200字节的缓冲区以便让每一个记录在一次Recv调用中 被获取到。
同理,接收端在接收大包时有可能会进行截断以免缓冲区放不下(断包),接收连续多个小包时会在缓冲区暂存一段时间合并成大包再处理(粘包),也就是所谓Nagle算法。...Nagle算法的优化在大部分情况下都是非常好的,但也会给接收端带来一定的麻烦,必须要正确识别和读取一个完整的包之后再处理,以免后面的功能代码无法正常工作。...如果到网上(甚至一些书上)搜索资料,会说禁用Nagle算法就可以了,也就是设置套接字属性启用TCP_NODELAY,非常简单。既然如此,那就赶紧用起来吧。...在Python中,标准库socket封装了套接字编程需要的功能,创建套接字之后可以使用setsockopt来设置当前套接字的各种属性,其中就包括禁用断包和粘包的延迟从而禁用Nagle算法。 ?...继续查资料,会有人说,要真正禁用Nagle算法只把TCP_NODELAY设置为True是不够的,还需要把接收端的接收缓冲区大小设置为0才行。原来是这样啊,那就赶紧修改代码吧,事实证明还是没有用的。
化”,Nagle化在这里的含义是采用Nagle算法把较小的包组装为更大的帧。...John Nagle是Nagle算法的发明人,后者就是用他的名字来命名的,他在1984年首次用这种方法来尝试解决福特汽车公司的网络拥塞问题(欲了解详情请参看IETF RFC 896)。...以上操作可以通过设置套接字的TCP_NODELAY = on 选项来完成,这样就禁用了Nagle 算法。...应用 Nagle算法在这种情况下就会产生问题。...但是,如果你正在发送大量数据,你可以设置TCP_CORK选项禁用Nagle化,其方式正好同 TCP_NODELAY相反(TCP_CORK和 TCP_NODELAY是互相排斥的)。
值:int 型,通常设置为 1(启用)或 0(禁用)。SO_KEEPALIVE:启用 TCP 连接的保活机制。该机制可在连接空闲一段时间后发送保活探测报文以检测连接是否仍然有效。...值:int 型,通常设置为 1(启用)或 0(禁用)。TCP_NODELAY:禁用 Nagle 算法。Nagle 算法会在发送数据时进行延迟,以便合并小的数据块。...禁用该选项可以减小延迟,适用于实时性要求较高的应用。值:int 型,通常设置为 1(启用)或 0(禁用)。TCP_FASTOPEN:启用 TCP Fast Open 功能。...值:int 型,通常设置为 1(启用)或 0(禁用)。SO_RCVBUF 和 SO_SNDBUF:设置接收缓冲区和发送缓冲区的大小。值:int 型,表示缓冲区的字节数。...值:struct linger 结构体,包含两个成员变量:l_onoff:int 型,通常设置为 1(启用等待关闭)或 0(禁用等待关闭)。
Linux 系统自带 root 用户访问,默认情况下可以用 root登录系统(当然是有密码的情况下)。但是这就给黑客提供了尝试暴力破解root密码的机会。...在 Linux运行adduser命令来创建用户。创建用户后,只需按照以下步骤禁用root 登录方式 SSH....我们用 sshd 要禁用的主配置文件 root 登录,这可能会减少并阻止黑客暴力破解 root 密码。...禁用 SSH Root 登录 禁用 root 登录,打开ssh主配置文件 /etc/ssh/sshd_config 使用您选择的编辑器。
算法 只有收到前一数据的 ACK 消息时, Nagle 算法才发送下一数据。...TCP 套接字默认使用的 Nagle 算法交换数据, 因此最大限度地进行缓冲, 直到收到 ACK。 如果不使用 Nagle 无需等待 ACK 的前提下连续传输, 大大提高传输速度....使用 Nagle 交互图 ? ? 把图画残了。。。...当我们传输大文件, 注重传输速度时候可以禁用 Nagle 算法, 如果考虑到传输内容很小, 头部信息就有可能几十个字节, 可以使用 Nagle 算法, 减少网络传输次数。...禁用 Nagle 算法 socklen_t option; int optlen = sizeof(option); option = 1; setsockopt(serv_sock, IPPROTO_TCP
不想让自己暴露在各种威胁之下可能是另一个让你想在系统上禁用 IPv6 的原因。虽然 IPv6 本身比 IPv4 更安全,但我所指的风险是另一种性质上的。...据观察,在某些情况下,禁用 IPv6 有助于提高 Ubuntu 的 WiFi 速度。...在 Ubuntu 上禁用 IPv6 [高级用户] 在本节中,我会详述如何在 Ubuntu 上禁用 IPv6 协议,请打开终端(默认快捷键:CTRL+ALT+T),让我们开始吧!...如果你是一个普通 Linux 桌面用户,并且偏好稳定的工作系统,请避开本教程,接下来的部分是为那些知道自己在做什么以及为什么要这么做的用户准备的。...答案是在编译内核的时候禁用相关功能,然后要后悔就只能重新编译内核了(悲)。)
另一方面关于 SHA-1 哈希算法,此前该算法被发现构造前缀碰撞攻击成本已降至低于 5 万美元(实际为 4.5 万美元),因此开发团队决定禁用 ssh-rsa 公钥签名算法。...有一些更好的算法可以替代,包括 RFC8332 RSA SHA-2 签名算法 rsa-sha2-256/512、ssh-ed25519 签名算法与 RFC5656 ECDSA 算法。...目前这些算法在 OpenSSH 中都已经支持。 完整的更新说明查看:http://www.openssh.com/txt/release-8.2
这也正是 Linux 内核引入大页面支持的直接原因。...为了能以最小的代价实现大页面支持,Linux 操作系统采用了基于 hugetlbfs 特殊文件系统 2M 字节大页面支持。...[never]表示透明大页禁用、[madvise]表示 3:如何HugePages_Total返回0,也意味着透明大页禁用了 [root@getlnx06 ~]# grep -i HugePages_Total.../proc/meminfo HugePages_Total: 0 4:cat /proc/sys/vm/nr_hugepages返回0也意味着透明大页禁用了。...[root@getlnx06 ~]# cat /proc/sys/vm/nr_hugepages 0 禁用、启用透明大页功能 方法1:设置/etc/grub.conf文件,在系统启动是禁用。
领取专属 10元无门槛券
手把手带您无忧上云