面试
思考了很久 在面临新的一份工作时,第一门槛就是面试,作为一个即将面试的新人,内心充满了一些迷茫,感觉自己学的东西好像又是懵懵懂懂,一想到面试挂官会问到的问题,内心当中少许有些咯噔.....我想跟我有同样的感触的人应该有吧。即日起,开始分享一些网络面试的一些问题,对于答案不能确保百分百准确,我只能尽力将我的萌新能想到的和搜集后总结出的一些想法分享给大家。希望大家多多指导!
面试官:来吧,简单的讲述一下TCP连接的三次握手和四次分手?
萌新:
TCP的三次握手为
第一次握手 客户端A向服务器端B发送请求连接报文SYN,A进入SYN_SENT状态。
第二次呢,B收到A的收到syn包,必须确认A的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时B进入SYN_RECV状态。
第三次,A收到了B的SYN以及ACK,这个时候A需要回复一个ACK给B,至此包发送完毕,A和B进入ESTABLISHED(TCP连接成功)状态,完成三次握手。(A与B在了一起...hahaha....)
对于分手 这个话题比较沉重,现实中闹分手第三方的朋友们可能是最难受的,这不计算机的机制也是一样,慎重啊!!!。
第一次分手》客户端A向服务器B发送FIN包 ,请求关闭客户端到服务器数据传送。
第二次分手》B收到A给FIN包,(抽支烟叹口气,行吧)转手给回复一个ACK,并将确认序号为收到的序号加1
第三次分手》服务器B给客户端A发送一个FIN,请求关闭服务器到客户端的数据传送。
第四次分手》A发回ACK报文确认,并将确认序号设置为收到序号加1。
面试官:为啥握手三次而分手四次
萌新:(两个人在一起很快吧,可能就一个眼神,分手那可不分分家产神么的,有那么轻松分,额..呸..渣男)
由于TCP连接是全双工的,这就意味着每个方向都必须单独进行关闭。原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。