TCP报文段和连接方式
一、TCP协议
首先了解一下什么是TCP协议:
TCP是面向连接网络协议,是指通信双方之间在进行通信之前要先建立连接。TCP提供双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存,用来存储数据。
TCP是先连接,再传输数据,同时具有重传机制。
二、TCP报文段
源端口号:发送方进程的端口号
目标端口号:接受端进程的端口号
序号:发送端对每个字节进行编号,便于接受端正确重组
确认号:对发送端的确认信息
首部长度:确定TCP首部数结构的字节长度
保留:用于以后的扩用
控制位:②⑤⑥经常会用到
① URG:紧急位(紧急指针的有效位)
② ACK:确认位(只有当ACK=1时,确认序列号字段才有效,=0时则无效)
③ PSH:急迫位(标志位=1时,要求接受方尽快将数据送达应用层)
④ RST:重置位(当RST值=1时,通知重新建立TCP连接)
⑤ SYN:同步位(同步序列号位也就是连接位,TCP需要建立连接时将这个值设为1)
⑥ FIN:断开位(当TCP完成数据传输需要断开时,提出断开连接的一方将这个值设为1)
窗口大小:说明本地可接受数据段的数目
校验和:用来差错控制,校验首部和数据,发送和接受时会进行校验和计算
紧急指针:和URG配合使用,当URG=1时有效
选项:可选信息
三、TCP连接方式
1.三次握手
①客户端向服务器发送请求连接报文:Seq序列号=x;SYN=1表示发送连接请求;
②服务器端收到客户发来的请求报文后,同意建立连接,则向客户端发送确认报文:
Seq序列号=y(y为服务器的序列号);Ack确认号=x+1(表示收到客户端的请求);
ACK=1(确认请求);SYN=1(建立连接请求)
③客户端进程收到服务器进程确认后,还要向服务器端给出确认,然后成功建立连接:
Seq序列号=x+1(客户端的序列号为1);Ack确认号=y+1(表示收到服务器的请求);
ACK=1(确认请求)
2.四次挥手
①客户端发送FIN=1;ACK=1请求断开连接,表示没有数据要发送了
②服务器端收到客户端的断开请求后,发送ACK表示确认同意
③服务器端如果所有数据传输完毕,会发送FIN=1;ACK=1 表示数据发送完毕请求断开连接
④客户端发送ACK=1;表示确认同意
表示确认同意
③服务器端如果所有数据传输完毕,会发送FIN=1;ACK=1 表示数据发送完毕请求断开连接
④客户端发送ACK=1;表示确认同意
*②和③中间存在半关闭状态,客户端终止发送数据后仍然可以接受数据