一台linux可支持多少tcp链接

发布网友 发布时间:2022-04-22 05:46

我来回答

3个回答

热心网友 时间:2022-05-27 01:28

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

热心网友 时间:2022-05-27 02:46

理论上65535个,但一般去除系统占用的,也是在60000了

热心网友 时间:2022-05-27 04:21

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;/*usedwhenconnectionpickepfromthemiddle*/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)))){}
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top