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————>