1. TCP三次握手
- 首先发起方发起连接请求,置SYN标志位为1,并发送发送序号Seq=x,然后进入SYN_SENT状态;
- 接收方收到连接请求后,将SYN和ACK标志位置为1,确认序号Ack=x+1,产生发送序号Seq=y,发给发起方,并进入SYN_RECVD状态;
- 发起方接收到后,产生确认序号Ack=y+1,并将ACK标志位置为1,发送给接收方,自身进入EST状态;
- 接收方收到确认消息后进入EST状态,整个连接过程完成,可以开始交换数据。
备注:
- SYN标识为建立请求标识,ACK标识为消息确认标识,Ack为确认序号,Seq为发送序号,Ack=Seq+1。
- SYN洪水攻击,就是利用接收方需要发送方最后的确认请求才能进入连接状态这一点进行的;即用特殊手段用虚拟ip往接收方大量发送接收请求,导致socket被占满,从而阻塞正常连接。
2. TCP四次挥手
- 首先发起方将FIN标志位置为1,并发送发送序号Seq=x,然后进入FIN_WAIT1状态;
- 接收方接到消息,进入CLOSE_WAIT状态,接收方发送接收确认消息给发送方,Ack=x+1,ACK标志位置为1;
- 发送方收到确认消息进入FIN_WAIT2状态,等待接收方关闭请求;
- 接收方发送关闭连接请求,FIN=1,Seq=y,进入LAST_ACK状态;
- 发送方收到关闭请求,进入TIME_WAIT状态,并返回确认消息,ACK=1,Ack=y+1,给接收方,发送方等待指定超时时间后进入CLOSED状态;
- 接收方收到确认消息后,进入CLOSED状态,整个连接断开;
备注:
- FIN标志位为断开连接标识;
- 由于连接方式为全双工,所以断开连接是四次;
3. TCP与UDP
TCP是基于链接的,传输数据前需要先建立连接;UDP是无连接,相对不安全的协议,只管发送数据而不考虑对方是否收到,所以UDP相对TCP传输速度快,但是没有TCP安全