首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TCP协议的三次握手和四次放手

一、TCP/IP的概念

TCP/IP不是一个协议,而是一个协议簇的统称,下图有部分协议以及所对应的层

二、TCP协议

TCP是一个属于传输层的面向连接的、可靠的、基于字节流的传输层通信协议。为了确保信息能够准确无误的到达,TCP采用了著名的三四握手和四次放手。

三、三次握手(ACK和ack是两种不同概念)

1、客户端将标志位SYN置为1,随机产生一个seq=x,将该数据包发送给服务器,客户端进入SYN-SENT状态了,等待回应

2、服务器收到数据位包后由标志位SYN=1知道客户机在请求建立连接,然后将SYN=1和ACK=1,ack=x+1,并将seq产生随机数seq=y,然后将数据包发给客户端确认连接请求,服务器进入SYN-RCVD状态

3、客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确就将标志位ACK=1,seq=x+1,ack=y+1,数据包发送给服务器,服务器确认ack=y+1和ACK+1,客户端和服务器都进入ESTAB-LISHED状态完成三次握手,然后进行数据传送

四、四次挥手

数据传送完成后,进行四次挥手释放连接

1、客户端发送一个FIN,用来关闭到服务器的数据传送,将seq产生随机数u发送给服务器,客户端进入FIN-WAIT-1状态

2、服务器收到FIN后,发送一个ACk,seq为随机数,ack=u+1,三项发给客户端确认,服务器进入CLOSE-WAIT状态

3、服务器再发送FIN=1,ACK=1,seq为随机数w,ack=u+1用来关闭数据传送,服务器进入LAST-ACK状态

4、客户端收到FIN后,进入TIME-WAIT状态,接着发送ACK=1,seq=u+1,ack=w+1,服务器进入CLOSED状态,完成四次挥手

五、学习扩展

1、SYN攻击

在三次握手当中,此时服务器处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。

2、为什么握手三次挥手要四次?

因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180124G03TLD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券