1 / 6 TCP 协议详解 本文描述了 TCP 协议,首先简单介绍了 TCP 完成了一些什么功能;介绍了 TCP 报文格式,以及典型报文的数据格式;接着从链路控制和数据传输两个方面进行了介绍,在 TCP 中链路控制和数据传输是通过同一个通道进行的,并没有区分控制通道和数据通道;在网络中传输数据(控制或真实数据),网络可能发生拥堵,因此接下来简单描述了主机端进行拥塞控制所采取的方法,也简单提及了中间路由器/交换机进行拥塞避免所采取的主动措施;最后介绍了在 TCP 中性能分析的一些基本概念点,在开发网络应用程序的时候,需要对应用的网络需求进行一个估计。 本文不是 TCP 的入门资料,阅读之前需要对 TCP 有一些基本认识,如三次握手、四次挥手、滑动窗口等。 TCP 概述 通常说到 TCP,我们都会很自然的想到其为上层提供了一个面向连接、可靠的、端到端的数据流服务,也通常用电话线路来类比一个 TCP 连接。但这种类比对刚接触到 TCP 的人来说极易造成误会,我们需要仔细审视这些概念,你将会发现 TCP并不是那么面向连接的、也不是那么可靠的、数据也仍然是通过报文的方式进行传输的。实际上 TCP 是提供了一种“尽力而为”的数据传输模型;同时,它也提供了防止网络拥塞的主机端拥塞控制,试图去了解整个网络的状况,并采取合适的策略(貌似不是 TCP 应该干的事?)。 TCP 的连接并不是指一条实际的或虚拟的链路存在于数据交换的两端,而是指连接的双方都维护了一些资源(如输入输出缓冲区、多种定时器)以及链路状态的信息,并通过双方的控制报文交互管理状态、向用户提供接口修改这些资源的分配。在“连接控制”小节,我们将会仔细审视资源和状态(包括控制状态的报文),若控制报文丢失,那么连接就会处于一种不一致状态,TCP 通过一些手段去试图解决这些问题(如持活定时器、保持定时器等等)。 TCP 提供了可靠的数据传输服务,其采取的措施是对控制报文和数据报文进行确认、并在超时之后进行重传;并利用滑动窗口协议解决数据数传乱序、收发双方进行流量控制。具体来说就是,对于发送方, TCP 按照其认为最合适的长度发送数据报文,并在发出报文之后,启动一个定时器,等待数据的确认报文,若定时器超时后仍没有收到确认报文,则重传该报文;对于接收方,收到数据后,首先检查报文校验和,错误则直接丢弃该报文,不确认(发送端会注意到这个事实,从而重传);收到重复报文,丢弃,不确认;通过双方...