TCP
传输控制协议(TCP, transport control 3356 protocol)是面向连接的、可靠的、IETF的RFC 793 定义了基于字节流的传输层通信协议。
TCP旨在适应支持多网络应用的分层协议体系。连接到不同但互连的计算机通信网络的主机中的成对进程依赖于TCP来提供可靠的通信服务。TCP假设它可以从较低层协议获得简单且可能不可靠的数据报服务。原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统上运行。
简介概况 编辑本段
传输控制协议(TCP, transport control 3356 protocol)是一种传输协议,专门设计用于在不可靠的互联网上提供可靠的端到端字节流。
互联网与单一网络非常不同,因为互联网的不同部分可能具有完全不同的拓扑结构、带宽、延迟、数据包大小和其他参数。TCP的设计目标是能够动态地适应互联网的这些特性,并且在面对各种故障时是健壮的。
不同主机的应用层通常需要可靠的、像管道一样连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送、用8位字节表示的数据流,然后TCP将数据流分割成适当长度的段(通常是这台计算机所连接的网络的数据链路层的最大传输单元(MTU)的限制)然后TCP将结果包发送到IP层,IP层将通过网络将包发送到接收实体的TCP层。TCP为每个数据包指定一个序列号,以确保数据包不会丢失,序列号还确保发送到接收实体的数据包按顺序接收。则接收实体发送回对成功接收的分组的相应确认(ACK)如果发送实体具有合理的往返延迟(RTT)如果在内没有收到确认,则认为相应的数据包丢失,并将重新发送。TCP使用校验和功能来检查数据是否有错误;发送和接收时应计算校验和。
每台支持TCP的机器都有一个TCP传输实体。TCP实体可以是库进程、用户进程或内核的一部分。在所有这些情况下,它管理TCP流和与IP层的接口。TCP传输实体接受本地进程的用户数据流,并将它们分成不超过64KB的部分(事实上,IP和TCP报头被去除,通常不超过1460个数据字节)每个数据段作为单独的IP数据报发送。当包含TCP数据的数据报到达机器时,它们被提交给TCP传输实体,后者重建原始字节流。为了简单起见,我们有时只用“TCP”来表示TCP传输实体(一段软件)或者TCP协议(一组规则)根据上下文语义,你应该能够很容易地推断出它的实际含义。例如,在“用户将数据交给TCP”在这句话中,很明显这指的是TCP传输实体。
IP层不保证数据报必须被正确地传递给接收者,也不指示数据报发送的速度。TCP负责以足够快的速度发送数据报,以便在不造成网络拥塞的情况下使用网络容量:而且TCP超时后,需要重新发送未送达的数据报。即使数据报提交正确,也有可能是乱序的,这也是TCP的责任,它必须将收到的数据报重新组装成正确的顺序。简而言之,TCP必须提供可靠的性能,这正是大多数用户所期望的,而IP并没有提供。
发展历程 编辑本段
RFC793 在1981年9月给出了TCP的正式定义。随着时间的推移,对它进行了许多改进,各种错误和不一致之处也逐渐得到了修复。
为了让你感受到TCP的扩展,现在重要的RFC有:RFC793plus澄清了描述,RFC1122 修复了bug、RFC1323 做了高性能的扩展,RFC2018 定义了选择性确认,RFC2581解释了拥塞控制、RFC2873定义了用于服务质量的报头字段,RFC2988 改进了重传定时器,RFC3168 定义了显式拥塞通知。整套协议非常庞大,所以专门出版了一个针对很多RFC的指南,就是作为另一个RFC文档出版的RFC4614。
主要功能 编辑本段
当应用层向TCP层发送、对于用8位字节表示的数据流,TCP将数据流分成适当长度的段,最大传输段大小(MSS)通常是这台计算机所连接的网络的数据链路层的最大传输单元(MTU)限制。然后TCP将数据包发送到IP层,IP层将通过网络将数据包发送到接收实体的TCP层。
为了保证消息传输的可靠性,TCP给每个包一个序列号,序列号也保证了发送给接收实体的包的有序接收。则接收实体发送回对成功接收的字节的相应确认(ACK)如果发送实体具有合理的往返延迟(RTT)内没有收到确认,则相应的数据(假设丢失了)将会被重传。
在数据正确性和合法性方面,TCP使用校验和函数来检查数据是否有错误,并在发送和接收时计算校验和;同时,md5认证可用于加密数据。
为了保证可靠性,采用了超时重传和捎带确认机制。
在流量控制中,采用滑动窗口协议,规定窗口内未确认的数据包需要重传。
在拥塞控制中,采用了广受好评的TCP拥塞控制算法(也称为AIMD算法)该算法主要包括四个主要部分:
1)慢启动
每次建立TCP连接或TCP连接超时重新传输后,连接进入慢启动阶段。进入慢启动后,TCP实体将拥塞窗口的大小初始化为一个消息段,即:cwnd=1。此后,每当接收到消息段的确认时(ACK),cwnd值加1,即拥塞窗口呈指数增长。当cwnd值超过慢启动值时(the third time)或者当消息段丢失并重新传输时,慢启动阶段结束。前者进入拥塞避免阶段,后者重新进入慢启动阶段。
2)拥塞避免
在慢启动阶段,当cwnd值超过慢启动解释值时(the third time)之后,慢启动过程结束,TCP连接进入拥塞避免阶段。在拥塞避免阶段,每次发送的cwnd段被完全确认后,cwnd值加1。在这个阶段,cwnd值线性增加。
3)快速重传
快速重传是对超时重传的改进。当源收到同一消息的三个重复确认时,它确定某个消息段已丢失,因此它立即重新传输丢失的消息段,而不等待重新传输计时器(RTO)超时。以便减少不必要的等待时间。
4)快速恢复
快速恢复是对丢失恢复机制的改进。快速重传后,不经过慢启动过程,直接进入拥塞避免阶段。快速重传后设置ssthresh=cwnd/2、ewnd=ssthresh 3。此后,每当接收到重复确认时,cwnd值增加1,直到接收到丢失段和后续段的累积确认,并且cwnd=ssthresh被设置为进入拥塞避免阶段。
主要特点 编辑本段
TCP是用于WAN的通信协议,其目的是在跨多个网络通信时,在两个通信端点之间提供具有以下特征的通信模式:
1)基于流的方式;
2)面向连接;
3)可靠通信方式;
4)当网络条件不好时,尽量减少重传带来的带宽开销;
5)通信连接的维护面向通信的两个端点,不考虑中间网段和节点。
为了满足TCP协议的这些特性,TCP协议做出了如下规定:
①数据分片:用户数据在发送端被分段,并在接收端被重组TCP确定碎片的大小,并控制碎片和重组;
②到达确认:当接收方收到碎片数据时,它会根据碎片数据的序列号向发送方发送确认;
③超时重发:发送方在发送片段时启动超时定时器,如果定时器超时后没有收到相应的确认,则重传该片段;
④滑动窗口:TCP连接每一端的接收缓冲区空间是固定的,接收端只允许另一端发送接收端缓冲区能容纳的数据TCP在滑动窗口的基础上提供流量控制,防止速度较慢的主机因速度较快的主机造成缓冲区溢出;
⑤失序处理:作为IP数据报传输的TCP片段在到达时可能是无序的TCP将对接收到的数据进行重新排序,并按照正确的顺序将其移交给应用层;
⑥重复处理:作为IP数据报传输的TCP片段会被复制,TCP的接收端必须丢弃复制的数据;
⑦数据校验:TCP将保留其报头和数据的校验和,这是一种端到端校验和,用于检测传输过程中数据的任何变化。如果收到的片段的校验和有错误,TCP将丢弃该片段,并且不会确认收到该片段,这将导致对等方超时并重新发送它。
工作方式 编辑本段
建立连接
图2 TCP的三次握手
TCP是互联网中的传输层协议,它使用三次握手协议来建立连接。当主动方发出SYN连接请求时,等待对方应答SYN ACK,最后对对方进行 ACK 确认 s SYN 。这种建立连接的方法可以防止错误连接,TCP使用的流量控制协议是一种可变大小的滑动窗口协议。
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)消息发送到服务器,输入SYN_SEND状态。
服务器接收SYN消息,并以SYN 作为响应(SEQ=y)ACK(ACK=x+1)消息,输入SYN_RECV状态。
客户端从服务器接收SYN消息,并以ACK作为响应(ACK=y+1)消息,进入已建立状态。
三次握手完成,TCP客户端和服务器已经成功建立连接,可以传输数据。
连接终止
图3 TCP连接的TCP终止
建立一个连接需要三次握手,但是终止一个连接需要四次握手,这是TCP半封闭的(half-close)造成的。具体流程如下图所示。
1)一个应用程序进程首先调用close,称为结束执行“主动关闭”active close关闭关闭)然后,这一端的TCP发送一个FIN段,表示数据传输完成。
2)接收此FIN的对等执行“被动关闭”Passive off)TCP证实了这一发现。
注意:FIN的收据也用作文件终止符(end-of-file)将它传递给接收端的应用程序进程,并将其放在任何其他已排队等待应用程序进程接收的数据之后,因为FIN的接收意味着接收端的应用程序进程在相应的连接上没有额外的数据要接收。
3)一段时间后,收到这个文件终止符的应用程序进程会调用close来关闭它的套接字。这导致其TCP也发送FIN。
4)接收此最终fin的原始发送者TCP(即执行主动关机的一端)确认这个FIN。
因为每个方向需要一个FIN和一个ACK,所以通常需要四个部分。
注意:
1) “通常”也就是说,在某些情况下,步骤1中的FIN是和数据一起发送的另外,步骤2和3中发送的区段来自执行非能动停堆的端部,并且可以合并成一个区段。
2)在步骤2和步骤3之间,可以将数据从执行被动关闭一端流动到执行主动关闭一端,这被称为“半关闭”half-close)
3)当一个Unix进程,无论是自愿的()还是非自愿地(收到终止此进程的信号)当终止时,所有打开的描述符都被关闭,这也导致FIN在任何仍然打开的TCP连接上被发出。
客户端或服务器都可以执行主动关机。通常,客户端执行主动关机,但是一些协议,如HTTP/1.0被服务器主动关闭。
协议对比 编辑本段
TCP 是面向连接的传输控制协议,而UDP 提供无连接的数据报服务;TCP 可靠性高,保证传输数据的正确性,不丢失,不乱序;UDP 在传输数据之前不建立连接,不检查和修改数据报,也不需要等待对方 s回复,所以会出现丢包、重复、坏了,应用程序需要负责传输可靠性的所有工作;UDP 比TCP 具有更好的实时性和更高的工作效率;UDP 的段结构比TCP 简单,所以网络开销也小。TCP 协议可以保证接收方能够无误地接收到发送方发送的字节流,为应用提供可靠的通信服务。要求高可靠性的通信系统往往使用 TCP 来传输数据。比如 HTTP 使用 TCP 进行数据传输。
网络协议 编辑本段
实行标准
TCP/IP(Transport Control Protocol/Internet protocol) 是传输控制协议/互联网协议是一个工业标准协议集,用于广域网(WAN)设计的。它是由阿帕网网络研究所开发的。
TCP/IP的标准在一个叫做RF的系列中
C的文档中公布。文档由技术专家、特别工作组、或RFC编辑版本。当文档发布时,它会被赋予一个RFC编号,例如RFC959(FTP描述文件)RFC793(TCP描述文件)RFC791(IP的说明文档)等。原始RFC一直保留,从未更新
如果文档被修改,它将以新的编号发布。因此,确保您拥有某个主题的最新RFC文档是很重要的。通常,在RFC开始时,会有相关的RFC更新(update)排错(errata)作废(discard)信息,提醒读者信息的时效性。
附件列表
词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。