问题聚焦:
本节从如下四个方面讨论TCP协议:
TCP头部信息:指定通信的源端端口号、目的端端口号、管理TCP连接,控制两个方向的数据流
TCP状态转移过程:TCP连接的任意一端都是一个状态机
TCP数据流:两种主要类型:交互数据流,成块数据流
TCP数据流的控制:保证可靠传输和提高网络通信质量,两个方面:超时重传,拥塞控制
1 TCP服务的特点
传输层协议:TCP协议,UDP协议
TCP协议特点:面向连接,字节流和可靠传输
先建立连接,才能开始读写数据双方都要分配内核资源全双工,读写可以通过一个连接
必须断开连接,以释放资源一对一,所以不适合基于广播和多播的应用程序(UDP适合)
字节流服务:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这就是字节流的概念,即应用程序对数据的发送和接收是没有边界限制的。
(和字节流相对应的是数据报服务:如UDP,发送端应用程序没执行一次写操作,UDP模块就将其封装成一个UDP数据报并发送之,接收端必须针对每一个UDP数据报执行读操作。)
TCP字节流服务和UDP数据报服务的工作流程区别如下图所示:
TCP传输是可靠的:
- 发送应答机制,即发送端发送的每个TCP报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功
- 超时重传机制:发送端在发送出一个TCP报文段之后启动定时器,如果在定时时间内未收到应答,它将重发该报文段
- 重排,整理:TCP报文段最终是以IP数据报发送的,而IP数据报到达接收端可能乱序、重复,所以TCP协议还会对接收到的TCP报文段重排、整理,再交付给应用层。
2 TCP头部结构
如图:
16位端口号:告知主机该报文段是来自哪里(源端口号),以及传给哪个上层协议或应用程序(目的端口)。对于客户端来说,端口号常为系统自动选择。
32位序号:一个TCP通信过程中某一个传输方向上的字节流的每个字节的编号。如某个TCP报文段传送的数据是字节流中的第1025到2048字节,那么该报文段的序号值就是ISN+1025,ISN为初始序号值。
32位确认号:用作对另一方发送来的TCP报文段的响应。其值是收到的TCP报文段的序号值加1。
4位头部长度:标识TCP头部有多少个4字节。最长标识60字节。
6位标志位:<