tcp的11种状态(TCP 状态)

      最后更新:2022-11-14 16:54:50 手机定位技术交流文章

      TCP是什么

      TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,由IETF的RFC 793说明(specified)。TCP在IP报文的协议号是6。
      TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议。
      传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,由IETF的RFC 793说明(specified)。TCP在IP报文的协议号是6。 中文名:传输控制协议外文名:Transmission Control Protocol 特性:可靠传输
      TCP是什么

      一台linux可支持多少tcp链接

      这个文件是一个综合性的问题。首先就tcp链接来说吧,主要体现在tcp的socket链接数上面,65535 应该是足够用了,但是tcp连接11种状态,不同不同状态有可能有会话保持什么的。这些暂且不说,现在tcp连接的还有Linux下文件的最大打开数量,流量带宽等等。 优化:1.ulimit -a 查看最大文件打开数量,然后修改2.减少tcp长连接,或其他状态链接,可以改下会话保持时间,主动自动关闭(不建议),重复使用tcp等。这个是在tcp链接数来进行考虑。3.增多IP,增多端口,一个IP是这么多,那可以在一台Linux上绑定多个IP来增加链接数。等等 运维是一个大的课题,大家都是在学习中提高的,我的答案不一定正确,大家可以相互指正。更多Linux可以参考《Linux就该这样学》,加油
      理论上65535个,但一般去除系统占用的,也是在60000了
      TCPfilter的原理:当filter收到某个连接的第一个报文时,会为该连接在全局连接表中创建一个表项,并用报文中携带的源、目的IP和端口这个四元组创建originaltuple和replytuple,这两个tuple分别从不同方向来标识这个连接。后续的报文会根据其携带的四元组找到相应的连接表项,然后根据表项所记录的历史状态,检查报文所携带的ack、数据是否有效。filter通过分析该连接所有的历史报文,计算出ack和数据相应的最大最小阀值,来检查新到达报文ack和数据的有效性。该连接相关的最大最小阀值是动态变化的,当新报文通过有效性检查后,阀值将使用新报文所携带的内容重新计算。在讨论如何确立阀值之前,先来看几条约定。假设A和B之间的报文都经过filter,那么:lfilter可以看到A、B之间的所有报文数据;lfilter可以看到每个报文中所声明的窗口大小;l如果B发送的报文的ACK标志位置位,且ACK=n,那么filter可以认为B已接收到的A数据,其长度至少为n。1),连接项中当前有效数据边界的确立:假设A向B发送的报文中,所含数据段为[seq,seq+len),即报文所含数据起始SEQ为seq,数据长度为len。由于A所发送的报文长度不能超过B当前窗口所能容纳的大小,因此有效数据的上限为:A:seq+len=A:max{seq+len}–B:max{max{win,1}}(II)假设B的最大窗口大小为n,那么B端最多可以缓存n个A的报文,因为A端所发送的报文最多有n个尚未确认,对于已经确认的报文再次重发是没有意义的。2),连接项中当前有效ACK边界的确立:因为A不可能为其未收到的数据进行确认,所以报文中的ACK不可能大于其所收到报文的最大SEQ,所以有效ACK的上限为:A:ack=B:max{seq+len}–MAXACKWINDOW(IV)MAXACKWINDOW被定义为66000,即TCP允许的最大的窗口大小,该值的大小决定了有效ACK被阻塞的可能性。7,LINUX的相关原理:structip_ct_tcp_state{u_int32_ttd_end;/*maxofseq+len*/u_int32_ttd_maxend;/*maxofack+max(win,1)*/u_int32_ttd_maxwin;/*max(win)*/u_int8_ttd_scale;/*windowscalefactor*/u_int8_tloose;/*usedwhenconnectionpickedupfromthemiddle*/u_int8_tflags;/*perdirectionoptions*/};structip_ct_tcp{structip_ct_tcp_stateseen[2];/*connectionparametersperdirection*/…};ip_ct_tcp是用来记录一个连接TCP状态的数据结构,seen是个大小为2的数组,0用来记录和连接发起方original相关的内容,1则记录了reply的内容。TCP协议对待发送报文的限制有两类:RCV.ACK=sender.td_maxend,receiver.td_maxwin+=seq+len-sender.td_maxend上述阀值公式等价于:I.有效数据上限:seq=sender.td_end-receiver.td_maxwin(因为公式I用的max(ack)=max(ack)+len,又max(ack)>=sender.td_maxend-receiver.td_maxwin>=max(seq)-receiver.td_maxwin,所以max(ack)+len>=max(seq)+len-receiver.td_maxwin>=sender.td_end-receiver.td_maxwin唉推不下去了)III.有效ACK上限:sack=receiver.td_end-MAXACKWINDOW8,tcp_in_window:/*1,从报文中获取seq,ack,win和end=seq+len*/seq=ntohl(tcph->seq);ack=sack=ntohl(tcph->ack_seq);win=ntohs(tcph->window);end=segment_seq_plus_len(seq,skb->len,iph,tcph);/*2,如果存在SACK选项,获取SACK中的最右边沿*/if(receiver->flags&IP_CT_TCP_FLAG_SACK_PERM)tcp_sack(skb,iph,tcph,&sack);/*3,发送方td_end为0的情况对于original端并不适合,只有当reply方对original的syn回应的报文才会走到这个分支*/if(sender->td_end==0){/*报文是一个syn/ack报文,表明TCP连接是一个正常的从初始开始的连接,初始化连接状态*/if(tcph->syn&&tcph->ack){…}else{/*该TCP连接是对以前存在的但已断开的连接,重新开始连接*/…}}elseif(((state->state==TCP_CONNTRACK_SYN_SENT&&dir==IP_CT_DIR_ORIGINAL)||(state->state==TCP_CONNTRACK_SYN_RECV&&dir==IP_CT_DIR_REPLY))&&after(end,sender->td_end)){/*RFC793:"ifaTCPisreinitializedthenitneednotwaitatall;itmustonlybesuretousesequencenumberslargerthanthoserecentlyused."*/}…/*4,这里是函数的主体部分,实现了上述四个公式的判别,并对连接状态的相应内容进行更新*/if(sender->loose||receiver->loose||(before(seq,sender->td_maxend+1)&&after(end,sender->td_end-receiver->td_maxwin-1)&&before(sack,receiver->td_end+1)&&after(ack,receiver->td_end-MAXACKWINDOW(sender)))){}
      一台linux可支持多少tcp链接

      Linux系统支持的最大TCP连接是多少?

      1.首先,客户端和服务器建立的每个TCP连接都会占用服务器内存,所以最大TCP连接数和内存成正比。简单估算为最大内存除以单TCP连接占用的最小内存 2.Linux操作系统中,一切都是文件。所以每个TCP连接,都会打开一个文件。为此Linux操作系统限制了每个用户能打开的文件数量,通过ulimit -n 查看。修改方式:vi /etc/security/limits.conf文件,在文件中添加如下行(限制修改为10240):speng soft nofile 10240speng hard nofile 102403.Linux操作系统中,TCP连接数量还受到端口数量限制,由于端口号只有1-65535,所以最大TCP连接数也只有65535个(包括系统端口1-1024)4.Linux操作系统对所有用户最大能打开文件的限制:cat /proc/sys/fs/file-max。5.网络核心模块对tcp连接的限制(最大不能超过65535):vi /etc/sysctl.confnet.ipv4.ip_local_port_range = 1024 650006.防火墙对tcp连接的限制综上,在Linux操作系统中,首先对TCP连接数量的限制依次有:端口数量限制,网络核心限制,最大文件数量限制(因为每建立一个连接就要打开一个文件),防火墙限制,用户打开文件限制 都是传智播客出版的书上的知识,他们官网也都有。可以去官网多看看视频学学。
      这个文件是一个综合性的问题。首先就tcp链接来说吧,主要体现在tcp的socket链接数上面,65535 应该是足够用了,但是tcp连接11种状态,不同不同状态有可能有会话保持什么的。这些暂且不说,现在tcp连接的还有Linux下文件的最大打开数量,流量带宽等等。 优化:1.ulimit -a 查看最大文件打开数量,然后修改2.减少tcp长连接,或其他状态链接,可以改下会话保持时间,主动自动关闭(不建议),重复使用tcp等。这个是在tcp链接数来进行考虑。 3.增多IP,增多端口,一个IP是这么多,那可以在一台Linux上绑定多个IP来增加链接数。
      Linux系统支持的最大TCP连接是多少?

      tcp连接的几个状态码

      在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。概念补充-TCP三次握手:TCP(Transmission Control Protocol)传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。完成三次握手,主机A与主机B开始传送数据。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据
      tcp连接的几个状态码

      linux下tcp客户端能建立多少个长连接

      这个文件是一个综合性的问题。首先就tcp链接来说吧,主要体现在tcp的socket链接数上面,65535 应该是足够用了,但是tcp连接11种状态,不同不同状态有可能有会话保持什么的。这些暂且不说,现在tcp连接的还有Linux下文件的最大打开数量,流量带宽等等。优化:ulimit -a 查看最大文件打开数量,然后修改2.减少tcp长连接,或其他状态链接,可以改下会话保持时间,主动自动关闭(不建议),重复使用tcp等。这个是在tcp链接数来进行考虑。3.增多IP,增多端口,一个IP是这么多,那可以在一台Linux上绑定多个IP来增加链接数。等等运维是一个大的课题,大家都是在学习中提高的,我的答案不一定正确,大家可以相互指正。更多Linux可以参考《Linux就该这样学》,加油
      linux下tcp客户端能建立多少个长连接

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/45370.html

          热门文章

          文章分类