TCP协议选项详解

TCP协议选项详解

TCP头部的选项部分是为了TCP适应复杂的网络环境和更好地为应用层服务而进行设计的。

SO_REUSEADDR

通常一个端口释放后会等待两分钟(TIME_WAIT时间)之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。

SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。在TCP连接中,主动关闭方会进入TIME_WAIT状态,因此这个功能也就是主动方收到被动方发送的FIN后,发送ACK后就可以断开连接,不再去处理该ACK丢失等情况。

也就是说,这个套接字选项向内核传达了该消息:如果这个端口被占用但是TCP状态位于 TIME_WAIT ,则可以重用端口。而如果端口忙,而TCP状态位于其他状态,那么重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果想要让服务程序停止后就可以立即重用,并且使用的端口还是这个端口,那么设置SO_REUSEADDR 选项将非常有必要。总体来说,对于需要维持大量TCP连接的服务器可以设置这个选项,因为可能会存在大量的TIME_WAIT状态(尤其是HTTP服务通常是服务器充当主动断开一方),设置该选项就很有必要,毕竟最糟糕的情况下基本是客户端的断开慢一些,影响也不是非常大(客户机通常不需要大量的TCP连接需要)

SO_REUSEPORT则与之类似,主要是该选项允许TCP完全重复绑定,只要这些socket都开启了SO_REUSEPORT即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值