【网络】tcp

本文详细解释了TCP协议中的三次握手、四次挥手过程,探讨了TIME_WAIT和CLOSE_WAIT的区别,以及如何保证数据传输的可靠性。同时,讨论了服务器TCP连接数的理论上限和实际优化策略。
摘要由CSDN通过智能技术生成

1、三次握手四次挥手

      

(1)为什么挥手比握手多一次

TCP的握手过程主要是为了建立连接,确认双方身份和可用性,确保双方都正确地接收到了对方的请求。这一过程只需要三次即可完成。

在挥手过程中,通信的双方不仅需要确认连接的断开,还需要确保各自的数据已经全部传输完毕

所以在server发送ACK后,需要等待client的close()信号,表示对方已经确定没有数据传输了,再发送FIN信号。

(2)TIME_WAIT和CLOSE_WAIT有什么区别

TIME_WAIT:
  • client端在接收到server的FIN并返回ACK后的状态
  • 防止最后一个ACK丢失:client需要等待2MSL( 即两倍的报文段最大生存时间)以确保最后一个ACK被server接收
CLOSE_WAIT:
  • server端在收到client的FIN后并返回ACK后的状态
  • 然后server会等待client的close()操作
  • server收到close()后会将状态置为LAST_ACK

(3)线上大量的close_waittime_wait该如何解决?

close_wait原因:
  • 客户端没有调用close()关闭连接
time_wait原因:
  • 连接超时导致自动断开——用长连接
  • 并发大量短连接——用连接池
解决:
  • 检查应用程序代码:
    • 确保正确发送了关闭信号(如 TCP 的 FIN 包)。
    • 避免在短时间频繁地打开和关闭连接
    • 检查是否有资源泄漏或其他导致连接无法正确关闭的问题
  • 调整系统参数:
    • 增大系统的文件描述符限制( ulimit -n ),以适应更多的并发连接。
    • 调整 TCP 参数, tcp_fin_timeout (控制 TIME_WAIT 状态的持续时间)和  tcp_keepalive_time (控制连接保活探测的频率)
    • 考虑增加系统的连接队列长度(如  net.core.somaxconn ),以防止连接因队列溢出而被拒绝。
  • 使用连接池:
    • 减少频繁地创建和关闭连接的开销,降低 CLOSE_WAIT TIME_WAIT 状态的数量。
    • 复用已经建立的连接,提高系统的性能。
  • 检查网络设备和配置
  • 使用工具进行诊断
  • 优化应用程序逻辑:
    • 使用长连接代替短连接,减少连接的建立和关闭次数
    • 使用异步 I/O 或非阻塞 I/O 来处理网络连接,提高并发处理能力

2、tcp如何保证数据的可靠性

  • 校验和:对 数据段进行校验和计算。发送方在发送数据之前计算校验和,并填充在数据段中。接收方收到数据后,会对数据进行同样的校验和计算,并与发送方的校验和进行比对。如果两者不一致,则说明数据传输有误,接收方会要求发送方重新发送数据。
  • 超时重传:如果发送方在一定时间内没有收到对于某个数据段的确认应答,它会认为该数据段已丢失或损坏,并触发超时重传机制。发送方会重新发送该数据段,直到收到确认应答或达到最大重传次数。
  • 连接管理: TCP 通过三次握手建立连接,并在数据传输完成后通过四次挥手断开连接。这确保了双方都已准备好进行数据交换,并在结束时正常关闭连接。
  • 流量控制: TCP 使用滑动窗口协议来控制发送方和接收方之间的数据流量。接收方会在 ACK 中告诉发送方其当前可用的缓冲区大小,发送方则根据这个信息来调整发送速率,避免发送过多的数据导致接收方无法及时处理。
  • 拥塞控制: TCP 通过拥塞控制机制来避免网络拥塞。它动态地调整发送速率,以适应网络的拥塞程度。当网络拥塞时,发送方会降低发送速率,以减少数据包的丢失和重传,从而提高网络的稳定性和可靠性。
  • 序列号和确认应答: TCP 为每个数据段分配一个唯一的序列号,接收方在收到数据后,会向发送方发送一个包含接收到的数据段序列号的确认应答( ACK )。发送方会等待这些 ACK ,以确认数据是否成功传输。如果发送方没有收到确认应答,或者序列号不连续,它会重新发送丢失或损坏的数据段。

3、一台服务器最多可以建立多少个TCP连接

源端口的可用范围是0~65535,所以理论上,一台服务器可以建立的TCP连接数至少可以达到65536个。
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值