TCP协议初步理解(一)

TCP作为传输控制协议,控制着传输层。为了保证数据可靠传递,主要有两种方法保证数据传输可靠性。

  • 差错校正码(添加一些冗余的数据,即使某些数据被毁也能恢复过来)
  • 尝试重新发送(Automatic Repeat Request)

重新发送也能处理超差问题,所以重试是很多通讯协议的基础,包括了TCP。
既然有重试,那发送方必须知道什么时候停止重试,也就是说需要接受者的响应,一般称之为ACK。这里又会牵扯到新的问题。

  • 等待ACK的时间应该是多少合适?也就是Timeout时间
  • 如果ACK丢了怎么办?
  • 如果接收方接受到数据,发现数据被篡改了怎么办?

第一个问题比较麻烦,timeout的定义最好比正常响应时间多一点点,这就涉及到了根据响应时间,动态的改变timeout。

第二个问题很简单,发送方会timeout,然后重发即可。

第三个问题需要接收方校验数据的正确性(具体如何计算,发送方和接收方统一一套计算规则即可),一旦发现数据不正确,不需要发送ACK包,发送者等待一段时间后会再次发送。

通过上面的分析,发现接收者可能会接到多个相同的数据包,这时候需要把多余的数据包丢弃不处理(微服务某些接口要求幂等性),这时候需要一个唯一的ID来标识某个请求包,当发送方重发时用的是同一个ID,接收者相同的ID只会处理一次。

TCP为了提高吞吐量,一次能发送多个请求包,这时候接收到ACK包就会是杂乱无序的,每个请求还要维持一个超时计时器,需要保存还没接收到ACK包的请求包副本,已备重发。接收方也需要更复杂的ACK机制和更复杂的缓存机制(需要维护次序杂乱的分组,用来重新组合),还有一些问题,比如接收方接收消息速率比发送方发送消息速率慢怎么办?接受方消化不能的数据只能丢弃,然后发送方又需要重发。这些种种的问题留到下一期讲吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值