TCP协议及TCP三次握手和四次挥手

1 TCP协议简介

1) 面向连接的、可靠地、基于字节流的传输层通信协议

2) 将应用层的数据流分割成报文段,发送给目标节点的TCP层

3) 数据包都有序号,对方收到则发送ACK确认,未收到则重传

4 )使用校验和来检验数据在传输过程中是否有误。

 

2 三个重要的TCPflag

ACK:确认序号标志

SYN:同步序号,用于建立连接过程

FIN:finish标志,用于释放连接

 

3 TCP三次握手

TCP三次握手如下图:

流程

1)第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入到SYN_SEND状态,等待服务器确认

2)第二次握手:服务器收到SYN包必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入到SYN_RECV状态

3)客户端收到服务器的SYN+ACK包,像服务器发送确认包(ack=k+1),此包发送完毕,客户端和服务器进入到ESTABLISHED状态,完成三次握手。

 

4 TCP 四次挥手---终止连接(释放连接)

TCP四次挥手如下图:

流程:

1)第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态

2)第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务器进入CLOSE_WAIT状态。客户端收到ACK进入FIN_WAIT_2状态

3)服务器发送一个FIN,用来关闭服务器到客户端的数据连接,服务器进入LSAT_ACK状态

4)客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器端,确认序号为序列号+1。服务器进入到CLOSED状态。经过2MLS时间后,客户端进入CLOSED状态,完成四次挥手。

 

5 常见的几个问题

1)为什么需要三次握手才能建立起连接

答:为了初始化客户端和服务器的sequence number,实现信息对等

 

2)首次握手隐患--SYN超时

原因分析:

  • 服务器端收到客户端的SYN,回复SYN+ACK包之后,未收到ACK确认
  • 服务器端不断重试直至超时,Linux默认等待63秒才断开连接

SYN Flood风险的防护措施

  • SYN队列满后,通过tcp_syncookies参数会发SYN Cookie
  • 弱为正常连接,则客户端会回发SYN Cookie,直接建立连接

 

3)建立连接后,客户端出现故障怎么办

保活机制:

  • 向对方发送保活探测报文,若未收到相应则继续发送
  • 尝试次数达到保活探测数仍未收到响应则中断连接。

 

 

4)为什么TCP是三次握手但是是四次挥手

答:三次握手主要是信息同步。四次挥手的时候,客户端发送终止连接的请求的时候,服务器可能还在发送数据,只能先暂时发送一个ACK报文表示收到了终止连接的请求,待数据发送完毕之后,再发送一个FIN报文终止连接。

 

5)为什么TCP必须经过2MLS后才真正的释放连接

答:如果服务器端没有收到客户端发送的ACK消息,而继续发送了下一个FIN到客户端的最长时间就是2MSL,等到2MSLA是确保服务器端真的接受到了ACK消息。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值