TCP三次握手和四次挥手(一)

1.TCP报文

在这里插入图片描述
1.序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记。

2.确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务器端都可以发送,Ack = Seq + 1。

3.标志位:每个标志位占用1Bit,共有6个,分别为 URG、ACK、PSH、RST、SYN、FIN;--------- URG:紧急指针是否有效。为1,表示某一位需要被优先处理。-----ACK:确认号是否有效,一般置为1.------PSH:提示接收端应用程序立即从TCP缓冲区把数据读走。------PST:对方要求重新建立连接,复位。------SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定,建立连接。------FIN:希望断开连接。

2.三次握手

2.1三次握手的目的

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

客户端发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达服务器。

本来这是一个早已失效的报文段。但服务器收到此失效的连接请求报文段后,就误认为是客户端再次发出的一个新的连接请求。于是就向客户端发出确认报文段,同意建立连接。

客户端不会向服务器的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

2.2三次握手的过程

在这里插入图片描述

一:第一次握手
客户端执行connect函数,向服务器发送连接请求报文段,此时TCP报文首部的同步位SYN=1,这时客户端进入SYN_SENT-同步已发送状态,等待服务器的确认。
二:第二次握手
服务器收到请求报文段后,若同意建立连接,则向客户端发送确认,在确认报文段中SYN=1,ACK=1。这时服务器进入了SYN_RCVD(同步收到) 状态,客户端进入ESTABLISHED状态。
三:第三次握手
客户端在收到服务器的确认信息后,还要给服务器发出确认,确认报文段将ACK置1,TCP连接已经建立服务器都进入ESTABLISHED状态。

三次握手完成后服务器就知道了客户端发送数据的序列号,客户端也知道服务器发送数据的序列号。

3.四次挥手

3.1四次挥手的目的

TCP的连接是双向的,故在四次挥手中,前两次挥手用于断开一个方向的连接,,后两次挥手用于断开另一个方向的连接。

3.2四次挥手的过程

一:第一次挥手
客户端进程先向TCP发出链接释放报文段,并且停止发送数据,主动关闭TCP连接。连接释放报文段首部FIN=1.客户端进入FIN_WAIT_1状态。
二:第二次挥手
服务器收到连接释放报文段后立即发出确认,把确认报文段首部ACK置为1,后服务器进入等待关闭状态。客户端收到服务器的确认后。进入终止等待状态,等待服务器发出的连接释放报文段。
此时的TCP连接处于半关闭状态,即客户端已经没有数据要发送了,但服务器如果要发送数据,客户端还要接收数据。故服务器到客户端这个方向的连接并没有关闭。
三:第三次挥手
如果服务器没有要向客户端发送的数据了,其应用进程就通知TCP释放连接,这时服务器发出的连接释放报文段需要使FIN=1,这时服务器就进入了最后确认状态,等待客户端的确认。
四:第四次挥手
客户端在收到服务器的连接释放报文后,需要对此发出确认。在确认报文中将ACK置为1.然后客户端进入 时间等待 状态。

注意:
1.第四次挥手完成后,TCP连接还没有完全释放掉,必须经过时间等待计时器设置的2MSL后,客户端才进入关闭状态。 MSL称为 最长报文段寿命,即报文段存活的最长时间。
2.服务器收到客户端的确认报文过后就会立即进入 关闭 状态。服务器的结束TCP要比客户端早一些。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值