【计算机网络基础】-- TCP(传输控制协议)

          【计算机网络基础】-- TCP(传输控制协议)

 

大家好,我是Lampard~~

欢迎来到计算机网络基础系列的博客

我们知道tcp是一种面向连接的、可靠的、基于字节流的传输层通信协议。这里我们需要讨论的就分为了两点,一种是如何实现面向连接,第二是如何保证可靠性。

 

面向连接:三次挥手,四次挥手

TCP是因特网中的传输层协议,使用三次握手协议建立连接。TCP三次握手的过程如下:

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

举个现实的栗子:

小乌龟去买番茄:老板在吗(向往服务器发送syn请求连接)?

老板:在啊,买东西吗(先回复之前的问题ack,然后再进行确认syn)?

小乌龟:是的啊(对服务端的syn进行再次确认)

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

当连接终止时,需要进行四次挥手

  1. 客户端发送FIN(FIN = X传输结束)报文给服务器端。

  2. 服务器端收到FIN报文,回应一个ACK(ACK=x+1)报文,然后继续传输数据

  3. 服务端传输完数据紧接着发送FIN报文给客户端,告知自己也传完了

  4. 客户端收到后回复ACK,表示正式结束连接

当我们了解到三次握手和四次挥手的实现机制时,就会情不自禁的冒出两个问题:

1.为什么要进行三次握手

2.为什么三次握手连接,而断开连接的时候却要四次呢?

首先我们解释为什么需要三次握手,就不能够我跟你说我要连接,你返回收收到了之后就进行传输吗?如果说理想状态下确实问什么问题,但是如果因为网络等原因,我向你请求连接的包延迟到达,我等不到你的回信,以为丢包了,过段时间后又重发了一个。这时相当于发了两个,如果不进行第三次确认的话,服务端收到我们迟到的包的时候,将会以为你想要和它通信,这就出现错误了,所以三次握手防止重复连接

至于为什么连接只需要三步,而取消连接需要四步。其实我们观察图片就会知道,差异在于服务端在收到连接信号的时候,它可以同时发送两个信号:我已经了解请求,是否确认连接?但是结束的时候,虽然收到了客户端的结束请求,但是你传完了,我还没回复完啊,如果你请求一大堆信息我是不是该分报文传给你?所以就有了异步等到传完所有信息后再回复我也传完了,请求结束连接的FIN

 

可靠性:建立连接,自纠错,拥塞控制和报文重传的机制

我们知道tcp是可靠的,那么它可靠的地方怎么体现呢?

建立连接:通过三次握手建立连接本身就是一个保证数据传输可靠的措施

自纠错:tcp会通过校验和的方式进行自纠错

超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

拥塞控制:为了避免过多的数据注入网络,导致链路过载,会通过慢开始,拥塞避免,快重传和快恢复方式进行拥塞避免

(1)慢启动

每当建立一个TCP连接时或一个TCP连接发生超时重传后,该连接便进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个报文段,即:cwnd=1。此后,每收到一个报文段的确认(ACK),cwnd值加倍,即拥塞窗口按指数增加。当cwnd值超过慢启动阐值(ssthresh)或发生报文段丢失重传时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。

(2)拥塞避免

在慢启阶段,当cwnd值超过慢启动阐值(ssthresh)后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每一次发送的cwnd个报文段被完全确认后,才将cwnd值加1。在此阶段,cwnd值线性增加。

(3)快速重传

快速重传是对超时重传的改进。当源端收到对同一个报文的三个重复确认时,就确定一个报文段已经丢失,因此立刻重传丢失的报文段,而不必等到重传定时器(RTO)超时。以此减少不必要的等待时间。

(4)快速恢复

快速恢复是对丢失恢复机制的改进。在快速重传之后,不经过慢启动过程而直接进入拥塞避免阶段。每当快速重传后,置ssthresh=cwnd/2、ewnd=ssthresh+3。此后,每收到一个重复确认,将cwnd值加1,直至收到对丢失报文段和其后若干报文段的累积确认后,置cwnd=ssthresh,进入拥塞避免阶段。

 

好,今天的分享就到这里,祝各位功力渐长平步青云,谢谢大家~~

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值