三次握手,四次挥手

三次握手,四次挥手

建立TCP链接需要三次握手,断开需要四次挥手,整个过程如下:
在这里插入图片描述
TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。

TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。

TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。
三次握手
在这里插入图片描述

为什么要三次握手呢?
只有这样才能确认各自的接收发送能力是正常的。
第一次握手

客户主机向服务器主机发送一个SYN连接请求,并指明客户端的初始序列号,即ISN©。如果服务器主机能接收到这样就能证明客户主机的发送和服务器主机的接收能力正常。

SYN —— 用于初如化一个连接的序列号。
第二次握手

服务端发送自己的SYN段作为回应,同样知名自己的ISN(s),为了确认客户端的SYN,将ISN©+1作为ACK数值。这样,每发送一个SYN,序列号就会加1. 如果有丢失的情况,则会重传。

ACK —— 确认,使得确认号有效。

第三次握手

为了确认服务器端的SYN,客户端将ISN(s)+1作为返回的ACK数值。

在三次握手之后客户端和服务端都确认了自己的接收、发送能力是正常的。之后就可以正常通信了。

四次挥手
在这里插入图片描述
第一次挥手

客户端发送一个FIN段,并包含一个希望接收者看到的自己当前的序列号K. 同时还包含一个ACK表示确认对方最近一次发过来的数据。

FIN —— 该报文段的发送方已经结束向对方发送数据。

第二次挥手

服务端将K值加1作为ACK序号值,表明收到了上一个包。这时上层的应用程序会被告知另一端发起了关闭操作,通常这将引起应用程序发起自己的关闭操作。此时客户端进入了FIN_WAIT阶段,继续等待Server端的FIN报文。

第三次挥手

服务端发起自己的FIN段,ACK=K+1, Seq=L,告知客户端,数据发送完成,准备关闭连接

第四次挥手

客户端收到FIN报文确认。准备关闭连接但是网络是不稳定的,所以客户端又向服务端发送了一个ACK报文,ACK=L+1。此时客户端进入TIME_WAIT状态,服务端没有收到ACK则可以重传,服务端收到ACK之后就知道可以断开链接了。客户端等待了2MSL后依然没有收到回复,则证明服务端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

RST —— 重置连接(经常看到的reset by peer)就是此字段搞的鬼。

相关文章:
https://www.zhihu.com/question/271701044
https://www.cnblogs.com/qcrao-2018/p/10182185.html
https://blog.youkuaiyun.com/whuslei/article/details/6667471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值