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

时间:2021-08-12 10:21:54

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/IP详解 卷1:协议》 读书笔记 第17章 TCP:传输控制协议

TCP首部格式如下:
《TCP/IP详解 卷1:协议》 读书笔记 第17章 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首部。