运输层-TCP

TCP格式:

伪首部-源端口-目的端口-序号-确认号-数据偏移-保留-状态码-窗口-检验和-紧急指针-选项-填充-数据

序号:TCP对传输的数据字段中的每个字节都进行编码。首部的序号就是第一个数据字节的序号。

确认号:下一个报文中第一个数据字段的编码,也就是上一个报文最后一个字段加1。

数据偏移:TCP首部长度。

保留:全0

状态码:

URG:URG=1表示紧急,立即发送数据。和紧急指针一起用。紧急数据放在数字段的最前面

ACK:ACK=1表示确认号有效。

PSH:PSH=1表示发送的数据接收端尽快交付给进程。

RST:RST=1表示重建连接。断开再连接。

SYN:SYN=1表示连接请求或同意连接。

 SYN=1 ACK=0 连接请求;SYN=1 ACK=1 同意建立连接

FIN:FIN=1 要求释放连接。

窗口:用于流控

检验和:检验整个TCP报文。也要加上伪代码。和UDP相同。

紧急指针:指出紧急数据的最后一个字符。这样就知道哪些是紧急数据。紧急数据从第一个数据字段开始

选项:TCP只有MSS选项。

MSS:最大报文段长度

告诉对方最多能接收的多长的数据字段(是TCP里面的数据字段)。默认536B

网络上都能接受的报文段长度:556B:536+20

TCP拥塞控制

 慢开始+拥塞控制

快开始+拥塞控制+快恢复

TCP连接和释放

连接

SYN=1,ACK=0,SEQ=X (后面传送数据的第一个数据字节序号为X+1)——->

<—–SYN=1,ACK=1,SEQ=Y,确认号=X+1

ACK=1,SEQ=X+1,确认号=Y+1———->

后面发的第一个报文的数据字段的序号就是X+1

释放

FIN=1,SEQ=X(左边发送的最后一个数据字段的最后一个字节的序号+1=X)——>

<——–ACK=1,SEQ=Y,确认号=X+1

<——–FIN=1,ACK=1,SEQ=Y,确认号=X+1   (进程通知对方释放连接)

ACK=1,SEQ=X+1,确认号=Y+1————>