计算机网络—TCP的三次握手和四次挥手

目录

一、TCP基础

1、什么是TCP?

2、TCP运输连接主要有三个阶段

3、TCP的封装格式

二、三次握手

1、过程描述

2、为什么要进行三次握手

三、四次挥手

2、为什么客户端要等待2MSL?、


一、TCP基础
1、什么是TCP?

        TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,它工作在传输层

2、TCP运输连接主要有三个阶段

        连接建立,TCP连接建立的过程通常被称为“三次握手”

        数据传输,在TCP连接建立之后,双方就可以开始发送和接收数据了

        连接释放,当数据传输完成后,TCP连接需要通过“四次挥手”来断开连接

3、TCP的封装格式

①序列号(sequence number):Seq序列号,取值范围[0,2^32-1],用于数据段的标记。TCP是一个面向字节流的协议,这意味着TCP将应用层的数据视为一个无结构的字节流。为了能够在接收端正确地重新组装这些数据,发送端会为每个字节分配一个唯一的序号。这样,接收端就可以根据序号来确定每个字节在原始数据中的位置,并按照正确的顺序将它们重新组装起来。

②确认号(acknowledgement number):Ack确认号,取值范围[0,2^32-1],对发送端的确认信息,告诉发送端这个序号之前的数据段都收到了。如果发送端在一定时间内没有收到某个数据段的确认号,它会认为该数据段在传输过程中丢失了,并会重新发送该数据段,这体现了TCP协议的可靠性和面向连接的特点。Ack = Seq + 1。

③源端口号/目的端口号:均占16位,分别表示写入源端口号和目的端口号,用来标识发送/接收该TCP报文段的应用进程。

④6个控制位

  • 紧急位URG:用于指示报文段中有紧急数据需要优先处理,与十六位紧急指针配合使用。1表示紧急,0表示非紧急。
  • 确认位ACK:ACK取值为1时确认号字段有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。
  • 急迫位PSH:取值为1时,指示发送端TCP立即将报文段交付给接收端的应用进程处理,而不是等待整个缓存填满后再进行交付。
  • 重置位RST:取值为1时,请求重新建立TCP连接。
  • 同步位SYN:取值为1时,请求建立TCP连接。
  • 结束位FIN:取值为1时,请求断开TCP连接。

⑤窗口大小:指明本地可接受数据的字节数,最大2^16=65536b=64K。这可以对流量进行控制。

二、三次握手
1、过程描述

       

①第一次握手:一开始客户端和服务端都处于关闭状态(closed),客户端主动打开,发出建立连接请求,此时客户端进入同步已发送状态(syn_sent),服务转被动打开,进入监听状态(listen)。标志位SYN=1表示请求建立连接,序列号seq=x作为初始值。

②第二次握手:服务端收到请求后,进入同步已接受状态(syn_rcv)标志位SYN=1,确认位ACK=1,序列号seq=y作为初始值,确认序号ack=x+1表示接收到客户端的序列号seq=x,并将其值加1作为自己确认号Ack的值,这是对客户端所选择的初始序号seq的确认。

③第三次握手:客户端接收到服务端返回的请求确认后,进入连接建立状态(establish)。将确认位ACK=1,序列号seq=x+1,确认序号ack=y+1。为什么此时不需要将SYN置1了?因为此时并不是跟服务端进行连接请求,而是连接确认,所以只需要返回ACK=1代表确认。

2、为什么要进行三次握手

①可以防止已失效的连接请求报文段突然又传送到服务端。在客户端长时间未收到确认报文的情况下,客户端可能会重新发送连接请求。如果此时旧的连接请求报文突然到达了服务端,服务端可能会误认为这是一个新的连接请求,从而造成错误。通过三次握手,服务端能够确认当前连接的状态,并拒绝过期的连接请求。

②可以确认双方初始序列号。TCP是一个面向字节流的协议,它使用序列号来确保数据的顺序性和完整性。通过三次握手,客户端和服务器可以交换各自的初始序列号,从而确保后续发送的数据能够按照正确的顺序进行组装。

③可以同步双方初始参数。除了序列号之外,TCP连接还有一些其他的参数需要同步,比如窗口大小(用于流量控制)等。通过三次握手,双方可以交换这些参数,确保后续的数据传输能够顺利进行。

三、四次挥手
1、过程描述

①第一次挥手:客户端发送断开TCP连接请求的报文,客户端进入终止状态1(FIN-WAIT1)。序列号seq=u,是由发送端随机生成的,结束位FIN=1,表示需要断开TCP连接。

②第二次挥手:服务端接收到从客户发出的TCP报文之后,随后服务端结束ESTABLISHED阶段,进入关闭等待状态(CLOSE-WAIT)。发送回复客户端的TCP断开连接请求报文,确认位ACK=1,确认序号ack=u+1,序列号seq=v。客户端接收到改回复报文后,会进入终止状态2(FIN-WAIT2),然后继续等待服务端的回复。

③第三次挥手:服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到客户端的数据是否已经传输完毕,确认传输数据完毕后,将回复报文,进入最后确认状态(LAST-ACK)。结束位FIN=1,确认位ACK=1,确认序号ack=u+1,序列号seq=w

④第四次挥手:客户端收到服务端的TCP断开请求后,进入时间等待状态(TIME-WAIT),时长位2MSL,并且回复服务端的断开请求。确认位ACK=1,确认序号ack=w+1,序列号seq=u+1。

2、为什么客户端要等待2MSL?

目录

一、TCP基础

1、什么是TCP?

2、TCP运输连接主要有三个阶段

3、TCP的封装格式

二、三次握手

1、过程描述

2、为什么要进行三次握手

三、四次挥手

1、过程描述

2、为什么客户端要等待2MSL?


2MSL,MSL最长报文传输时间。客户端在发送了最后一个ACK后,不会立即关闭连接,等时间等待计时器超过后再关闭。如果客户端立即关闭,而ACK又丢失了,服务端会再发送FIN,但是客户端已经断开了连接,不会发送ACK,这个时候服务端就会一直等待客户端的回复,所以是需要2个MSL的。就是为了防止数据丢失,以及防止服务端一直等待。

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值