tcp连接断开的一些面试常识
2016-02-28 20:51
465 查看
在三次握手阶段,主动连接方式依次经历: SYN_SENT ESTABLISHED状态,被动连接依次经历:SYN_RECEIVED ESTABLISHED状态,主动连接放发送同步SYN报文后会进入STNC_SENT状态,被动连接方收到SYN报文后会发送SYN和 ACK报文并进入SYN_RECEIVED状态,等主动连接方收到这个SYNACK确认报文后会再次返回一个 ACK报文,使得双方建立起连接,这里面有一些面试中基本的问题
1.为什么需要第三次握手?
如果两次握手,若有延时的SYN报文到达被动连接方后,被动连接方返回一个 SYNACK给主动连接方,但是主动连接方已经跟和被动连接端连接了,所以主动连接方会丢弃这个包,但是对于被动连接方来说,会保持这个连接(若只有两次握手,发送SYNACK后会立即进入ESTABLISHED状态),相当于浪费服务器的连接资源!
在断开连接的四次挥手中,主动断开方依次经历:FIN_WAIT1 FIN_WAIT2 WAIT_OUT CLOSE状态,被动断开方依次经历:CLOSE_WAIT LASC_ACK CLOSED状态,主动段开方断开时向被动断开方发送FIN报文并进入FIN_WAIT1状态,被动断开方收到FIN报文后回复ACK并进入CLOSE_WAIT状态,被动断开方再发送FIN给主动段开方并进入LAST_ACK状态,主动段开方收到FIN后发送最后的ACK并进入TIME_WAIT状态,被动断开方收到最后的
ACK报文后进入CLOSED状态
1.TIME_WAIT状态存在的意义
网络是不可靠的,无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文,客户端发送的ACK在网路上丢失,这样服务器端收不到最后的ACK,重传定时器超时,将重传FIN到客户端,由于客户端关于该连接的所有资源都释放,收到重传的FIN后,它没有关于这个FIN的任何信息,所以向服务器端发送一个RST报文端,服务器端收到RST后,认为搞连接出现了异常(而非正常关闭)
1.为什么需要第三次握手?
如果两次握手,若有延时的SYN报文到达被动连接方后,被动连接方返回一个 SYNACK给主动连接方,但是主动连接方已经跟和被动连接端连接了,所以主动连接方会丢弃这个包,但是对于被动连接方来说,会保持这个连接(若只有两次握手,发送SYNACK后会立即进入ESTABLISHED状态),相当于浪费服务器的连接资源!
在断开连接的四次挥手中,主动断开方依次经历:FIN_WAIT1 FIN_WAIT2 WAIT_OUT CLOSE状态,被动断开方依次经历:CLOSE_WAIT LASC_ACK CLOSED状态,主动段开方断开时向被动断开方发送FIN报文并进入FIN_WAIT1状态,被动断开方收到FIN报文后回复ACK并进入CLOSE_WAIT状态,被动断开方再发送FIN给主动段开方并进入LAST_ACK状态,主动段开方收到FIN后发送最后的ACK并进入TIME_WAIT状态,被动断开方收到最后的
ACK报文后进入CLOSED状态
1.TIME_WAIT状态存在的意义
网络是不可靠的,无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文,客户端发送的ACK在网路上丢失,这样服务器端收不到最后的ACK,重传定时器超时,将重传FIN到客户端,由于客户端关于该连接的所有资源都释放,收到重传的FIN后,它没有关于这个FIN的任何信息,所以向服务器端发送一个RST报文端,服务器端收到RST后,认为搞连接出现了异常(而非正常关闭)
相关文章推荐
- QML 开发神秘加成之为网络资源设置本地缓存
- iOS应用与HTTP服务器进行HTTP通信时会用到的API
- android学习笔记 之 HttpUrlconnection的使用
- 【bzoj3698】XWW的难题 有上下界的网络流
- 【C/C++学院】0905-boostSocketTCPUDP/虚函数表的调用/复杂表达式
- Tcpdump 的简单用法
- Linux网络编程:原始套接字的魔力【续】
- Linux网络编程:原始套接字的魔力【下】
- Linux网络编程:原始套接字的魔力【上】
- 计算机网络20--Socket编程
- 传输层中的协议 TCP & UDP
- 网络流(最大费用最大流) :POJ 3680 Intervals
- TCP/IP协议详解:卷一----笔记(3)IP:网际协议
- 虚拟机网络设置(四种方式)
- Linux centos PXE无人值守安装 DHCP+TFTP+HTTPD+Kickstart
- TCP/IP协议三次握手与四次握手流程解析
- http server原理,nginx与php之间是如何工作的
- Spring中HttpInvoker远程方法例子
- 007_Http之常用编码
- 【UNIX网络编程(二)】基本TCP套接字编程函数