简述TCP三次握手过程
标签(空格分隔):面试题
传输层协议
- TCP协议(传输控制协议) : 可靠的,面向连接的传输协议
- UDP协议(用户数据报协议) : 不可靠的,面向无连接的传输协议
TCP协议数据格式(包头)
- 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认号: Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
- 标志位:共6个, 即URG、ACK、 PSH、RST、 SYN、FIN等, 具体含义如下:
- URG:紧急指针(urgent pointer)有效。
- ACK:确认序号有效。
- PSH:接收方应该尽快将这个报文交给应用层
- RST:重置连接。
- SYN:发起一个新连接。
- FIN:释放一个连接。
知道ACK.SYN.FIN
TCP三次握手
详解
-
第一次握手: Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
-
第二次握手: Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack序号J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
-
第三次握手: Client收到确认后,检查ack序号是否为J+1,标志位ACK是否为1,如果正确则将标志位ACK置为1,ack序号=K+1,并将该数据包发送给Server; Server检查ack序号是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后:
Client与Server之间可以开始传输数据了。