TCP协议

1.概述:TCP协议是OSI七层协议中传输层的协议,以报文段的形式传输数据,是面向连接的,一对一的可靠性协议。

2.OSI七层模型

OSI七层网络模型是ISO组织定义的一个计算机互联的标准分层模型,目的就是为了简化网络各层的操作,提供标准接口便于实现和维护,从上之下依次为:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层

 在实际应用中,我们使用的是TCP/IP四层模型,它简化了OSI七层模型,将应用层,表示层,会话层合并成了应用层,数据链路层物理层合并成了网络接口层

3.TCP协议的三次握手(创建连接)

在TCP报文段的首部中存在6位控制位,其中SYN=1表示该报文是请求连接,ACK=1表示该报文为确认响应报文,FIN=1表示为主动释放连接的报文。 TCP创建连接的过程如下图所示:

        第一次握手:由客户端向服务器发送首部格式为SYN=1,ACK=0的连接请求, SYN=1表示该请求是创建连接的请求。

        第二次握手:服务器收到客户端的请求连接后,向客户端发送ACK=1,SYN=1的确认请求,其中ACK=1表示服务器确认收到客户端的请求连接,SYN=1表示进行连接。

        第三次握手:客户端收到服务器的确认请求后,再次向服务器发送ACK=1,SYN=0的确认请求,ACK=1表示客户端收到服务器的确认请求。

        至此,TCP的连接正式创建。

        TCP连接采用三次握手的原因:

                (1)采用三次握手可以生成一个可靠的序列号,保证可靠性传输。

                (2)如果采用二次握手,当第一次连接请求发送后,由于网络等原因,客户端迟迟没有收到服务器的确认请求,由于TCP的重发机制,客户端会发送第二次连接请求,然后服务器对第二次连接请求进行确认后,当第一次连接请求到达服务器时,服务器以为客户端进行重新连接,向客户端再次发送确认请求,客户端此时不会处理服务器第二次的确认请求,则服务器会一直等待着客户端的回复,造成服务器的无效等待,如果频繁发送连接请求,可能会造成服务器停止响应。所以,三次握手可以防止重复连接,避免服务器停止响应。

                (3)TCP协议也可以通过四次握手,五次握手来进行创建连接,但3次握手时最节省资源的。 

4.四次挥手(释放连接): 

        第一次挥手:有客户端向服务器发送首部格式为FIN=1,ACK=0的释放连接请求。FIN=1表示该请求为释放连接的请求。

        第二次挥手:服务器收到客户端的释放连接的请求后,服务器向客户端发送FIN=0,ACK=1的确认请求,表示服务器收到了客户端释放连接的请求,但可能服务器向客户端需要发送的数据还没有发送完,所以,此时服务器处于半关闭状态,客户端不能向服务器发送数据,但服务器可以向客户端发送数据。

        第三次挥手:服务器向客户端发送完数据后,向客户端发送首部格式为FIN=1,ACK=1的释放连接的请求,FIN=1表示这是释放连接的请求,ACK=1表示服务器向客户端把数据发送完了。

        第四次挥手:客户端收到服务器释放连接的请求后,向服务器发送首部格式为ACK=1的确认请求,表示客户端确认收到服务器释放连接的请求,此时,TCP的连接就全部释放了。

5.TCP流量控制:

流量控制是防止发送方的发送频率过快,导致接收方无法接受发送过来的数据,导致数据丢失。

在TCP协议中,使用滑动窗口机制实现流量控制,大致流程如下图所示:

 

在TCP协议的发送方和接收方都会维护一个各自的缓冲区, 这个缓冲区就是窗口,接收方的窗口决定了发送方可以发送多少数据,假设接受方的窗口大小为200,发送方的窗口大小也为200,如上图所示:

       RCV.NXT代表接收方窗口的起始位置,SND.NXT代表发送方窗口(可用窗口)的起始位置,SND.UNA代表发送方窗口的起始位置。可用窗口是发送窗口的一部分,代表下次开始发送的位置

        1.在发送数据之前,RCV.NXT和SND.NXT都指向241,此时,发送方可用窗口和接收方的窗口大小都是200,当发送方向接收方发送80个字节数据时,SND.NXT向前移动80个字节,SND.UNA不动,发送方的可用窗口大小为120,接受方收到数据后,RCV.NXT向前移动80个字节,然后向发送方发送确认报文。

        2.接着发送方继续向接受方发送120个字节数据,SND.NXT向前移动120个字节,SND.UNA不动,发送方的可用窗口大小为0,接受方收到数据后,RCV.NXT向前移动120个字节,然后向发送方发送确认报文。

        3.由于向接收方发送数据后没有收到接收方的确认报文,SND.UNA不会向前移动,可用窗口大小为0,不能发送数据。当收到接收方的确认报文后,说明接受方已成功收到前2次发送的200个字节的数据,SND.UNA向前移动200个字节,可用窗口大小为200个字节,可以继续发送数据。 

滑动窗口就是根据接收方窗口的大小来决定发送方发送的频率,当发送方没有收到接收方的确认报文时且可用窗口为0时,说明此时接受方不能接受数据,发送方会停止发送,直到收到接受方的确认报文后,表示接受方已经成功收到了之前发送的数据,可以继续发送数据了。

6.TCP的拥塞控制

拥塞控制是避免整个网络中由于存在多个数据包而造成了拥塞,拥塞控制主要由四个算法:慢开始,拥塞避免,拥塞发生,以及快恢复。拥塞窗口cwnd表示一次性发送多少个数据报文。

慢开始:当刚开始发送数据包时,不会一下就发送8个数据报文,而是从1开始呈指数增长,当达到设置的慢开始门限值时,就会进入拥塞避免阶段。

拥塞避免:此时,拥塞还没有发送,为了避免拥塞的发生,cwnd开始呈线性增长,减缓增长速度。

拥塞发生:拥塞避免只是减缓了cwnd的大小,但拥塞还是会发生的,当拥塞发生时,根据重传机制的不同会进入到不同的阶段,如果采用的是超时重传,说明此时拥塞非常严重,会先将慢开始门限值设为当前cwnd的一半,然后将cwnd设为1,重新从慢开始阶段开始。如果采用快速重传,会先将慢开始门限值和cwnd设为当前cwnd的一半,然后进入快恢复阶段。

快恢复:快恢复阶段会先将cwnd的值+3,重传丢失的数据包,每当收到重复的确认报文时,cwnd的值会加1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值