握手协议以及TCP的三次握手协议四次挥手协议

握手协议定义异步模块在通信时的接口信号时序,保证异步电路各个组件之间数据流动并且不发生冲突的一种机制。主要包括两类:四段握手协议(Four-Phase)和两段握手协议(Two-Phase)。

  • 四段握手协议是基于电平的,只有高电平表示控制信号的请求和应答,因此控制信号有归零的动作。四段握手协议因此也被称为归零(Return-to-Zero,RTZ)握手协议,归零信号也被称为“电平信号”。这里的“四段”(Four-Phase)是指通信动作的次数:①发送端准备好数据后会将请求信号置高;②接收端接收数据后将应答信号置高;③发送端将请求信号置低作为响应(此时数据可以不再保持有效);④接收端通过将应答信号置低来做出应答。此时,发送端就可以开始下一个通信周期。四段握手协议的缺点是多余的归零翻转造成了不必要的时间和能量的损耗。
  • 两段握手协议是基于事件的,控制信号的请求和应答通过上升沿或者下降沿来表示。两段握手协议中,请求和应答信号使用信号线上的电平翻转沿来进行编码。在这种编码中的。0→1和1→0翻转是没有区别的,它们都代表一次信号事件。理想情况下,两段握手协议应该比四段握手协议电路速度更快,但是由于不同问题所对应的电路往往复杂多变,因此不能简单地说哪种协议是最好的。

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
TCP的建立需要三次握手,而断开连接则需要四次挥手。
三次握手四次挥手

  • 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG。其中,对于我们日常的分析有用的就是前面的五个字段。
    它们的含义是:
    SYN: 表示建立连接;
    FIN: 表示关闭连接;
    ACK: 表示响应;
    PSH: 表示有 DATA数据传输;
    RST: 表示连接重置。
  • 三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互。
    (1)第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
    (2)第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    (3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
    连接建立后,客户端和服务器就可以开始进行数据传输了。
  • 四次挥手协议,别名连接终止协议。其性质为终止协议。由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
    (1)第一次挥手: TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送;
    (2)第二次挥手: 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号;
    (3)第三次挥手: 服务器关闭客户端的连接,发送一个FIN给客户端;
    (4) 第四次挥手: 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
    问:为什么连接的时候是三次握手,终止的时候却是四次挥手?
    答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步挥手。
    三次握手四次挥手

突然看到一个帖子讲的很好,通俗易懂,附:https://blog.csdn.net/li0978/article/details/52598121

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值