TCP传输控制协议
虽然TCP和UDP都使用相同的网络层(IP),但是TCP提供一种面向连接的,可靠的字节流服务。
面向连接意味着两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接,因为TCP一个连接中仅有两方进行通信,所以广播和多播不能用于TCP。
TCP通过下列方式来提供可靠性:
-
应用数据被分割成TCP认为最合适发送的数据块。
-
当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,那么将重发这个报文段。
-
当TCP收到数据后,将发送一个确认,通常是推迟几分之一秒后发送。
-
TCP将保持它首部和数据的检验和。目的是检测数据在传输过程中的任何变化。如果有差错,将丢弃并不确认。
-
因为IP数据报的到达可能会失序,因此TCP将对收到的数据进行重新排序。
-
IP数据报会发生重复,TCP接收端必须丢弃重复的数据。
-
TCP还提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。接收端只允许另一端发生缓冲区能接纳的数据,可防止较慢的主机缓冲区溢出。
TCP首部
1.20.40.png 1.20.44.png每个TCP段都包含源端口号和目的端口号,用于寻找发送进程和接收进程。再加上IP首部中的源IP地址和目的IP地址可唯一确认一个TCP连接。
一个IP地址和一个端口号称为一个插口。插口对(客户IP地址,客户端口号,服务器IP地址,服务器端口号)四元组可唯一确定每个TCP连接。
序号用来标识从TCP发送端向TCP接收端端数据字节流,TCP用序号对每个字节进行计数。序号满后又从0开始。
当建立一个新连接时,SYN标志变1.序号字段包含由这个主机选择的该连接的初始序号ISN,主机要发送数据 的第一个字节序号为这个ISN+1(发送SYN消耗了一个序号)
确认序号包含发送确认端所期望收到的下一个序号。因此,确认序号是上次成功收到数据字节序号+1。
TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。连接的每一端必须保持每个方向上的传输数据序号。
TCP首部中有6个标志比特位
- URG 紧急指针
- ACK 确认序号有效
- PSH 接收方应将这个报文尽快交给应用层。
- SYN 同步序号用来发起一个连接。
- 完成发送任务。
TCP的流量控制是由每一端声明的窗口大小来提供的。
最常见的可选字段是最长报文大小,MSS。每个连接方通常都在通信的第一个报文段中指明这个选项,这指明本端能接收的最大长度的报文段。