计算机网络(九):传输层之传输控制协议——TCP(上)

计算机网络(九):传输层之传输控制协议——TCP(上)

一、TCP协议的主要特点

  1. 面向连接的传输服务
    相比于UDP面向无连接的协议,面向连接的TCP协议更加可靠,提高系统数据传输的可靠性。使用TCP传送数据之前,需要在源进程端口与目的进程端口之间建立一条传输通道。
  2. 面向字节流的传输协议,即支持字节传输
    TCP协议同样建立在不可靠的网络层IP协议之上,IP协议不能提供任何可靠性机制,因此TCP的可靠性完全由自己决定。如图为TCP协议支持字节流传输的过程。
    在这里插入图片描述
    应用程序和TCP每次交互的数据长度可能都不相同,但TCP将提交的数据都看成是一连串的、无结构的字节流。发送方和接收方都需要使用缓存,发送方使用发送缓存存储从应用发送来的数据。发送方将几个写操作组合成一个报文段,然后提交给IP协议,由IP协议封装成IP分组后传输给接收方。
    接收方IP将接收到的IP分组进行拆分后,将数据字段提交给接收方TCP,TCP将接收的字节存储到接收缓存中,应用程序使用读操作将缓存中的数据读出。
  3. 支持全双工服务
    TCP通信在发送数据时顺便把确认信息捎带传送。TCP提供全双工服务,即数据可以在同一时间双向流动,每一方向TCP都有发送和接收缓冲区,能在双向发送和接收段。
  4. 支持建立多个并发的TCP连接
    TCP协议支持一个服务器与多个客户端同时建立多个TCP连接,也支持一个客户端与多个服务器同时建立多个TCP连接。
  5. 支持可靠传输服务
    TCP是一种可靠的传输服务协议,它使用确认机制检查数据是否安全、完整地到达,并提供拥塞控制功能。TCP支持可靠数据通信的关键是对发送和接收的数据字节进行跟踪、确认与重传。
    TCP协议建立在不可靠的网络层IP协议之上,一旦IP协议及以下层出现传输错误,TCP协议只能进行重传
    在这里插入图片描述
    总而言之,TCP协议是面向连接、面向字节流、支持全双工、支持并发连接、提供确认重传与拥塞控制可靠传输层协议。

二、TCP报文格式
TCP的报文格式如下所示。
在这里插入图片描述
发送序号:TCP是面向字节流的,因此会为发送字节流中的每个字节都按顺序编号,发送序号告诉接收端,在这个序列中哪个字节是该段的第一个字节
确认序号:指出接收方希望下一次接收的字节序号,表示一个进程已经正确接收了序号N之前(不包含N)的字节,要求发送序号N的字节的报文段
报头长度:TCP报头长度以4字节为一个单位进行计算,报头长度的范围在20字节到60字节之间,因此其值在5到15之间。
控制字段:6种不同的控制位或标记的意义如下图所示。
在这里插入图片描述
在这里插入图片描述
窗口:定义了对方必须维持的窗口的大小(以字节为单位)。这个值通常称为接收窗口,由接收方确定,发送方必须服从接收端的支配。
校验和:TCP校验和计算过程和UDP计算过程一致,都需要加上伪报头。不同在于,TCP的校验和的必须的,而UDP的校验和是可选的
紧急指针:包含了紧急数据。
选项:TCP头部有多达40个字节的可选信息。
PS:TCP最大段长度(MSS):指的是报文数据部分的最大长度,不包含报头。

三、TCP连接建立与释放
TCP连接包括连接建立、报文传输与连接释放3个阶段。

  1. TCP建立连接——三次握手
    TCP建立连接的过程被称为“三次握手”,其示意图如下所示。
    客户端发送第一个**“SYN”报文(控制位SYN=1)。“SYN”报文包括源端口号和目的端口号,以及一些连接参数。“SYN=1”表示Connection Request。
    服务器接收到“SYN”报文后,如果
    同意建立连接,向客户端发送第二个报文“SYN+ACK”报文(控制位SYN=1,ACK=1)**。该报文表示对第一个“SYN”报文请求的确认,同时给出窗口大小。“ACK=1”是为了区别“SYN=1”时表示Connection Request还是Connection Accepted。
    在接收到“SYN+ACK”报文之后,客户端发送第三个“ACK“报文,表示对“SYN+ACK”报文的确认。
    在这里插入图片描述
  2. TCP连接释放——“四次握手/挥手”(此处讲解的是半关闭)
    TCP连接的释放被称为“四次握手/挥手”,是客户端主动提出请求的连接释放过程
    客户端准备结束一次数据传输,主动提出释放TCP连接时,向服务器发送第一个“FIN”(控制位FIN=1)报文
    服务器接收到“FIN”报文后,立即向客户端发回“ACK”报文,表示对接收第一个“FIN”报文的确认。TCP服务器程序通知高层应用程序客户端请求释放TCP连接,这时客户端已经不会再向服务器端发送数据(但是可以发送确认),客户端到服务器端的TCP连接断开。服务器到客户端的TCP连接没有断开,服务器在需要的情况下,还可以发送数据给客户端
    在这里插入图片描述
    当服务器没有要发送的数据时,向客户端发送“FIN”报文
    当客户端接收到“FIN”报文之后,向服务器发送“ACK”报文,表示对服务器的“FIN”报文的确认。
  3. 保持定时器和时间等待定时器
    为了保证TCP协议正常运行,TCP设置了4个定时器**:重传定时器、坚持定时器、保持定时器以及时间等待定时器**。其中保持定时器与时间等待定时器和TCP链接的运行状态,以及链接释放中可能存在的问题有关。
    a) 保持定时器
    用于防止TCP连接长时间处于空闲状态。为了解决客户端可能故障导致连接处于永远打开状态,当服务器接收到客户端的信息时,就将定时器复位。如果服务器超过一定时间没有接收到客户端的信息,就发送探测报文,在发送了10个探测报文还没有响应的情况下,判断客户端故障,断开连接。
    b) 时间等待定时器
    连接终止期间使用的定时器。当TCP关闭一个连接时,其并不认为这个连接马上关闭,在时间等待期间,连接还处于一种过渡状态。

更多后续,查看笔记:计算机网络(十):传输层之TCP(中)
计算机网络(十一):传输层之TCP(下)

参考资料:《计算机网络教程:自动向下方法》
《计算机网络与下一代互联网》

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/88777640