首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高性能网络编程4–TCP连接关闭

TCP连接关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。...创建进程是由clone系统调用实现的,而创建线程时同样也是clone实现的,只不过clone的参数不同,其行为也很不同。这个话题是很大的,这里我们仅讨论下TCP连接。...TCP双工的这个特性使得连接的正常关闭需要四次握手,其含义为:主动端关闭了发送的功能;被动端认可;被动端也关闭了发送的功能;主动端认可。...用于listen的监听句柄也是使用close关闭关闭这样的句柄含义当然很不同,它本身并不对应着某个TCP连接,但是,附着在它之上的却可能有半成品连接。什么意思呢?...移除此定时器后,若ESTABLISH状态的TCP连接tcp_keepalive_time时间(如服务器上常配置为2小时)内没有通讯,服务器就会主动关闭连接。 接下来,关闭每一个半连接

1.8K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    高性能网络编程4--TCP连接关闭

    TCP连接关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。...创建进程是由clone系统调用实现的,而创建线程时同样也是clone实现的,只不过clone的参数不同,其行为也很不同。这个话题是很大的,这里我们仅讨论下TCP连接。...TCP双工的这个特性使得连接的正常关闭需要四次握手,其含义为:主动端关闭了发送的功能;被动端认可;被动端也关闭了发送的功能;主动端认可。...用于listen的监听句柄也是使用close关闭关闭这样的句柄含义当然很不同,它本身并不对应着某个TCP连接,但是,附着在它之上的却可能有半成品连接。什么意思呢?...移除此定时器后,若ESTABLISH状态的TCP连接tcp_keepalive_time时间(如服务器上常配置为2小时)内没有通讯,服务器就会主动关闭连接。 接下来,关闭每一个半连接

    1.3K20

    Linux系统研究 - 操作系统是如何管理tcp连接的 (2)

    接上一篇文章 Linux系统研究 - 操作系统是如何管理tcp连接的 (1),我们再来继续讲。...// 下面的方法就是用于获取操作系统自由挑选的本地端口的范围 // 该范围默认是 [32768-60999] // 当前范围可由以下命令查看:...这就是在tcp连接建立成功之后,tcp内的逻辑对tcp_hashinfo的使用。 下面我们再来看下在tcp关闭流程中,tcp_hashinfo是如何被使用的。...(sk); } } } 到这里,一个tcp连接就完全关闭了,并且前后端的socket都已经从tcp_hashinfo的ehash和bhash...总体来说该篇文章是以tcp_hashinfo这个全局实例为中心,看了一下操作系统是如何管理tcp连接的。 希望此文章能给同样处于内核研究的同学一些帮助。

    3.2K42

    Linux系统研究 - 操作系统是如何管理tcp连接的 (1)

    首先,在linux内核的网络模块里维护着一个全局实例,用来存储所有和tcp相关的socket: // net/ipv4/tcp_ipv4.c struct inet_hashinfo tcp_hashinfo...inet_hashtables.h struct inet_hashinfo { // key是由本地地址、本地端口、远程地址、远程端口组成的四元组 // value是正在建立连接或已经建立连接的...// value是使用这个端口的所有socket // 比如,当我们用socket监听一个端口时,该socket就在bhash里 // 同理,由该监听端口建立的连接对应的那些...是对应的处于listen状态的socket struct inet_listen_hashbucket listening_hash[INET_LHTABLE_SIZE]; }; 在系统启动时..., }; EXPORT_SYMBOL(tcp_prot); 好,以上就是操作系统管理tcp连接用到的全局的数据结构,接下来我们看一些具体操作。

    2.4K20

    LinuxTCP连接过程总结

    一、Linux服务器上11种网络连接状态:       图:TCP的状态机 通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手 注:以下说明最好能结合...ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。...当然上述很多TCP状态在系统里都有对应的解释或设置,可见 man tcp 二、关于长连接和短连接:   通俗点讲,短连接就是一次TCP请求得到结果后,连接马上结束.而长连接并不马上断开,而一直保持着,直到长连接...长 连接(keepalive)是需要靠双方不断的发送探测包来维持的,keepalive期间服务端和客户端的TCP连接状态是ESTABLISHED.目 前http 1.1版本里默认都是keepalive(...1.0版本默认是不keepalive的),ie6/7/8和firefox都默认用的是http 1.1版本了(如何查看当前浏览器用的是哪个版本,这里不再赘述)。

    4.9K50

    linux关闭系统防火墙命令_linux系统如何关闭防火墙

    LINUX关闭防火墙的方法 导语:LINUX关闭防火墙的方法,你懂吗?下面的是百分网小编为大家搜集的LINUX关闭防火墙的方法,欢迎阅读,谢谢!...start 关闭:service iptables stop 需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。...-p tcp ——dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state ——state NEW -m tcp -p tcp ——dport 22 -j...,但是使用这个命令前,千万记得用iptables -L查看一下你的系统中所有链的默认target,iptables -F这个命令只是清除所有规则,只不会真正关闭iptables.想象一下,如果你的链默认...target是DROP,本来你有规则来允许一些特定的端口,但一旦应用iptables -L ,清除了所有规则以后,默认的target就会阻止任何访问,当然包括远程ssh管理服务器的你。

    8.8K20

    关闭防火墙 linux_linux系统防火墙关闭

    抛开实际生产环境 个人平时练习的时候安装虚拟机可能遇到过很多坑就很烦,可能很大一部分原因都是防火墙没关掉哈哈哈哈所以建议永久性关闭防火墙 下面是CentOs7关闭防火墙的命令!...1:查看防火状态 systemctl status firewalld 如果是这样就开着呢 如果是这样就是关着 2:暂时关闭防火墙 systemctl stop firewalld...3:重启防火墙 systemctl enable firewalld 5:永久关闭后重启 Linux永久关闭防火墙 firewalld和sellinux设置 必须设置 最好设置永久性若是暂时关闭...下次开启还要设置 所以建议永久性关闭 关闭 firewalld: systemctl disable firewalld #永久关闭,即设置开机的时候不自动启动 关闭 selinux: 修改配置文件...(永久关闭selinux可以使用vi命令打开/etc/sysconfig/selinux 文件将SELINUX=disable) 然后reboot 重启虚拟机就OK了 版权声明:本文内容由互联网用户自发贡献

    15.8K30

    linux-系统默认目录说明

    存储linux系统自有的所有命令,可以cd bin去查看,里面有比如cp、ls这样系统命令。 就连 cd 这个命令也是在bin下面的。...也包含了用于启动/停止单个程序的启动和关闭shell脚本。...); 锁文件(/var/lock); 多次重新启动需要的临时文件(/var/tmp); /proc 文件系统 Linux 内核提供的一种伪文件系统,可以在运行时访问内核内部数据结构、改变内核设置的机制.../mnt 挂载目录 临时安装目录,系统管理员可以挂载文件系统。 什么叫临时安装? 我自己的理解是,不是随系统启时加载的硬件,比如,移动硬盘,U盘,投影仪等。...这windows下添加设备的过程是自动化的,在linux下需要手动添加。 mmt = mount 的缩写 挂载的设备会在/mnt下多也一个设备目录,里面包含了设备文件。

    32631

    TCP关闭连接(为什么会能 Time_wait,Close_wait ) ?

    作者:胡文斌 Tcp 关闭连接问题及注意 最近一段时间一直在学习阅读mina和nio的源码,也发现了一些问题无法解决,然后重读了一下tcp协议,收获颇多。...要分析这个原因那就得从关闭连接程的四次握手,有时也会是三次握手,说起。如下图所示: 大家都知道tcp正常的关闭连接要经过四次握手。...也就是大约1-4分钟,然后由操作系统自动回收并将TCP连接设为CLOSED初始状态。...,过了1~4分钟之后,客户又可以连接上了,没多久连接不上,再等1~4分钟之后又可以连接上,(上一个星期我们在做一个服务切换时遇到了这种情况) 这是因为服务方socket资源已经耗尽。...只能过2分钟之后等系统回收这些socket和端口资源之后才能服务,就这样往复下去。 TCP为什么要这么要让这种TIME_WAIT状态存活这么久呢?

    13.9K22

    Linux 2.6.16 TCP 连接速度异常的问题分析

    分析认为SESU10母盘上内核TCP拥塞控制算法和Windows的Ack频率控制的策略存在不兼容情况。...服务器程序: Apache,nws(自研webserver) 客户端: Windows XP, Windows7,任意浏览器或者旋风(单线程下载) 测试工具:wireshark, httpwatch 测试连接...通过设置注册表选项 TcpAckFrequency 参数为1关闭 Ack delay以后,实验发现下载速度恢复正常,无法重现下载速度慢的问题。...Linux这一端,首先怀疑和nagle算法有关系,在nws服务器上设置TCP_NODELAY以后仍然可以重现,可以排除Nagle算法的影响。...(实际上nws每次发送大数据包或者直接使用sendfile,不太会收到nagle算法影响) 其次Apache,nws都可以重现这个问题,比较怀疑操作系统本身有缺陷。

    4.8K00

    为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    告诉系统此报文段中有紧急数据; 确认ACK,仅当ACK=1时,确认号字段才有效。...,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。...数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。 客户端进程发出连接释放报文,并且停止发送数据。...这样新的连接中不会出现旧连接的请求报文。 为什么建立连接是三次握手,关闭连接确是四次挥手呢?...而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接

    70010

    关于关闭一个还有没发送数据完的TCP连接思考

    当时我认为,因为关闭 TCP 连接会触发四次挥手过程,而为了让四次挥手能够快速完成,应该会把发送缓冲区的数据清空,然后发送四次挥手的数据包。...带着疑问,我去查阅 Linux 源码的实现,下面就是关闭一个 TCP 连接的过程。...关闭 TCP 连接过程 关闭一个 TCP 连接可以使用 close() 系统调用,我们来分析一下当调用 close() 关闭一个 TCP 连接时会发生什么事情。...return filp_close(filp, files); ... } sys_close() 函数最终会调用 file_close() 函数来关闭文件(由于在 Linux 中 socket...或者UDP) 的 close() 方法,对于 TCP协议 来说,close() 方法对应的是 tcp_close() 函数,tcp_close() 就是关闭 TCP 连接的最后站点。

    1.6K20

    为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    告诉系统此报文段中有紧急数据; 确认ACK,仅当ACK=1时,确认号字段才有效。...,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。...数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。 客户端进程发出连接释放报文,并且停止发送数据。...这样新的连接中不会出现旧连接的请求报文。 为什么建立连接是三次握手,关闭连接确是四次挥手呢?...而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接

    66610

    为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?

    告诉系统此报文段中有紧急数据; 确认ACK,仅当ACK=1时,确认号字段才有效。...,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。...这样新的连接中不会出现旧连接的请求报文。 为什么建立连接是三次握手,关闭连接确是四次挥手呢?...而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接...资料详情请看这篇旧文:Python、C++、Java、Linux、Go、前端、算法资料分享

    57120

    Linux系统之IP、TCP封包格式

    IP 协议是一个非面向连接的协议,也就是说 IP 不需要协商一个连接。面向连接的协议需要协商一个连接,然后在这个连接上面收发数据,最后关闭这个连接。...TCP 就是这样的协议,但是它建立在 IP 基础之上的。IP 不是面向连接 的原因有很多种,其中一个原因就是它不会为很多应用增加不必要的开销。...二、TCP封包格式 1、TCP作用 TCP 协议位于 IP 协议层之上,TCP 是一个有状态的协议,并且通过内部机 制能够确认报文是否被对方正确的接收。...五、总结 TCP协议和UDP协议的区别 1、TCP协议面向连接,UDP协议面向非连接 2、CP协议传输速度慢,UDP协议传输速度快 3、TCP协议保证数据顺序,UDP协议不保证 4、TCP协议保证数据正确性...,UDP协议可能丢包 5、TCP协议对系统资源要求多,UDP协议要求少

    4.3K40
    领券