传输控制协议(TCP) -- 连接建立及终止过程

  本文摘录自《UNIX网络编程 卷1》。

 

  1. TCP特性

  相对于不可靠、无连接的用户数据报协议(User Datagram Protocol, UDP),传输控制协议(Transmission Control Protocol, TCP)是可靠的、面向连接的协议。除此之外,TCP还提供了以下特性:

  1)TCP含有用于动态估算客户和服务器之间的往返时间(round-trip time, RTT),以便它知道等待一个确认需要多长时间。

  2)TCP通过给其中每个字节关联一个序列号对所发送的数据进行排序(sequencing)。

  3)TCP提供流量控制(flow control)。TCP总是告知对端在任何时刻它一次能够从对端接受多少字节的数据,这称为通知窗口(advertised window)。在任何时刻,该窗口指出接受缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。该窗口时刻动态变化:当接收到来自发送端的数据时,窗口大小就减小,但是当接收端应用从缓冲区中读取时,窗口大小就增大。通知窗口大小减小到0是有可能的:当TCP对应某个套接字的接收缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方能从对端再接收数据。

  4)TCP连接是全双工的(full-duplex)。

  2. TCP连接的建立和终止

   2.1 三路握手

  建立一个TCP连接时会发生下述情形:

  1)服务器必须准备好接受外来的链接。这通常通过调用socket、bind和listen这3个函数来完成,我们称之为被动打开(passive open)。

  2)客户端通过调用connect发起主动打开(active open)。这导致客户端TCP发送一个SYN(synchronization,同步)分节,它告诉服务器,客户端将在(待建立的)连接中发送的数据的初始序列号。通常SYN字节不携带数据,其所在IP数据报只含有一个IP首部、一个TCP首部及可能有的TCP选项。

  3)服务器必须确认(acknowlegement, ACK)客户端的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对客户端SYN的ACK(确认)。

  4)客户端必须确认服务器的SYN。

  下图展示了TCP三路握手:

  

  图2-2给出的客户端的初始序列号为J,服务器的初始序列号为K。ACK中的确认号是发送这个ACK的一端所期待的下一个序列号。因为SYN占据一个字节的序列号空间,所以每一个SYN的ACK中的确认号就是SYN的初始序列号加1。类似地,每一个FIN(finish, 表示结束)的ACK中的确认号为该FIN的序列号加1。

   2.2 TCP连接终止

  TCP建立一个连接需要3个分节,终止一个连接则需要4个分节。

  1)某个应用进程首先调用close,我们称该端执行主动关闭(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。

  2)接收到这个FIN的对端执行被动关闭(passive clsose)。这个FIN有TCP确认。它的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。

  3)一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。

  4)接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

  既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。我们使用限定词“通常”是因为:某些情形下步骤1的FIN随数据一起发送;另外,步骤2和步骤3发送的分节都出自执行被动关闭的那一端,有可能被合并成一个分节。

  下图展示了TCP连接终止的4个分节:

  

  类似SYN,一个FIN也占据1个字节的序列号空间。因此,每个FIN的ACK确认号就是这个FIN的序列号加1。

  在步骤2和步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的。这称为半关闭(half-close)。

  当套接字被关闭时,其所在端TCP各自发送了一个FIN。我们在图中指出,这是由应用进程调用close而发生的,不过需要认识到,当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接端也发出一个FIN。

  图2-3展示了客户端执行主动关闭的情形,不过我们指出,无论是客户端还是服务器,任何一端都可以执行主动关闭。通常情况是客户端执行主动关闭,但是某些协议(如HTTP/1.0)却由服务器执行主动关闭。

   2.3 观察分组

  图2-5展示了一个完整的TCP连接所发生的实际分组交换情况,包括连接建立、数据传送和连接终止3个阶段。

   

时间: 2024-10-07 13:07:53

传输控制协议(TCP) -- 连接建立及终止过程的相关文章

TCP:传输控制协议(一)

相关协议分析参考tcp/ip协议学习笔记(8)TCP传输控制协议 TCP传输控制块的管理.套接口选项.ioctl.差错处理以及缓存管理涉及以下文件: include/linux/tcp.h 定义TCP段的格式.TCP传输控制块等结构.宏和函数原型 include/net/sock.h 定义基本的传输控制块结构.宏和函数原型 include/net/inet_connection_sock.h 定义连接请求块等相关接口.宏和函数 include/net/inet_hashtables.h 定义管理

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

TCP连接建立过程中为什么需要“三次握手”(转)

传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的.可靠的.基于字节流的运输层(Transport layer)通信协议.是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的.互联网络与单个网络不同,因为互联网络的不同部分可能有着截然不同的拓扑.带宽.延迟.分组大小和其他参数.TCP的设计目标是能够动态的适应互联网络的这些特性,而且当面对多种失败的时候仍然能够健壮. 每一次TCP连接都需要三个阶段:连接建立.数据传送和连接释放.“三次

《TCP/IP详解》学习笔记-第17/18章 TCP:概述、连接建立与终止

1.概述 TCP提供一种面向连接的.可靠的字节流服务.全双工通信.一个TCP连接由一个4元组唯一确定:本地 IP地址.本地端口号.远端 IP地址和远端端口号. TCP将用户数据打包构成报文段:它发送数据后启动一个定时器:另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据: TCP 提供端到端的流量控制,并计算和验证一个强制性的端到端检验和. 许多流行的应用程序如 Telnet, Rlogin, FTP,SMTP 都使用TCP. TCP通过下列方式来提供可靠性: (1)应用数据被分割成

TCP连接建立的三次握手过程可以携带数据吗?

前几天实验室的群里扔出了这样一个问题:TCP连接建立的三次握手过程可以携带数据吗?突然发现自己还真不清楚这个问题,平日里用tcpdump或者Wireshark抓包时,从来没留意过第三次握手的ACK包有没有数据.于是赶紧用nc配合tcpdump抓了几次包想检验一下.但是经过了多次实验,确实都发现第三次握手的包没有其它数据(后文解释).后来的探究中发现这个过程有问题,遂整理探究过程和结论汇成本文,以供后来者参考. 先来张三次握手的图(下面这张图来自网络,若侵犯了作者权利,请联系我删除): RFC79

TCP:传输控制协议简单讲解(八)

(参考文献)TCP/IP详解,卷1:协议 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP层),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着,两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接.这一过程与打电话很相似,先拨号振铃,等待对方摘机说"喂",然后才说明是谁.TCP通信,本质上是两个线程之间的通信(客户端与服务端):而TCP连接的建立,本质上是可以说是服务端和客户端通过

第三次实验报告:使用Packet Tracer分析TCP连接建立过程

目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 3.2 配置参数 3.3 抓包,分析TCP连接建立过程 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内容 使用Packet Tracer,正确配置网络参数,通过抓取HTTP数据包,分析TCP连接建立过程. 建立网络拓扑结构 配置参数 抓包 分析数据包 3. 实验报告 在博文开头给出你的个人信息 姓名:蔡金宇 学号:201821121070 班级:计

第三次实验报告:使用Packet Tracer分析TCP连接建立过程。

(1)个人信息: 姓名:彭晨  学号:201821121039  班级:计算1812 1 实验目的 使用路由器连接不同的网络. 使用命令行操作路由器. 通过抓取HTTP报文,分析TCP连接建立的过程. 2 实验内容 使用Packet Tracer,正确配置网络参数,通过抓取HTTP数据包,分析TCP连接建立过程. 建立网络拓扑结构 配置参数 抓包 分析数据包 3. 实验报告 (1)建立网络拓扑结构 (2)配置参数    a. PC端参数配置: b.服务器端参数配置:    c.路由器参数配置: