一、 TCP 协议端格式
TCP,即 Transmission Control Protocol,传输控制协议。对数据传输进行一个详细的控制。
- 源/目的端口:表示数据从哪个进程来,到哪个进程去。
- 4位TCP报头长度:4个 bit 位,单位是 4个字节,4位首位长度值为1111 =》15,实际的首部长度就是15 * 4 = 60;
15 * 4 = 60 - 6位标志位:
- URG : 紧急指针是否有效
- ACK : 确认号是否有效
- PSH : 提示接收端应用程序立刻从 TCP 缓冲区把数据读走
- RST : 对方要求重新建立连接,把带有 RST 标识的称为复位报文段
- SYN : 请求建立连接,把携带 SYN 标识的称为同步报文段
- FIN : 通知对方,本端要关闭了,把携带 FIN 标识的称为结束报文段
- 16位校验和:发送端填充,CRC 检验。接收端校验不通过,则认为数据有问题。此处的校验和不光包含 TCP 首部,也包含 TCP 数据部分。
- 16位紧急指针:标识那部分数据是紧急数据。
- 40字节的头部选项。
二、TCP 协议特性
- 有连接
- 可靠性传输(可靠性不等于安全性)
- 面向字节流
- 全双工
创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接收缓冲区;- 调用
write
时,数据会先写入发送缓冲区中; - 如果发送的数据字节数太长,就会拆分成多个 TCP 的数据报发出;
- 如果发送的数据字节数太短,就会先在缓冲区等待,等到缓冲区中数据长度合适或者合适实际再发送出去;
- 接收数据的时候,数据也是从网卡驱动程序到达内核的接收缓冲区,然后应用程序调用
read
从接收缓冲区拿数据; - 另一方面,TCP的一个连接,既有发送缓冲区,又有接收缓冲区,那么对于一个连接,既可以读数据,又可以写数据。这个概念就叫做全双工。
- 调用
- 大小不限
对于字节流来说,可以简单的理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次接收。
三、基于 TCP 应用层协议
- HTTP
- HTTPS
- SSH
- TeInet
- FTP
- SMTP
- 写 TCP 程序时自定义的应用层协议