TCP协议比IP协议更靠近应用层,因此在应用程序中具有更强的操作性,一些重要的socket选项都和TCP协议相关。
- TCP头部信息
出现在每个TCP报文段,作用:指定通信的源端端口、目的端端口号、管理TCP连接、控制两个方向的数据流等 - TCP状态转移过程
- TCP数据流
两种:交互数据流和成块数据流 - TCP数据流的控制
包括超时重传和拥塞控制
TCP服务特点
相对于UDP协议,TCP协议的特点是面向连接、字节流、可靠传输。
使用TCP协议通信的双方必须为连接分配必要的内核资源,用来管理连接的状态和连接上数据的传输。TCP连接是全双工的,双方的数据读写可以通过一个连接进行。
TCP特点
TCP是一种一对一的连接,基于广播和多播的应用程序不能使用,而要使用无连接协议UDP。
接收端收到一个或者多个TCP报文段,TCP模块会将它们携带的应用程序数据按照序号放入接收缓冲区。而应用程序可以一次性将TCP接收缓冲区中的数据全部读出,也可以分多次读取。
TCP模块发送出的报文段个数和应用程序执行的写操作的次数之间没有固定的数量关系,收到的报文段个数与应用程序执行的读操作次数之间也没有固定数量关系。这就是字节流的概念:应用程序对数据的发送和接收没有边界限制。
TCP提供可靠服务,采用:
- 发送应答机制
- 超时重传机制
发送端发送出一个TCP报文段后启动定时器,如果在定时时间内未收到应答,它将重新发送。
另外TCP接收端会对报文段重排、整理,再交付给应用层。
UDP特点
UDP:发送端应用每执行一次写操作,UDP模块就将其封装成一个UDP数据报并发送之。接收端要针对每一个UDP数据报执行读操作。如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将被截断。
UDP提供不可靠服务,需要上层协议来处理数据确认和超时重传。
TCP头部结构
固定头部结构
1 16位端口号(port number)
告诉主机该报文段来自哪个端口,以及传给哪个目的端口。
2 32位序号
一次TCP通信过程中,某一个传输方向上的字节流的每个字节的编号。
其中第一个报文段的序号为一个随机值: Initial Sequence Number ISN
后续的规则是这样的:如果某个TCP报文段传送的数据是字节流中的1025~2048字节,该报文段的序号值就是ISN+1025。
3 32位确认号 acknowledgement number
用作对另一方发送来的TCP报文段的响应,值为收到的TCP报文段的序号+1。
主机发送出的TCP报文段不仅携带自己的序号,而且包含对对方发来的报文段的确认号。
4 4位头部长度 head length
标识该TCP头部有多少个32bit(以四字节为单位)。因为4位最多能表示15,TCP头部最长是60字节。
5 6位标志位
6 16位窗口大小 Window size
是TCP 流量控制的手段。
窗口是接收通告窗口,它高速对方本端的TCP接收缓冲区还能容纳多少字节数据,这样对方可以控制发送数据的速度。
7 16位校验和 TCP checksum
由发送端填充,接收端对TCP报文段执行CRC算法以校验TCP报文在传输过程中是否被损坏。
8 16位紧急指针 urgent pointer
是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。
头部选项
选项字段是可变长的可选信息,最多包含40字节,因为TCP头部最长是60字节,固定部分占20字节。
kind 1字节
length 1字节
info n字节