TCP基础
TCP报文基础
- TCP是一个全双工,面向连接,点对点,面向字节流的传输层协议
- 设有发送缓存与接收缓存
- 发送缓存用来:发送应用程序传送给发送方TCP准备发送的数据,TCP已发送但尚未收到确认
- 接收缓存:按次序到达但尚未被接受应用程序读取的数据,不按顺序到达的数据
- TCP把应用层浇下来的数据视为一串五结构的字节流
TCP报文格式
-
源端口与目的端口:2B,不解释
-
序号字段:4B,TCP面向字节流(逐字节传送),所以TCP连接的数据流有编号,序号字段的值指的是本报文段所发送的数据的第一个字节的序号
eg:一个报文段字节序号为301,数据100B,表明本报文段的数据最后一个字节序号为400,所以下一个报文段序号为401开始。 -
确认号字段:4B,表示期望收到对方的下一个报文段的序号,若确认号为N则表示序号为N-1的所有数据都已成功收到
eg:B收到A发送的一个报文段,序号字段为501,数据长200B,这表明B正确收到了700为止的数据,因此B期望收到A的下一条数据编号为701,于是B发送给A的确认号字段为701 -
数据偏移:4B,表示首部长度。单位为32位(4B),eg:字段值位15,表示TCP首部长60B
-
保留字段:保留
-
紧急位URG:URG=1,表明有紧急数据,要尽快传送,URG与紧急指针一起使用。即数据从第一字节到紧急指针所指便是紧急数据
-
确认位ACK:ACK=1确认号ack才有效
-
推送位PSH:PSH=1,尽快交付应用进程,不在等缓存填满再上交
-
复位位RST:RST=1有严重差错,必须释放连接,然后再重新建立连接
-
同步位SYN:SYN=1表示这是一个连接请求,连接接收报文
eg:SYN=1,ACK=0这是一个请求连接过程,若对方同意连接就在响应报文中SYN=1,ACK=1这表明是一个连接接收报文 -
终止位FIN:FIN=1biaoshi 发送方发送数据完毕,要求释放连接
-
串口字段:2B,指允许对方发送的数据量,接收方的数据缓存有限,所用用窗口值作为接收方让发送方设置的发送窗口
eg:确认号701,窗口大小1000,这表明从701开始,发送此报文的一方还有接收1000B的接收缓存空间 -
校验和:2B,校验首部与数据部分,与UDP一样,加伪首部
-
紧急指针:16位(2B),紧急数据多少字节
-
选项字段:长度可变。TCP最初只规定了MSS(最大报文长度)。MSS时TCP报文数据字段的最大长度。
-
填充:4B整数倍
TCP连接管理
TCP两端端点,称之为套接字。一条TCP连接被一个套接字唯一确定。
TCP使用C/S架构,主动发起连接的是client客户端,被动等待连接的是server服务器