📅  最后修改于: 2021-01-12 02:52:43             🧑  作者: Mango
传输控制协议(TCP)是Internet协议套件中最重要的协议之一。它是在互联网等通信网络中用于数据传输的最广泛使用的协议。
TCP是可靠的协议。就是说,接收方总是向发送方发送关于数据包的肯定或否定确认,因此发送方始终对数据包是否到达目的地或是否需要重新发送有清晰的线索。
TCP确保数据以发送的顺序到达预期的目的地。
TCP是面向连接的。 TCP要求在发送实际数据之前在两个远程点之间建立连接。
TCP提供了错误检查和恢复机制。
TCP提供端到端通信。
TCP提供流控制和服务质量。
TCP在客户端/服务器点对点模式下运行。
TCP提供了全双工服务器,即它既可以执行接收者又可以执行发送者的角色。
TCP标头的长度最小为20个字节,最大为60个字节。
源端口(16位) -标识发送设备上应用程序进程的源端口。
目标端口(16位) -标识接收设备上应用程序进程的目标端口。
序列号(32位) -会话中段的数据字节的序列号。
确认编号(32位) -设置ACK标志时,此编号包含预期的数据字节的下一个序列号,并用作对先前接收到的数据的确认。
数据偏移量(4位) -此字段表示TCP报头的大小(32位字)和整个TCP段中当前数据包中数据的偏移量。
保留(3位) -保留供将来使用,默认情况下全部设置为零。
标志(每个1位)
NS-随机和通知位由显式拥塞通知信令过程使用。
CWR-主机接收到将ECE位置1的数据包时,会设置“拥塞窗口缩减”以确认已收到ECE。
ECE-它具有两个含义:
如果将SYN位清除为0,则ECE表示IP数据包已设置其CE(拥塞经验)位。
如果SYN位置1,则ECE表示该设备具有ECT功能。
URG-表示紧急指针字段具有重要数据,应进行处理。
ACK-表示确认字段具有重要性。如果ACK清除为0,则表示该数据包不包含任何确认。
PSH-设置后,它是向接收站请求在不进行缓冲的情况下向接收应用程序推送数据(尽快)。
RST-重置标志具有以下功能:
它用于拒绝传入的连接。
它用于拒绝段。
用于重新启动连接。
SYN-此标志用于在主机之间建立连接。
FIN-此标志用于释放连接,此后不再交换任何数据。由于带有SYN和FIN标志的数据包具有序列号,因此将以正确的顺序对其进行处理。
Windows大小-此字段用于两个工作站之间的流量控制,它指示接收器已为段分配的缓冲区量(以字节为单位),即接收器期望多少数据。
校验和-此字段包含标题,数据和伪标题的校验和。
紧急指针-如果URG标志设置为1,则指向紧急数据字节。
选项-它促进常规标头未涵盖的其他选项。选项字段始终以32位字描述。如果此字段包含的数据少于32位,则使用填充来覆盖其余位以达到32位边界。
两个远程主机之间的TCP通信是通过端口号(TSAP)完成的。端口号的范围为0 – 65535,分为:
TCP通信在服务器/客户端模型中工作。客户端启动连接,服务器接受或拒绝连接。三向握手用于连接管理。
客户端启动连接并发送带有序列号的段。服务器用自己的序列号和客户端段的ACK对其进行确认,这比客户端的序列号大一。客户端在收到其段的ACK之后发送对服务器响应的确认。
服务器和客户端中的任何一个都可以发送FIN标志设置为1的TCP段。当接收端通过确认FIN进行响应时,TCP通信的方向将关闭并释放连接。
TCP使用窗口大小的概念来满足带宽管理的需求。窗口大小告诉远端的发送方此端的接收方可以接收的数据字节段数。 TCP通过使用窗口大小1使用慢启动阶段,并在每次成功通信后以指数方式增加窗口大小。
例如,客户端使用Windows大小2,并发送2个字节的数据。当收到该段的确认时,窗口大小将增加一倍至4,下一次发送时,发送的段的长度将为4个数据字节。收到4字节数据段的确认后,客户端将窗口大小设置为8,依此类推。
如果未收到确认,即在传输网络中丢失数据或接收到NACK,则将窗口大小减小一半,然后重新开始慢速启动阶段。
TCP使用端口号来了解它需要什么应用程序来移交数据段。除此之外,它还使用序列号与远程主机进行同步。所有数据段均以序列号发送和接收。发送方知道接收方在收到ACK时最后接收到哪个数据段。接收者通过参考最近接收到的数据包的序列号来了解发送者发送的最后一段。
如果最近接收到的段的序列号与接收者期望的序列号不匹配,则将其丢弃并发送NACK。如果两个段以相同的序号到达,则比较TCP时间戳值以做出决定。
在一个会话中合并两个或多个数据流的技术称为多路复用。当TCP客户端初始化与Server的连接时,它总是引用定义良好的端口号,该端口号指示应用程序进程。客户端本身使用从专用端口号池中随机生成的端口号。
使用TCP复用,客户端可以在单个会话中与许多不同的应用程序进程进行通信。例如,客户端请求一个网页,该网页又包含不同类型的数据(HTTP,SMTP,FTP等),TCP会话超时增加并且会话保持打开状态的时间更长,因此三向握手开销可以被避免。
这使客户端系统可以通过单个虚拟连接接收多个连接。如果超时时间太长,这些虚拟连接对服务器不利。
当大量数据馈送到无法处理的系统时,会发生拥塞。 TCP通过窗口机制控制拥塞。 TCP设置一个窗口大小,告知另一端要发送多少数据段。 TCP可以使用三种算法进行拥塞控制:
加性增加,乘性减少
慢启动
超时反应
TCP使用不同类型的计时器来控制和管理各种任务:
此计时器用于检查连接的完整性和有效性。
当保持活动时间到期时,主机将发送探针以检查连接是否仍然存在。
该计时器维护已发送数据的状态会话。
如果在重传时间内未收到发送数据的确认,则再次发送数据段。
任一主机都可以通过发送窗口大小0来暂停TCP会话。
要恢复会话,主机需要发送更大的窗口大小。
如果该段永远不会到达另一端,则两端可能会无限期地等待对方。
当Persist计时器到期时,主机将重新发送其窗口大小以通知另一端。
持久计时器有助于避免通信中的死锁。
释放连接后,任一主机都等待Timed-Wait时间以完全终止连接。
这是为了确保另一端已收到其连接终止请求的确认。
超时时间最多为240秒(4分钟)。
TCP是非常可靠的协议。它为段中发送的每个字节提供序列号。它提供了反馈机制,即当主机接收到一个数据包时,它将与具有预期的下一个序列号(如果不是最后一段)的该数据包绑定到ACK。
当TCP Server中途通信崩溃并重新启动其进程时,它将向所有主机发送TPDU广播。然后,主机可以发送从未被确认的最后一个数据段并继续进行。