likes
comments
collection
share

TCP协议解析

作者站长头像
站长
· 阅读数 64

TCP协议概述

TCP连接的建立和断开

三次握手

  • 首先三次握手建立连接发送的数据包是三层的(凡是在网络上跑的数据包都是完整的,可以有下层没上层--比如tcp的三次握手包,只有三层(数据链路层,网络层、传输层),但是一定不会有上层没下层),下面是一个完整的数据包

TCP协议解析

  • TCP头格式

TCP协议解析

  • 三次握手的图片

TCP协议解析

SYN=1表示建立连接,ACK=1表示数据包有效,ack表示确认包的序号

握手为什么不是2次?为什么不是4次

  • 先总结说:三次握手有两个作用:1.通过保证双方发送的消息都有去有回,双方才能确认确认连接建立好了(B发送的应答消息可能会发送多次,只要有一次到达A,A就认为连接已经建立了,因为对于A来说,它的消息有去有回。A会给B发送应答之应答,B收到这个消息,才能确认连接的建立)。2.沟通数据包的序列号,A要告诉B它发送的包序号是啥,B也要告诉A它发送的包序号是啥,这个包的序号也是TCP保证可靠性的一个机制
  • 假设使用2次握手,这个通路不可靠,A(客户端)发起了一个请求,B收到了请求包,知道A要和它建立连接。如果B乐意建立连接,则会发送应答包给A
  • B的应答包到了网络中是不确定能不能到达A。此时B并不能确认连接建立好了,因为这个应答包可能是丢了,或者超时,或者A这边挂了,所以两次握手肯定不行,需要再来一次握手,A对B的应答进行回复,B才能确认连接建立好了
  • 还有一个可能出现的现象就是,A请求建立连接的时候,没有收到B的回复,请求包会重复发了几次,可能有的请求包绕了一圈之后又回来了,B会认为这也是一个正常的请求,就直接建立了连接,这个连接是没有用的。
  • 四次握手并不能增加信息的可靠性了,所以没有必要进行四次握手

四次挥手

  • 先看状态图

TCP协议解析

  • 为什么要有一个等待2MSL的阶段

    • B也说断开连接之后,即第三次挥手,如果此时A发送完给B的应答之后直接断开连接了,如果发给B的ACK没收到呢,B会重新发送断开连接的请求(FIN,ACK),如果这个时候A已经断开连接了,那B肯定没法收到A回复的ACK了。因此要求等待这个时长。这个时间是:B重新发送断开连接,A回复ACK,B收到ACK的时间
    • 如果A发送最后的ACK直接断开,还有一个问题,此时A的端口空出来了,A连上了新的应用,但是B不知道,B原来发过的断开连接的请求就会到达A,这样会就产生混乱。虽然有包的序号,但还是会有些影响

三次握手和四次挥手总的状态机

TCP协议解析

TCP可靠连接

TCP/UDP的区别

  • TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  • TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  • TCP首部开销20字节;UDP的首部开销小,只有8个字节
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

TCP的可靠连接怎么实现的

  • [1] 确认和重传机制

    • 超时重传和快速重传
    • 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
    • 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传。
  • [2] 数据排序

    • TCP有专门的序列号SN字段,可提供数据re-order
  • [3] 流量控制

    • 滑动窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量,发送方通过维持一个发送滑动窗口来确保不会发生由于发送方报文发送太快接收方无法及时处理的问题。
  • [4] 拥塞控制

    • TCP的拥塞控制由4个核心算法组成:
    • “慢启动”(Slow Start)-TCP刚建立连接的时候,缓慢增加拥塞窗口大小,逐渐的达到一个稳定的网络状况
    • “拥塞避免”(Congestion avoidance)-当拥塞窗口大小大于一个阈值时,会进入拥塞避免算法,缓慢增加拥塞窗口的大小,调整到一个最佳的网络状态。
    • “快速重传 ”(Fast Retransmit)-当发送端连续收到3个以上的ACK时,不用等到重传定时器超时,便会重传数据;并且把阈值缩小,
    • “快速恢复”(Fast Recovery)-发生重传之后,进入快速恢复算法,对拥塞窗口进行调整,使之尽快恢复正常网络状态,而不是进入慢启动状态,拥塞窗口从0开始增加。
  • 拥塞窗口和滑动窗口区别

    • 1.流量控制:

      • 在TCP连接上实现对发送流量的控制,考虑端对端之间对通信量的控制
      • 即:控制发送端的数据发送速率,使接收端可以合理接收,保证网络高效稳定运行
    • 2.拥塞控制:

      • 处理网络拥塞现象,需要考虑网络能够承受现有的网络负荷,涉及到所有路由器、主机以及各种降低网络传输性能有关的因素。
      • 防止过多数据注入到网络,确保通信子网有效为主机传递分组。
转载自:https://juejin.cn/post/7380510171640528908
评论
请登录