计算机网络 传输层 TCP协议
TCP协议的特点
- TCP 是面向连接的传输层协议,传输数据前必须先建立连接,数据传输完毕后要释放连接
- 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP连接只能是点对点的(一对一)
- TCP 提供可靠交付的服务,保证无差错、不丢失、不重复、按序到达
- TCP 提供全双工通信,在一个连接上,通信双方可同时向对方传输数据
- 面向字节流,认为在TCP连接上传输的是字节流
![3cdbe1a8ac21a7568579056b6c3b85b9.png](https://i-blog.csdnimg.cn/blog_migrate/3ca3e7600380fc5707daa63d85802733.jpeg)
TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP 连接的端点叫做套接字(socket)
套接字 socket = (IP地址: 端口号)
TCP报文段的首部格式
一行4字节,共32位,固定有5行20字节,和IPv4类似的结构。
![3490cc927fc9956f935b8609445d767e.png](https://i-blog.csdnimg.cn/blog_migrate/4e67ab30747add5488ce42ccb8ff5143.jpeg)
TCP首部字段解释
源端口,目的端口:通信双方的端口号,比如HTTP服务的TCP端口号为80
序号字段:在TCP连接中传送的数据流中的每一个字节都有序号,序号字段指本报文段所发送的数据的第一个字节的序号,以字节为单位
确认号字段:期望收到对方的下一个报文段的数据的第一个字节的序号
注:TCP连接是全双工,通信双方可互相发送数据,因此应答与数据一同发送给对方
数据偏移:4位,首部长度,单位是32位字(4字节)
注:字(word),字节(byte),比特(bit)是不一样的计量单位
保留字段:6bit,保留
紧急URG:1bit,为1时,紧急指针字段有效,表明有紧急数据,应尽快传送
确认ACK:1bit,为1时,确认号字段有效;为0时,确认号无效
推送PSH:1bit,为1时,接收方将尽快向应用进程交付此报文段,而不是等到整个缓存填满
复位RST:1bit,为1时,表明TCP连接出现严重差错(如由于主机崩溃),须释放连接后重新建立连接
同步SYN:1bit,为1时,表示这是一个连接请求或连接接受报文
终止FIN: 1bit,为1时,表示要求释放TCP连接
窗口大小:2字节,用来让对方设置发送窗口的依据,单位为字节
检验和:2字节,伪首部+首部+数据的校验和,伪首部(pseudoheader)格式与UDP的伪首部相同
![dbf251cbc388f9132a86ad4ad0d0e52b.png](https://i-blog.csdnimg.cn/blog_migrate/b550cbe653a68f57c63cfd36f461b52d.png)
紧急指针:2字节,指出本报文段中紧急数据共有多少个字节(紧急数据放在数据的最前面)
选项:长度可变,最长40字节,例如最早定义的一种选项:最大报文段长度MSS(Maximum Segment Size)
填充字段:为了使整个首部长度是4字节的整数倍
对应中英文参照如下:
![9c66a84b2ce76038219a50797345384d.png](https://i-blog.csdnimg.cn/blog_migrate/864009750d7c11fd3dc516d8570c6036.jpeg)