TCP如何实现可靠传输和流量控制

传输层与应用层之间的关系

  • HTTP=TCP+80

  • HTTPS=TCP+443

  • FTP= TCP+21

  • SMTP= TCP+25

  • POP3=TVP=110

  • RDP=TCP+3389

  • DNS=UDP+53 OR TCP+53

  • 共享文件夹=TCP+445

查看自己计算机侦听的服务

netstat -an

用端口区分服务。

Windows防火墙的作用:阻断内部服务向外部发送数据,从而防止木马进驻用户系统并发送数据。打个比方,比如你的电脑相当于一座城池,出去的数据相当于城池里的人,而防火墙就是看大 门的,一个人(数据包)过来了,(看大门的)防火墙问:“要去哪?”;包:“去xxx.xxx.xxx.xx:80”,然后防火墙就会说:“上头规定了去80端口的都不让过。”于是这个包就被拦住了。

TCP与UDP的传送单位

TCP传送的协议数据单元是TCP报文段(segment)

UDP传送的协议数据单元是UDP报文/用户数据报。

两者的区别

UDP在传送数据之前不需要建立连接。对方的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP是不可靠的,但是UDP在某些情况下是高效的工作方式。(QQ之间发送的消息就是使用UDP,UDP就相当于发邮件。)

TCP又称传输控制协议,面向连接。不提供广播或者多播服务,由于TCP要提供可靠的,面向连接的运输服务,因此不可以避免的增加了许多的开销。这不仅使传输单元的首部增大了许多,还要占用许多的处理机资源。TCP在工作中如果出现了丢包现象,接收端会向发送端发送消息,告诉发送端重新发送一次这个数据包。如果一次传输的数据包太大,TCP协议会将大的分成一个一个小的数据包依次传送。简单来说TCP相当于打电话,传输文件也是使用的TCP。

TCP协议概述

  • TCP是面向连接的传输协议。
  • 每一条TCP连接只能有两个端点,换句话说就是点对点通信。
  • TCP是可靠传输。
  • TCP提供全双工通信。
  • TCP是面向字节流的。

TCP协议如何实现可靠传输

可靠传输的工作原理–停止等待协议

分为两种情况:一种是无差错的情况下,一种是超时重传

首先在无差错的情况下,A向B发送M1,B确认M1完整后,在向B发送确认消息意思就是说M1我已经收到了,你发下一个数据包把;然后A又发了M2,B再次确认M2,让A继续发送下一个数据包M3,循环执行这个过程就是无差错情况下,保证TCP通信的可靠传输。

在超时重传情况下,A向B发送M1,然后M1丢包了,B没收到,当然也没有回复A,A等了一个往返时间后(其实要大于往返时间RTT)再次发送M1,比如这次B就收到了 ,那B就回复A:“已经收到M1,请发下一个数据包”,剩下的工作就和无差错基本一样了。

image-20200804182242059

确认丢失:这是一种什么情况呢?A向B发送M1,但是B向A回复的确认收到M1的消息在传输过程中丢失了;这时候,A等了一个往返时间后重传M1,B第二次收到了M1,因为之前已经有M1,所以不会接受这次传来的M1,收到后再次发送确认M1已收到的信息给A,这次如果没有发生错误,A就会收到B发送过来的确认消息,并开始发送下一个数据包。过程图如下所示:

image-20200804193757723

确认迟到:A向B发送M1,但是B向A回复确认消息时,中间由于某些原因,延迟到达了,而在这段延迟时间内,因为A没有及时收到B发来的确认消息,所以他又给B发送了M1,B因为之前已经有M1了,所以直接丢弃A重发的M1,然后B向A重新发送确认消息,这次的确认消息如果成功到达A,那么往后收到之前B第一次发送的确认消息,A会什么也不做,因为已经收到了。这个过程如图所示:

image-20200804193725023

这种可靠传输协议被称为自动重传请求ARQ

ARQ表明重传的请求时自动进行的。接收方不需要请求发送方重传某个出错的分组。

停止等待协议的优点是简单,缺点是信道利用率太低。

两张图对比 信号利用率低的原因是单个发送接收到确认才会继续发送新的数据包。

连续发送模式图,滑动窗口发送数据包。

以字节为单位的滑动窗口技术

计算机A向B发送数据包,A自身有一个发送窗口,B有一个接收窗口,A发送窗口的大小由B的接收窗口的大小决定。而B的接收窗口的大小由自身接收缓存的大小决定。这时候A向B发送字节,比如B的接收窗口大小是20,那么A的发送窗口的大小是小于等于20,A向B建立连接后,第一次发送的字节是123,3个字节,只要A没接收到B发来的确认消息,A就一直将发送窗口的字节依次发送,也就是连续发送给B,发送123后,接着又发送456,78910,这时候B收到了A发来的第一次数据123,然后B向A发送确认消息,当A接收到B的确认消息之后,A的发送窗口要向前移动,偏移量就是3,A根据B发来的确认号决定下次从哪个字节开始发送。当然如果B接收到的123整个分组已经被处理了,B的接收窗口也会向前移动,偏移量就是本次处理的字节大小。整个过程的顺序就是,A和B建立连接(其实也就是确认了发送窗口大小)–>A将发送窗口的数据连续发送–>B收到A发来的数据,向A发送确认消息,B开始处理收到的数据–>A收到确认消息,发送窗口向前移动,继续发送数据–>B处理完数据后,接收窗口也会向前移动,直到接收完整个数据包。

上面描述的过程是在不发生丢包的情况下。如果A向B发送数据的过程中出现了丢包,那该如何处理?

例如:A向B发送了123,456,789,10,B接收到了123,456,10;中间的789没有收到,也就是789在传输过程中丢失了,那么B就会向A发送一个SACK,选择性确认消息,告诉A确认号是7,并且后面的10我已经收到了,不用再发了,因此A只用再发送一次丢失的789就好了。

超时重传时间的选择

TCP每发送一个报文段,就对这个报文段设置一次计时器。只要即使前设置的重传时间到了,还没有收到对方的确认,就要重传这段报文。

新的加权平均往返时间RTTs= (1-α)×(旧的RTT)+α×(新的RTT样本)α的值RCF2988推荐是1/8.

超时重传时间应略大于加权平均往返时间RTTs。

TCP协议如何实现流量控制

TCP报文段的首部格式

首先有源端口和目标端口,这两个高端口各占2个字节,表示发送的端口和目标接收的端口。然后会有一个序号,这个序号占4个字节,每个TCP数据包前面都会有序号,这个序号表示当前数据包的第一个字节的序号。比如第一次发送了1234这四个字节,那么序号就是1,下次发送的5678序号就是5;确认号也是占4个字节,表示下次要发的数据包的第一个字节的序号。数据偏移占一个字节,表名数据包头有多少个字节。

image-20200804215513830

image-20200804213545273

TCP协议如何避免网络拥塞

网络拥塞就是指路由器在同一个线路中,传输过程中的流量太大,造成线路拥堵。资源总和大于可用的资源,发送端并不知道拥塞,还是继续保持速率发送,但是接收端来不及处理。

出现资源拥塞的条件:对资源需求的总和 > 可用资源

拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。

流量控制往往是在给定的发送端和接收端之间的点对点通信量的控制,他所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

在理想情况下,当线路中通过的流量大于最高带宽时,传输过程中的吞吐量并不会继续增长;在实际情况下,经过拥塞控制,其实还没达到最高带宽时,就会出现轻度拥塞,当大于线路的带宽时,吞吐量就不再怎么增长了;在无拥塞控制的情况下,当传输流量大于带宽时会发生死锁,吞吐量为0,也就是无法在工作了。

慢重传

image-20200805112401937

慢重传:首先A向B发送一个分组消息,如果成功接收B的确认消息;那么就改变拥塞窗口的大小,使其变成以前的2倍,如果还是成功收到了B的确认消息,说明线路没发生拥堵,然后在扩大拥塞窗口的大小使其变为原来的2倍,依次发送这些数据分组。那他会一直以指数形式增长下去吗?答案是不会的,慢开始有一个门限的初始值,只要拥塞窗口大于或等于这个值,以后的增长就不再是以指数形式增长了,而是依次+1。

当加到这条线路的最大值也就是发生了网络拥塞,拥塞窗口的值会重新变为1,然后再以指数的形式增长,达到新的门限值时,又变为以自增1的形式增大。

image-20200805120123427

快重传

例如A向B发送数据,A连续发送n次,然后B只发送一次确认消息,如果出现丢包后,比如发送的12345中,3丢失了,按照常规,B要等到A发送5结束后,才向A发送确认消息,但是他不会这么做,因为这样耗费时间,如果发现中间的一个数据包丢失,B会连续发送3次确认消息,“啊,3没了,请重传3!”,“啊,3没了,请重传3!”,“啊,3没了,请重传3!”。然后A就会重新再传一次3。

快恢复:当发生了网络拥堵,A会收到B的3个重复的确认,也就是拥塞窗口不能再增大了,这时候,拥塞窗口不再从1开始以指数形式增加,而是直接从新的门限值开始自增。这个过程被称为快恢复。

image-20200805120650583

TCP的传输连接管理

传输连接有三个阶段,建立连接、数据传送、连接释放

TCP连接的建立都是采用 客户服务器方式。

主动发起连接的应用进程是客户

被动等待连接的应用进程是服务器

猜你喜欢

转载自blog.csdn.net/qq_43672652/article/details/111173812