TCP的三次握手和四次挥手:

TCP三次握手用于客户端和服务端建立连接的过程。

首先客户端向服务端发送标识位SYN=1,以及一个随机的序号seq= x。发送完后,客户端进入SYN—SEND状态,也就是同步已发送状态。

服务器接收到客户端的数据包后,向客户端发送标识位SYN = 1,ACK = 1,以及随机序号seq = y,确认号ack = x + 1;发送完后服务端进入SYN_RCVD状态,也就是同步已接受状态。

客户端接收到服务器的反馈之后,再向服务器发送标识位ACK = 1,以及确认号ack = y + 1。服务端再检查标识位ACK是否为1,确认号ack是否为y+1。如果两者都相等,那么代表连接建立完毕。客户端和服务端都进入ESTABLISHED状态,也就是连接已建立状态。

为什么要三次握手的原因:我们假设client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。

假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。

所以,采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

然后就是TCP是需要全双工的,也就是客户端和服务端都需要能够发送和接收消息。

例子:

A向B发消息表白

B收到后,也发了个消息,说同意

A接着又发了个消息说那我们现在是对象了

TCP四次挥手:

TCP四次挥手用于客户端和服务端断开连接的过程。

客户端和服务端都能主动的请求释放连接。这里以客户端主动请求释放连接为例子。

首先客户端向服务端发送一个标志位FIN = 1,一个序号seq = u。发完后,进入FIN_WITE_1状态。

然后服务端接收到后向客户端发送一个标识位ACK = 1,以及确认号ack = u + 1,序号seq = v;发完后进入CLOSE_WAIT状态。

然后服务端再向客户端发送以标识位FIN = 1,ACK = 1以及确认号ack = u + 1,序号seq = w;发完后进入LASK_ACK状态

最后客户端向服务端发送标识位ACK = 1,确认好ack = w + 1,序号u + 1。发完后进入CLOSED状态,服务器端接收后也进入CLOSED状态。

为什么是四次握手:因为客户端向服务端发起断开请求时,只是表明客户端没有数据要发给服务端了。而服务端可能还有数据要发给客户端,因此服务端接收到客户端的请求后发送了确认,然后需要接着向客户端传输数据,当服务端数据也传输完成了之后,便回向客户端说明自己数据也已经发送完了,之后客户端收到消息,才会发出最后的断开通知。

例子:

A向B发消息提出分手,说不爱他了

B收到A消息,反过来问A为什么

A没有回答B,过一段时间B也不爱A了,于是B给A发消息说同意分手

A收到B的同意后,发了个分手快乐。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值