TCP详细过程

Tcp怎么保证可靠性

####(1)、序列号、确认应答、超时重传
数据达到接收方,接受方会发送一个确认应答序列,确认应答序列说明发送方下一次需要接受的序列号。如果接收方迟迟为收到确认应答,那么可能是发送方数据丢失或者确认应答序列丢失,在经过一段时间差后,发送方会进行此数据段的重传。这个时间差一般是2*RTT(报文往返时间)+ 一个时间差。
####(2)、窗口控制与高速重发控制(重复确认应答)
TCP会利用窗口控制来提高传输速度,意思是在一个串窗口大小内,不用一定等到确认应答才能发送下一段数据。窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。
传送门:博客-TCP华东窗口控制流量大小

(3)、拥塞控制

如果吧窗口定义的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至造成网络的瘫痪。所以TCP为了防止这种情况进行拥塞控制。

  1. 慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个RTT),将拥塞窗口大小*2。
  2. 拥塞避免:设置慢启动阈值,一般开始设置为65536。拥塞避免是当拥塞窗口大小达到这个阈值,拥塞窗口的值不在指数上升,而是加法增加。将报文段的超市重传看作拥塞,则一旦发生拥塞,先将阈值设为当前窗口大小的一般,并且将窗口大小设为1,再次进入慢启动过程。
  3. 快速重传:在遇到3此重复应答时,代表收到3个报文段,但是之前的1个段丢失了便对它进行立即重传。然后先将阈值设为当前窗口大小的一般,然后将拥塞窗口大小设为慢启动阈值+3的大小。
    这样:在TCP通信是,网络吞吐量呈现逐渐的上升,并且随着拥堵来减低吞吐量,再进入慢慢上升的过程,网络不会轻易发生瘫痪。

TCP建立连接和断开连接的过程

TCP断开与连接

三次握手
  1. Clinet将标志位SYN置为1,随机产生一个值seq=x,并将该数据报发送值Server,Clinent进入SYN_SENT状态,等待Server确认。
  2. Server收到数据包后,后标志位SYN=1知道Client请求建立连接,Server将SYN和ACK都置为1,ACK=x+1,随机产生一个seq=y,并将该数据包发送给Client确认请求连接,Server进入SYN_REVD状态。
  3. Client收到确认后,检查ACK是否为x+1,SYN是否为1,如果确认,ACK=y+1,并将该数据包发送到Server,Server检查ACK是否是y+1,SYN是否为1。如果正确,则成建里连接。Client和Server都进入ESTABLISHED状态,完成三次握手,随后Client和Server之间就可以传输数据了。

    为了实现可靠数据传输,TCP协议的通讯双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即使通信双方相互告知序列号的起始值,并确认对方已经收到了词序列号起始值的必经步骤。<\b>
    如果知识两次握手,至多只能知道起始序列号收到并被确认,另一方选择的序列号则得不到确认。
四次挥手

由于TCP链接是全双工的,因此,每个方向都必须单独进行关闭,这一原则是当乙方完成数据发送任务后,发送一个FIN来终止这一方向上的连接,收到一个FIN只是意味着这一方向上没有数据流动了,既不会在收到数据,但是这个TCP连接上任然能够发送数据,知道这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

  1. 数据传输结束后,客户端的应用发出连接释放把文段,并停止发送数据,客户端进入FIN_WAIT_1状态,此时客户端依然可以接受服务器发送来的数据。
  2. 服务器接收到FIN后,发送一个ACK给客户端,确认序列号+1,服务器进入CLOSE_WAIT状态。客户端收到后进入FIN_WAIT_2状态。
  3. 当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,等待客户端的确认。
  4. 客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号收到的序列号+1。此时客户端进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值