6.2TCP协议
传输控制协议(TCP,TransmissionControl Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义 。
TCP旨在适应支持多网络应用的分层协议层次结构,互连的计算机通信网络中成对的应用程序进程之间能够依靠TCP提供可靠的通信服务来传输字节流。TCP支持双向数据流,应用程序也可以仅单向发送数据。在主机之间,TCP使用端口号标识应用程序服务并且可以多路传输数据流。
6.2.1TCP协议的特性
- 面向连接:TCP协议要求在应用程序传输数据之前必须先建立连接,传输完毕后释放连接。
- 可靠传输:通过确认应答(ACK)和超时重传机制,确保数据能够可靠地到达接收方。
- 面向字节流:TCP把应用程序交下来的数据看成是一连串的无结构的字节流。
- 全双工通信:TCP允许通信双方的应用进程在任何时候都能发送数据,设有发送缓存和接收缓存。
- 数据顺序保证:TCP会保证数据包按照发送顺序在接收端被重组和传递给应用层。
- 错误检测和重传:TCP利用校验和检验数据包的完整性,发现错误则重传。
- 流量控制和拥塞控制:通过滑动窗口协议和拥塞窗口调整机制分别实现流量控制和拥塞控制,避免数据丢失和网络拥塞。
6.2.2TCP数据包
1.TCP头部(Header)
- 源端口(Source Port):16位,表示发送端的端口号。
- 目的端口(Destination Port):16位,表示接收端的端口号。
- 序列号(Sequence Number):32位,数据发送者确定数据包位置的编号,用于确保数据按序到达。
- 确认号(Acknowledgment Number):32位,用于确认数据收到的编号,通常是对上一次接收的数据的序号加1。
- 数据偏移(Data Offset):4位,指示TCP头部的长度,以4字节为单位。
- 保留字段(Reserved):4位,一律置0,以备将来扩展使用。
- 控制位(Flags):8位,包含多个标志位,如SYN(同步序列编号)、ACK(确认应答)、FIN(发送完毕)、RST(重置连接)、PSH(推送)、URG(紧急)等。
- 窗口大小(Window Size):16位,表示接收窗口的大小,即接收方能够接收的数据量。
- 校验和(Checksum):16位,用于检查头部和数据部分的错误。
- 紧急指针(Urgent Pointer):16位,指示紧急数据的位置(如果URG标志位被设置)。
2.选项(Options)
- 可变长度,最多40字节,用于提供额外的控制功能,如最大报文段长度(MSS)、窗口缩放因子、时间戳等。
3.数据(Data)
- 紧随TCP头部之后,是实际传输的应用层数据。数据的长度由TCP头部中的数据偏移字段和整个TCP段的长度共同决定。
4.填充(Padding)
- 为了确保TCP数据段的长度是4字节的整数倍,有时需要在数据部分之后添加额外的填充字节。