TCP协议笔记

一、TCP协议简介

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它提供了一种可靠的数据传输方式,确保数据在网络中准确无误地送达目的地。

二、TCP协议特点

  1. 面向连接:在数据传输之前,收发双方需要预先建立一条逻辑通路。
  2. 可靠传输:

    建⽴连接(标志位):通信前确认通信实体存在。

    序号机制(序号、确认号):确保了数据是按序、完整到达。

    数据校验(校验和):CRC校验全部数据。

    超时重传(定时器):保证因链路故障未能到达数据能够被多次重发。

     窗⼝机制(窗⼝):提供流量控制,避免过量发送

     拥塞控制:通过拥塞控制,避免过量发送,导致丢包。

  3. 字节流:TCP将数据视为一连串无结构的字节流,保证数据按照顺序到达。
  4. 流量控制:通过滑动窗口算法,控制发送方的发送速度,避免网络拥塞。
  5. 拥塞控制:检测网络拥塞程度,调整发送方的发送速度,以减少丢包和延迟。

三、TCP协议头部

TCP头部包含以下字段:

  1. 源端口:16位,表示发送方的端口号。
  2. 目的端口:16位,表示接收方的端口号。
  3. 序列号:32位,用于标识发送方发送的数据包的顺序。
  4. 确认应答号:32位,用于标识期望收到对方下一个数据包的序列号。
  5. 数据偏移:4位,表示TCP头部的长度,用于计算数据部分的起始位置。
  6. 保留:6位,保留备用。
  7. 控制位:6位,包括以下标志:
    • URG:紧急指针有效
    • ACK:确认应答有效
    • PSH:推送数据
    • RST:重置连接
    • SYN:同步序列编号
    • FIN:结束连接
  8. 窗口大小:16位,用于流量控制,表示发送方的接收窗口大小。
  9. 校验和:16位,用于检测数据在传输过程中的错误。
  10. 紧急指针:16位,指出紧急数据的结束位置。

TCP分段:因为IP分片后,TCP协议无法保证数据的可靠性传输;故而使用TCP协议进行封装的文件不允许进行IP分片,而又因为MTU存在,需要将大文件分为小文件,该操作由TCP协议完成。

MSS---最大传输段===MTU-IP头部-TCP头部

在TCP协议中,每一个报文都需要有序列号信息

四、TCP协议建立连接(三次握手)

最开始的时候双方都处于关闭(CLOSED)状态,主动打开连接的为客户端,被动接受连接的是服务器,TCP 服务器进程需要先创建传输控制块 TCB ,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态:

第一次握手:TCP 客户进程先创建传输控制块 TCB ,然后向服务器发出连接请求报文,其中 SYN = 1 ,同时选择一个初始序列号 seq = x ,此时 TCP 客户端进入了 SYN-SENT 同步已发送状态;
第二次握手:TCP 服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文,其中 ACK = 1 ,SYN = 1 ,确认号 seq = x + 1 ,同时也要为自己初始化一个序列号 seq = y,此时 TCP 服务器进程进入了 SYN-RCVD 同步收到状态;
第三次握手:TCP 客户端收到确认后,还要向服务器给出确认,其中 ACK = 1 ,ack = y + 1 ,自己的序列号 seq = x + 1 ,此时 TCP 连接建立,客户端进入 ESTABLISH 已建立连接状态。

4.1底层原理
      TCP三次握手的底层原理主要是为了确保双方的发送和接收都能正常工作,以便在网络传输过程中进行可靠的数据传输。以下是底层原理的详细解释:

序列号(Sequence Number):TCP协议使用序列号来追踪每个报文段(Segment)的数据。序列号是每个数据段的字节流中的第一个字节的编号。在三次握手过程中,客户端和服务器双方都生成一个初始序列号(Initial Sequence Number,ISN),确保数据传输过程中各自都有一个独立的、正确的计数基准。
确认序列号(Acknowledgment Number):为了确认已经接收到对方发送的数据,TCP协议使用确认序列号。确认序列号表示期望接收到的下一个字节的序列号。在三次握手过程中,双方通过确认序列号确认对方已收到自己的SYN报文。
SYN(Synchronize Sequence Numbers)标志:SYN标志位用于发起一个新的连接。当发送一个带有SYN标志的报文时,表示请求建立一个连接。在三次握手的过程中,客户端和服务器分别发送一个带有SYN标志的报文,以便同步各自的初始序列号。
ACK(Acknowledgment)标志:ACK标志位用于确认收到对方的报文。当发送一个带有ACK标志的报文时,表示已经收到对方的报文,并确认其序列号。在三次握手过程中,双方通过发送带有ACK标志的报文,确认彼此已经收到连接请求和回应。
通过上述四个要素,TCP协议确保了双方在数据传输过程中能够同步序列号、确认收到对方的报文以及确保双方的发送和接收能力。这为后续的可靠数据传输奠定了基础。TCP三次握手正是基于这些底层原理来实现的

五、TCP协议数据传输

  1. 数据包发送:发送方将数据分割成多个数据包,并为每个数据包分配一个序列号。
  2. 确认应答:接收方收到数据包后,发送确认应答(ACK)给发送方。
  3. 重传机制:发送方在规定时间内未收到确认应答,会重传数据包。

六、TCP协议断开连接(四次挥手)

当 TCP 连接结束时,需要进行四次挥手进行终止。数据释放完毕后,双方都可释放连接,最开始时,双方均处于 ESTABLISHED 状态,假设客户端主动关闭,服务器被动关闭:

        第一次挥手:客户端发出连接释放报文,并且停止发送数据,其中 FIN = 1 ,序列号 seq = u,此时客户端进入 FIN-WAIT-1(终止等待 1)状态;
        第二次挥手:服务器端接收到连接释放报文后,发出确认报文,其中 ACK = 1 ,ack = u + 1,序列号 seq = v ,此时服务器端进入了 CLOSE-WAIT 关闭等待状态;
        第三次挥手:客户端接收到服务器的确认请求后,会进入 FIN-WAIT-2(终止等待 2)状态,等待服务器发送连接释放报文。服务器将最后的数据发送完毕后,就像客户端发送连接释放报文,然后进入 LAST-ACK(最后确认)状态,等待客户端的确认;
        第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,其中 ACK = 1 ,ack = w + 1 ,序列号 seq = u + 1 ,此时客户端就进入了 TIME-WAIT(时间等待)状态,但此时 TCP 连接还未终止,必须经过 2 MSL(最长报文寿命),当客户端撤销响应的 TCB 后, 客户端才会进入 CLOSED 关闭状态,服务器端接收到确认报文后,会立即进入 CLOSED 关闭状态,到这里连接断开,四次挥手完成。

6.1 底层原理
       虽然四次挥手与三次握手有一定的相似性,但它们的目的和关注点不同。在四次挥手中,关键是确保数据传输的完整性和双方都同意关闭连接。

半关闭(Half-close)状态:在TCP协议中,连接的每一方都可以独立地关闭它们的发送通道。半关闭状态是指一方已经关闭了发送通道,但仍然可以接收来自另一方的数据。在四次挥手过程中,主动关闭方首先进入半关闭状态,停止发送数据,但仍然可以接收数据。
FIN(Finish)标志:FIN标志用于表示一方已经完成数据传输,并希望关闭连接。在四次挥手过程中,主动关闭方和被动关闭方都会发送带有FIN标志的报文,表示它们已完成数据传输。
ACK(Acknowledgment)标志:与三次握手中的ACK标志相似,四次挥手中的ACK标志也用于确认收到对方的报文。在四次挥手过程中,双方通过发送带有ACK标志的报文来确认收到对方的FIN报文,从而确保双方都知道彼此已经完成了数据传输。
等待(Time-Wait)状态:在四次挥手的最后阶段,主动关闭方会进入一个等待状态,称为Time-Wait状态。这个状态的目的是确保最后一个ACK报文能够成功抵达被动关闭方。此外,等待状态还可以处理在网络中可能存在的延迟报文,防止这些报文干扰新的连接。
通过上述原理,TCP协议确保了双方在关闭连接时,数据传输的完整性得到保障,同时双方都同意关闭连接。这样,在四次挥手过程完成后,TCP连接可以安全地关闭,释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值