TCP协议
这个协议也是传输层的,相比于UDP它更安全可靠,UDP中如果存在丢包现象,就没办法解决,而TCP中引入了 超时重发
TCP数据包长度没有限制
TCP通过超时重传提供可靠性
交互数据流
客户端发送一个字节 服务器端接收后回显一个字节,为了提高这类数据的发送效率和降低网络负担TCP采用两种策略
捎带ACK
服务端收到信息后不会立马传输回去确认包,而是等自己要发送数据时 连着自己的数据捎带ACK一起发送,这个等待时间为200ms,超过了200ms,就直接发送ACK
NAGLE算法
保证TCP连接中只有一个未被确认的包在传输 ,
发送发将要发送的数据缓存起来,每次只发送一部分数据给接收方,发送方收到确认报文后才继续发送数据包,另外,Nagle算法还规定,当发送缓存中的数据已达到发送窗口大小的一半或已达到报文段的MSS值时,就立即发送一个报文段。
成块数据流
对于一些数据吞吐量要求较高的应用,总是希望每次发送尽可能多的数据到主机,对于这类应用,TCP使用滑动窗口协议,该协议允许发送方在停止发送前和等待确认前可以连续发送多个分组,因此可以加速数据的传输。
滑动窗口协议
发送方和接收方协商好了发送窗口和接收窗口的大小
发送方收到确认包中表名的窗口大小,来确定发送多大的数据包给接收方 如果接收窗口为0的大小的数据包,就停止发送数据包,发送方在没有收到确认包之前可以连续发送多个数据包,凡是发送出去的没有收到确认的包都要被保存起来,为了超时重发
另外,要注意滑动窗口的三种变化:
1、窗口合拢。窗口左边沿向右边沿靠近,这种情况发生在数据被发送后收到确认时;
2、窗口张开。窗口右边沿向右移动,说明允许发送更多的数据,这种情况发生在另一端的接收进程从TCP接收缓存中读取了已经确认的数据时;
3、窗口收缩。窗口右边沿向左移动,一般很少发生,RFC也强烈不建议这么做,因为很可能会产生一些错误,比如一些数据已经发送出去了,又要收缩窗口,不让发送这些数据。
另外,窗口的左边沿是肯定不可能左移的,如果接收到一个指示窗口左边沿向左移动的ACK,则它被认为是一个重复ACK,并被丢弃。
流量控制机制
如果B传了一个窗口值为 0 的数据包后,A就不会发送数据包了,这时如果B的接收缓存区有内存了,发给A一个允许接收的包,但是这个包丢失了,A收不到这个包,就会导致B一直在等A发,而A一直不发,死锁
引入持续计时器,也叫坚持计时器,当A收到窗口值为0时,启动定时器,定时器到期后,会向B发送一个窗口控测报文端对方收到后,会发送一个自己的接收窗口的大小值,如果仍为0 则重新启动计时器,如果不为0就打破了死锁
糊涂窗口综合证
每次只传输一个字节。这种情况会导致网络效率太低,可以让接收方等待一段时间让接收缓存变大些在接收,或者让发送方不要发送太小的数据包,而是把数据累计成足够大的报文段在发送出去