tcp七层协议 (tcp协议简介)

TCP简介

TCP提供了一种面向连接的可靠字节流服务。

面向连接意味着两个TCP应用在进行数据交互之前,必须要先建立一个TCP连接,在结束数据交互之后,需要断开建立的TCP连接。

可靠通过以下方式来保证:

  • 应用数据被分割成TCP认为最合适发送的数据块。数据块长度取决于对端在协议包中指定的MSS(Max Segment Size)大小

  • 当TCP发出一个段后,它会启动一个定时器,等待对端确认收到这个报文段,如果在定时器时间内未收到对端的确认,那么将重发这个段

  • 当TCP收到对端的发来的段后,它将发送一个确认(Ack)。一般这个Ack不是立即发送的,而是和报文段数据一块发送的,被称为"捎带Ack"

  • TCP检查首部和数据的校验和,一旦发现校验和有差错,TCP会丢弃报文段和不确认收到此报文段,等待对端的重发

  • TCP报文段作为IP数据报来发送,到达对端时可能存在乱序情况,TCP会对乱序的IP数据报重新排序,然后交给应用层

  • TCP丢弃重复的数据

  • TCP提供流量控制。TCP连接的每一方都有固定的缓冲空间,TCP接收端只允许对端发送其缓冲区所能容纳的数据,这将防止较快主机致使较慢主机的缓冲区溢出

字节流意味着TCP不关心字节流内容,对字节流的解释交由应用层去做。

TCP协议头

tcp协议格式,tcp协议详细讲解

TCP协议头长度可变,一般为20字节,最大为60字节。

源目的端口:4字节,一对IP和端口确定一个TCP连接,IP协议头中的IP地址确定主机,而TCP协议头中端口用来确认应用进程,端口范围为0~65535

发送序号:4字节,用来标识发送端到接收端的数据字节流,用序号对每个字节流进行计数,最大值为2^32-1,之后又从0开始

确认序号:4字节,用来标识期望收到对端的下一个序号,值为上次成功收到的发送序号加1。只有ACK标志为1时,确认序号才有意义。

首部长度:4bit,标识TCP协议头长度,协议头最终长度为此取值*4

标志位

  • URG:紧急指针

  • ACK:确认序号有效,连接建立之后,这个标志为总是被置1

  • PSH:接收方应该尽快将这个报文交给应用层,普通的数据发送该位置1

  • RST:重建连接,当连接出现异常时,发送RST报文,该位置1

  • SYN:建立TCP连接时置1

  • FIN:关闭TCP连接置1

窗口大小:2字节,用来流量控制,通过声明窗口的大小控制对端的报文发送速率。

检验和:2字节,进行数据的校验,发现校验和出错,直接丢弃。

紧急指针:2字节,只有当URG置1时才有效,正的偏移量,给对端发送紧急数据。

选项:0-40字节,可选,最常见是最长报文长度,即MSS,每个连接方通常在通信的第一个报文段指定这个选项,指明本端能接收的最大长度的报文段。