TCP报文结构以及三次握手,四次挥手过程小记

TCP报文结构以及三次握手,四次挥手过程

TCP报文结构

tcp报文结构,参考知乎图片

TCP报文结构以及三次握手,四次挥手过程小记_第1张图片 TCP报文结构以及三次握手,四次挥手过程小记_第2张图片

其中序号代表报文开始字节的序号,序号是建立tcp连接时候随机生成的,之后每下一个的序号是上一个报文的确认号,ack = (y+1)

其中数据偏移有4bit,偏移长度最大60字节

校验和包括了首部和数据部分,还要加上12字节的伪首部来进行校验和计算

TCP报文结构以及三次握手,四次挥手过程小记_第3张图片

TCP连接管理

TCP建立连接三次握手:

1.客户端发送TCP连接请求给服务器,此时TCP报文序列号seq=x,同步标志SYN=1进入SYNC_SENT状态
2.服务器接收到TCP连接请求,确认seq=x报文,设置请求回复报文确认号ack = x+1,同时设置同步标志SYN=1,序列号seq=y,即发送syn+ack报文给客户端。并进入SYNC_RECV状态
3.客户端接收到服务器发送的syn+ack报文,并返回 ack = y+1确认报文给服务器,同时客户端进入SYNC_ESTABLISH状态,服务器接收到确认报文后同样进入该状态。完成三次握手。

TCP四次挥手断开连接:

1.客户端发送TCP结束连接请求,并且停止发送数据,释放报文首部,发送请求报文设置标志位FIN=1,序列号seq=u给服务器,并进入FIN-WAIT-1状态第一次挥手
2.服务器收到后,发送确认报文标志位ACK=1,确认号ack=u+1,序列号seq=v给客户端,此时服务器进入了半关闭状态,此时服务器进入CLOSE-WAIT状态,服务器TCP服务进程会通知高层应用客户端不会有新的数据传输了,但是如果服务器发送数据给客户端,客户端仍然要接受第二次挥手
3.客户端接收到seq=v的报文后,确认服务器知道释放连接通知了,客户端进入FIN-WAIT-2状态,之后要等待服务器发送最终释放连接信号才能关闭TCP连接,在此期间还要接收服务器发送的剩余报文第二次挥手
4.服务器端发送完最后的数据后,发送释放连接报文标志位FIN=1,确认号ack=u+1,序列号seq=w给客户端,此时,服务器进入LAST-ACK最后确认释放状态,等待客户端的确认报文回复即可释放连接。 第三次挥手
5.客户端接收到服务器最终释放请求报文后,必须发送确认报文给服务器,确认报文标志位ACK=1,确认号ack=w+1,序列号seq=t 发送给服务器,客户端进入TIME-WAIT状态,此时连接还没有释放,之后要等待2*MSL(最大报文寿命时间)后,客户端客户撤销TCB中相应的TCP连接的内容信息后,才完全关闭连接,进入CLOSED状态。这里服务器是比客户端先进入CLOSED状态的,因为服务器接收到关闭连接确认报文要比 2*MSL 等待时间后要更早一些。四次挥手完成。 第四次挥手

TCB (transmission control block)

TCB (transmission control block) is like a table that maintains all TCP sessions

TCB是一个包含了TCP连接的所有会话状态的资源块,用于在不同设备之间传输数据时由于有设备差异,因此采用TCB进行封装数据。在发起TCP连接请求前,客户端会主动创建TCB,而服务器会被动建立TCB,从而才能合理获取到请求信息的内容。

TCB里面包含了如下的资源的字段

  • 连接ID connection ID
  • 套节字序号 socket numbers
  • 缓存 buffers
  • 正在使用的TCP报文 segements in use
  • 队列 queue
  • 其他字段 others

你可能感兴趣的:(tcp/ip,网络,服务器)