作为资深数据通信从业者,我可以回答您的问题,我可以明确的讲,TCP传输是十分可靠的,可靠到什么程度,它可以一个字节都不错而且不少的传送给对方。同时tcp传送是尽可能的使用最大带宽来传送的。
首先,介绍为什么tcp传送是可靠的
Tcp传送是依靠滑动窗口来控制传送的,使用发送报文,接收响应报文,来确定所发送的数据是否正确的到达对方。
如上图,比如报文发送的数据,依次是1、2、3、4……12。Tcp会使用一个滑动窗口(如图)控制发送的节奏。
窗口左边:已发送并ack确认的数据,比如图中,1、2、3,已经收到对方的确认,那么这些数据已经正确发送过去。
窗口大小:接收方通告
发送方只能发送窗口里面覆盖的数据,比如,已经发送了4、5、6。这些报文已经发送,但是还没有收到对方确认,所以窗口不右移。
如果收到了4的确认,那么窗口才会右移,说明4已经成功的发送到了对方。
窗口的移动,说明左边已经成功被对方接受,不会出现丢包的现象。
如果长时间收不到对方确认(一般对方三个报文确认请求都不是4,比如都是5),就会重发报文4,
那么tcp怎么尽可能使用最大带宽呢?
首先窗口大小,也就是对方能接受多少数据,如果窗口范围内,比如上图4、5、6、7、8、9,这些报文在窗口内,发送方尽可能发送,也就是尽可能使用带宽。
在窗口允许发送的范围内,比如,允许发送4——9的数据,Tcp不是一下突发这6个报文,它会根据指数退避算法,试探性的增加发送速率,
比如,第一次发送1个,没丢包,说明网络带宽可以,第二次发送2个,还没丢包,第三次发送4个,这样指数递增。
这种发送方法,避免一次突发很多数据,造成网络拥塞而丢包,当没有丢包情况下,发送数量会指数递增,增加发送报文数量,尽可能的使用现有网络带宽,直到增加到对方发送窗口限制。
传输层使用的两个主要协议:TCP和UDP。TCP面向连接,提供有序可靠的传输;Udp无连接,提供无序不可靠的传输。TCP用三次握手和滑动窗口机制来保证传输的可靠性和进行流量控制。第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(SequenceNumber)字段里。第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(AcknowledgementNumber)设置为客户的ISN加1以.即X+1。第三次握手.客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1