-
应用数据被分割成TCP认为最合适发送的数据块;
-
超时重传;当tcp发送一个数据块后,会开启定时器,如果在一段时间内没有收到接收方的确认,那么就会重新发送;
-
校验和:tcp会保持首部和数据的校验和,检测数据在传输过程中是否发送变化;(出现差错进行丢弃)
-
TCP接收端会丢弃重复的数据;
-
乱序重排;IP数据报发送可能会乱序,TCP会对失序的数据进行排序然后交给应用层;
-
流量控制;
TCP通过滑动窗口实现流量控制;控制发送方发送速率,保证接收方来得及接收;
滑动窗口的大小是动态调整的,发送方窗口分为四个部分,已发送并且确认的数据,已发送未确认的数据,剩余将发送的数据,不能发送的数据,23组成发送窗口;发送方可以连续发送滑动窗口大小的数据,只有接收方确认后(最开始发送的数据),发送方的滑动窗口左边界才会移动;通过接收方返回的ACK来确定发送方发送数据大小是要小于等于接收方能够接收数据的最大值的,也就是接收方需要足够的缓冲区来确认数据;
接收方窗口分为3个部分,已接收并确认的数据,允许接收的数据,不允许接收的数据,2就是接收窗口;接收窗口只有接收到数据并且确认前面的所有数据才会进行移动,如果前面数据没有完全收到,即使收到后面的数据,窗口也不会移动,等到发送方超时重传前面的数据;接收方通过接收窗口的大小来实现对发送窗口的控制,来达到TCP的流量控制;
-
拥塞控制;
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络就会进入拥塞;为了防止网络进行拥塞,TCP对网络拥塞情况也有了一定的处理;
慢开始:初始化拥塞窗口cwnd=1,设置慢开始门限ssthresh=xx;每次发送报文然后返回确认说明网络没有发生拥塞,cwnd*2翻倍增长(指数),cwnd动态变化,每次发送报文大小即拥塞窗口大小,直到cwnd达到ssthresh,开始执行拥塞避免算法;
拥塞避免:此时cwnd=ssthresh,之后的cwnd每次发送报文成功返回后进行+1增长;直到发生超时重传,开始执行快重传和快恢复算法或者回到慢开始(cwnd=1);
快重传:由于此时拥塞避免发生了超时重传,但是网络不一定出现了拥塞,快重传使用冗余ACK来检查丢包的发生,快重传就是让发送方尽可能快的重传丢失的报文段;当发送方连续收到三次重复的ACK报文时,直接重传丢失的报文段,而不必等待超时才对该报文段进行重传,也就不会误认为出现了网络拥塞(将拥塞窗口cwnd变为1),提高网络吞吐量;
快恢复:当发送方连续收到三次重复的ACK报文时,此时可能发送了网络拥塞导致丢包,将现在的ssthresh除2,再把除2后的ssthresh设置为cwnd,执行慢开始算法;
-
ARQ协议;发送完一个分组就停止发送,等待对方确认收到,再开始下一个分组;
- 停止等待ARQ(发送窗口=1;接收窗口=1;):每次发送完都去等待接收方确认,如果确认了就继续发送;没确认就重新发送;
- 回退n帧ARQ(发送窗口=1;接收窗口>1;):双方各自维护一个多帧滑动窗口,不必等待接收方的确认,每次可以连续发送多个报文段;如果发送的报文段中接收方没有完全收到,接收方返回确认,发送方需要重发没有从接收到的直至最后报文段;
- 选择重传ARQ(发送窗口>1;接收窗口>1;):双方各自维护一个多帧滑动窗口,不用等待接收方的确认可以连续发送报文段;如果发送的报文段中有没有全部收到,那么将返回确认,需要单独重发未收到的报文段;
TCP可靠传输如何保证?
最新推荐文章于 2024-03-02 12:03:27 发布