TCP:传输控制协议
这一章可以看成是TCP的概述
TCP的服务
- TCP提供一种面向连接的、可靠的字节流服务。(面向连接:在彼此交互数据前要先建立TCP连接,仅有两方进行通信)
- 广播和多播不能用于TCP
提供可靠性:
- 应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。
- TCP数据成为报文段或段(segment)
- 超时与重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
- 当TCP收到发自另一端的数据,会发送一个确认ACK。
- TCP将保持它首部和数据的检验和,如果有错将丢弃这个报文段,不返回确认,则会超时并重发。
- 封装在IP数据报中,IP到达另一端的时候可能会失序,TCP可以重新排序。
- IP数据报会发生重复,TCP接收端必须丢弃重复的数据。
- 拥塞控制:TCP还能提供流量控制(窗口win)
- 字节流服务,TCP对字节流不作任何解释。
TCP的首部
TCP的封装:
TCP首部格式如下:
- 每个TCP段都包含源端口和目的端端口号,用于寻找发端和收端应用程序。两个IP地址+两个端口号确定一个唯一的TCP连接。
- 一个IP地址和一个端口号也被称为一个插口(socket)。
- 序号用来标识从TCP发端向TCP收端发送的数据字节流,它标识在这个报文段中的第一个数据字节(18章中都是用偏移量来表示了)。
- 当建立新的TCP连接时,SYN标志变成1,序号字段包含这个主机选择的初始序号ISN。(三次握手的时候,先发送SYN和ISN过去,还有mss(最大报文段长度)和win大小)。该主机要发送数据的第一个字节序号为这个ISN加1,因为SYN标志消耗了一个序号。
- 确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1.
- 当连接建立起来后,ACK标志总是置为1.
- TCP位应用层提供双全工服务,这意味着数据能在两个方向上独立地进行传输。
- TCP可以表述为一个没有选择确认或否认的滑动窗口协议。
- 首部长度给出首部中32bit字的数目,因为任选字段的长度是可变的,这个字节占4bit,(1111最多为15),因此TCP最多有60字节的首部。正常的长度是20字节(IP和UDP首部都是固定的20和8)。
- TCP的流量控制由连接的每一端通过生命的窗口大小来提供。
- 检验和覆盖了整个的TCP报文段:TCP首部和数据。
- 只有当URG标志置为1时紧急指针才有效。
- 最常见的可选字段是最长报文大小MSS,每个连接方通常在通信的第一个报文段中指明这个选项,它指明本段所能接收的最大长度的报文段。
- 一个连接建立和终止时,双方交换的报文段仅有TCP首部。