个人面试总结

个人面试心得,后面会不断更新。

首先展示一张tcp协议连接的状态图:

1.为什么需要三次握手,而不是两次或者四次?

 面试被问到这样一个问题,自己的回答不是很好,就总结了下。之所以要进行三次握手,是因为使用的时全双工通道通信方式。

全双工通信是是连接的两端既能发送数据又能接收数据的一个过程。如果只进行两次握手会出现以下的问题:例如A和B进行通信,进行两次握手,当A首次发送的连接请求可能会因为数据报丢失,从而在此进行重传,当B接收到请求之后,并回复ack,A跟B就建立连接了完成了,此时A可以向B发送数据了,当两端发送数据之后,断开链接,但是原先丢失的数据如果因为网络原因,延迟到达B的连接请求,当B接收之后,就在此和A进行连接了,但实际上A已经不再向B发送数据了,此刻,连接虽然建立了,B会等待A发送数据,但是A已经不再向B发送数据了,造成B空等待,从而浪费资源。;另外还可能造成死锁等待状态,使用两次连接,因为考虑计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组。在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。另外三次握手已经确保了链接准确性,剩下的次数显示为冗余消息,还消耗资源,所以三次握手确保可靠连接。

三次握手为了确保可靠的链接,数据准确传输的所需要的三次握手。

2.进程同步和异步

 同步的概念是,几个线程相互协调来处理一件事情,按照先后顺序,协调来完成一件事情,例如说,两个线程完成某个功能,当线程a完成某个步骤,之后停下来,并唤醒线程b去执行另外的步骤,当b完成得到相应的结果后,再次唤醒a继续执行,两个线程相互协调来完成某种功能的过程。(进程亦如此)

异步的概念是,一个进程发出调用之后,不管有没有结果返回,他会继续执行后面的任务,等待结果返回时,会通知该进程的。例如两个人交流,a向b发送了一条消息,不管b收没收到,继续做其他的事情,当收到a的消息时再去处理对应的事件。

3.同步传输和异步传输

异步传输:

  通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值 0,以低电平表示,占用 1 位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符占用 5~8位,具体取决于数据所采用的字符集。例如,电报码字符为 5 位、ASCII码字符为 7 位、汉字码则为8 位。此外,还要附加 1 位奇偶校验位,可以选择奇校验或偶校验方式对该字符实施简单的差错控制。发送端与接收端除了采用相同的数据格式(字符的位数、停止位的位数、有无校验位及校验方式等)外,还应当采用相同的传输速率。典型的速率有:9 600 b/s、19.2kb/s、56kb/s等。

    异步传输又称为起止式异步通信方式,其优点是简单、可靠,适用于面向字符的、低速的异步通信场合。例如,计算机与Modem之间的通信就是采用这种方式。它的缺点是通信开销大,每传输一个字符都要额外附加2~3位,通信效率比较低。例如,在使用Modem上网时,普遍感觉速度很慢,除了传输速率低之外,与通信开销大、通信效率低也密切相关。

同步传输:

同步传输是以数据块为传输单位。每个数据块的头部和尾部都要附加一个特殊的字符或比特序列,标记一个数据块的开始和结束,一般还要附加一个校验序列 (如16位或32位CRC校验码),以便对数据块进行差错控制。所谓同步传输是指数据块与数据块之间的时间间隔是固定的,必须严格地规定它们的时间关系。

4.同步阻塞和异步阻塞

同步阻塞:在发送方发送一个数据报之后,需要等待收到接收方的回应才会将继续发送下一个数据包,否则,一直阻塞等待。优点是保证数据传输正确性。缺点是,如果一直等待阻塞,浪费资源。

异步阻塞:在发送方发送一条数据之后,不管接收方是否收到,继续发送下一个数据报。优点:处理时间不会因为没有收到相应而无休止的等待下去,可以节省出来更多的资源去处理其他的事情。缺点:不保证数据处理的准确定。

5.如何处理tcp连接中出现大量TIME_WAIT的情况。

  tcp协议连接是一个面向连接的过程,建立一个tcp连接需要经过三次握手,断开连接需要经过四次挥手。每种都有其相关的状态,在tcp连接中只要是主动关闭连接都会经过TIME_WAIT状态。通常是客户端是主动关闭的一方,之所以存在TIME_WAIT状态,是为了方式,当连接断开的时候,主动关闭一方等待一个2MSL的时间,目的是最后一个挥手确认包因网络问题丢失,导致服务端不能收到确认包,从而在服务端任务还没有彻底断开连接,仍旧可以向客户端发送数据,故而,主动关闭的一方,等待一个TIME_WAIT时间,当确认包丢失,通过重传,从而达到最后的挥手断开,让连接彻底断开。

造成的危害:

  通常是因为在高并发中的短连接中,客户端主动关闭,之后进入time_wait状态,并等待一个2msl时间,在这个时间段内,该链接中的四元组信息是无法被使用的,如果有过多的主动主动关闭,从而就会导致出现大量的time_wait状态的半连接,每个等待的连接都会等待一个2msl时间,从而可能导致四元组的端口被占用完,导致其他客户端无法建立新的连接过程。

如图所示:表示的四次挥手的见图流程,(至于为什么需要time_wait是因为当服务端发送FIN包的后,客户端回馈ack,可能因为网络问题,服务端没有收到ack,会重新发送fin包,这就需要等待2msl(最大报文生存周期时间),time_wait时间状态存在的价值就是确保让服务端收到最有一个挥手确认包,从而达到两端完全断开连接状态,最终全部进入之CLOSED状态)。从而适当所占用的资源,避免资源被占用完,从而导致服务端拒绝服务的影响。

                  client:                                     server:

            ESTABLISED ------------FIN--------> ESTABLISED

            FIN_TIME1   <----------ACK---------- CLOSE_WAIT

            FIN_TIME2   <----------FIN----------- LAST_ACK

            TIME_WAIT  -----------ACK---------> CLOSED

在内核配置参数中可查看可用端口的数量:

 cat  /proc/sys/net/ipv4/ip_local_port_range 9000    65500

在可以加大如上的端口数量,这样可以改变过多的time-wait但是指标不治本(**),此方法不可取。

解决大量time-wait处理方法:

通过调整内核参数解决

vi /etc/sysctl.conf

编辑文件,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行/sbin/sysctl  -p让参数生效。

net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout修改系統默认的TIMEOUT时间

修改之后,再用命令查看TIME_WAIT连接数。

netstat -ae|grep “TIME_WAIT” |wc –l
发现大量的TIME_WAIT 已不存在,说明被占用的资源已经得到了释放。

大多时候,出现大量的TIME_WAIT状态的连接,往往是因为程序代码中没有使用colse(),才导致大量的mysql  TIME_WAIT,从而导致服务资源被占用完得不到释放,最终导致服务拒绝服务的情景。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值