TCP协议

TCP 可靠传输:
数据编号与累积确认,确认号表示下次期望收到的数据中第一个数据字节序号,延迟确认机制,捎带确认。给每一个报文段设置定时器,超时重传。
以字节为单位的滑动窗口协议。发送窗口大小是不断变化的,初始值在建立连接时双方商定,在通信工程中,TCP 的流量控制和拥塞控制会根据情况动态调整发送窗口上限值。

TIME_WAIT 状态:
客户端在接收到服务器的FIN 消息后,发送ACK消息后,从FIN_WAIT2进入TIME_WAIT ,等待2个数据段存活时长后再进入CLOSED 状态。

为什么需要等待2个数据段最大存活时长:
1、防止延迟的数据段被其他使用相同源地址、源端口、目的地址以及目的端口的TCP 连接收到。
2、保证tcp连接的远程被正确关闭,就是等待被动关闭连接的一方收到FIN 对应的ACK 消息。
如果不等待2MSL ,直接进入closed状态,如果最后的ACK 消息丢失,那么服务端会超时重发FIN消息,直到收到确认。2MSL 也是由此而来,客户端➡服务端(1MSL ),超时重传服务端➡客户端(发送FIN ,1MSL )。
同时,如果客户端不等待2MSL ,直接进入closed状态,当客户端下次重新发送SYN 消息请求握手时,会收到服务端的RST 消息,连接建立的过程就会终止。
在高并发情况下可能会产生大量TIME_WAIT 状态的连接,可以试着配置MSL的时长。

三次握手的原因:
1、历史连接(主要原因)
如果通信次数只有两次,那么发送方一旦发出建立连接请求之后,它就没有办法撤回这一请求。在网络不好的情况下,发送方发送多次建立连接请求,那么接受方知能接受或者拒绝,接收方不知道是过期的连接请求还是新的连接请求。
如果通信次数是三次,并引入RST 这一控制消息,发送方收到接受方的ack时,判断当前连接是否为历史连接。
如果是历史连接,那么发送方就可以直接发送RST 控制消息终止这一次连接。
2、初识序列号
客户端告诉服务端自己的初识序列号,服务端发送ack并携带自己的初识序列号,客户端在对服务端的消息发送ack。

为什么不两次握手或者四次握手:
两次握手:无法避免历史错误连接的初始化,浪费接受方资源。
四次握手:TCP 协议的设计可以让我们同时传递ACK 和 SYN 两个控制信息,减少了通信次数,所以不需要使用更多的通信次数传输相同的信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dlian丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值