TCP协议特性解析(常见问题)

目录

握手建立连接为什么是三次

挥手断开为什么是四次

握手失败时,两端的处理

TIME_WATI状态有什么用

一台主机上出现了大量的TIME_WAIT是什么原因

一台主机上出现了大量的CLOSE_WAIT的原因是什么

服务端收到相同客户端的多个SYN请求如何处理


 

TCP:面向连接、可靠、面向字节流、有状态的协议

面向连接:连接管理、状态管理、心跳保活管理

  • 连接管理:三次握手建立连接、四次挥手断开连接
  • 状态管理:两端通信的过程中状态迁移变化,无论哪一端,在特定的状态下只能干特定的事情
  • 心跳保活管理:在TCP通信中,若两端上时间没有数据往来,则每个一段时间服务端会向客户端发送心跳保活探测数据包,要求对方进行回复,若连续多次没有回复,则认为连接断开

1.握手建立连接为什么是三次

握手建立连接两次不安全,而四次没有必要,因为TCP是面向连接的,双方都要确保对方具有接收数据的能力,防止客户端发送的请求本身就是延迟的请求,在发送请求之后又退出了

四次没有必要:服务端发送的ACK与SKN没有必要分成两个包来进行发送

2.挥手断开为什么是四次

FIN表示发送方不能发送数据,可以接收数据,因此在收到FIN的被动关闭方在收到请求后进行确认回复,必须等待自己不在发送数据了才能向关闭方发送FIN,所以ACK和FIN不能在一起发送,因为被动关闭方可能在进行确认后还要发送数据

3.握手失败时,两端的处理

若第一次SYN发送失败:客户端会重新发送SYN,服务端:没有收到SYN什么都不做

若ACK + SYN丢失:客户端收不到回复就会重发SYN ,服务端收不到回复,等待超时后发送RST重置连接

若最后一次ACK丢失:客户端认为已经建立连接,服务端收不到回复,等待超时后发送RST重置连接

4.TIME_WATI状态有什么用

避免对新连接的影响

若客户端在发送最后一次ACK后关闭连接直接释放资源,然后又以相同的地址信息请求建立新的连接,而发送的ACK丢失服务端没有收到回复,则服务端在等待超时后重发发送FIN,这时候新客户端可能会收到服务端重发的FIN,服务端收到新客户端的SYN请求,但是服务端此时正在等待上一个客户端的ACK回复,收到这个SYN请求会认为类型错误

5.一台主机上出现了大量的TIME_WAIT是什么原因

TIME_WATI是主动关闭连接的一方才会出现的,当主机上出现了大量的TIME_WAIT说明主机上大量的主动关闭了连接,常见于一些爬虫客户端服务器(搭建大量的客户端于服务端建立连接获取资源)

6.一台主机上出现了大量的CLOSE_WAIT的原因是什么

CLOSE_WAIT是被动关闭方才会出现的,收到FIN请求之后回复进入的状态,等待上层确认不再发送数据了关闭连接了才会给对方发送FIN,一般出现大量的CLOSE_WAIT的原因,是因为代码中对没有断开连接的socket进行处理

7.服务端收到相同客户端的多个SYN请求如何处理

客户端在发送SYN请求后由于网络问题,服务端没有收到客户端认为丢失了因此发送了多次

服务端的处理:TCP是有状态的。第一次手之后新建socket,标记状态SYN_RCVD,则收到第二个请求认为类型不对,直接丢弃

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值