计算机网络 TCP
TCP的特点
TCP的全称是指传输控制协议(Transmission Control Protocol)。它是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
- 具备的特点
- TCP是面向连接的传输层协议。
- TCP连接是点对点的(套接字–IP:Port到套接字)。
- TCP提供可靠交付的服务。
- TCP提供全双工通信。
- 面向字节流。
TCP基本概念
发送缓存和接受缓存
:- 用来临时保存双向通信的数据。在发送时,应用程序将数据传送给TCP发送缓存后,就可以做自己的事情,TCP在合适的时候发送数据;在接受数据时,TCP把发送的数据放入缓存,上层应用在合适的时候读取缓存即可。
滑动窗口
:- TCP的滑动窗口以字节为单位,用3个指针进行表示。当窗口内连续报文段被确认收到后,可以将窗口向前滑动。窗口大小应小于等于缓存区的大小。
滑动窗口协议
:- 只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
- 当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。
- 当发送窗口大于1,接收窗口等于1时,就是回退N步协议。
- 当发送窗口和接收窗口的大小均大于1时,就是选择重发协议。
- 只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。
TCP报文结构
- 报文结构如下所示
- 源端口、目的端口:16位长。标识出远端和本地的端口号。
- 序列号:32位长。表明了发送的数据报的顺序,不一定从0开始。
- 确认号:32位长。希望收到的下一个数据报的序列号,表明到序列号
N-1
为止的所有数据已经正确收到。 - TCP协议数据报头长:4位长。表明TCP头中包含多少个32位字。
- 接下来的6位未用。
- ACK:ACK位置1表明确认号是合法的。如果ACK为0,那么数据报不包含确认信息,确认字段被省略。
- PSH:表示是带有PUSH标志的数据。接收方因此请求数据报一到便可送往应用程序而不必等到缓冲区装满时才传送。
- RST:用于复位由于主机崩溃或其它原因而出现的错误的连接。还可以用于拒绝非法的数据报或拒绝连接请求。
- SYN:用于建立连接。
- FIN:用于释放连接。
- 窗口大小:16位长。窗口大小字段表示在确认了字节之后还可以发送多少个字节。
- 校验和:16位长。是为了确保高可靠性而设置的。它校验头部、数据和伪TCP头部之和。
- 紧急指针:
URG=1
时才有意义。 - 可选项:长度可变,最长40个字节。
- MMS
- SACK:选择确认。
- 时间戳:计算往返时间;用于处理TCP序号超过
2^32
的情况,又称为防止序号回绕(PAWS)。
- TCP最小长度为20个字节。