TCP的三次握手和四次挥手

本文介绍了TCP协议的基础概念,重点阐述了三次握手建立连接的过程,以及为何需要三次,同时详细解释了四次挥手断开连接的步骤,强调了它们在网络通信中的关键作用。
摘要由CSDN通过智能技术生成

V1.在了解三次握手和四次挥手前,我们先了解一下什么是TCP?

        首先是计算机网络体系结构

img

  • TCP是面向连接的、可靠的、基于字节流的传输层通讯协议,http是基于http协议传输的
  • TCP的报文格式图TCP 包头格式
    • 源端口、目的端口号
    • 序号(seq):用于解决包乱序的问题,因为tcp会将网络包分成多个段发送
    • 确认序列(ack):用于确认对方是否成功收到传输的数据,如果失败了,则重新发送
    • 状态码:主要的状态码有SYN(发起一个连接)、ACK(回复)、RST(重新连接)、FIN(结束连接)等
    • 窗口大小:主要是用于流量控制和拥塞控制,在服务端和客户端中都定义一个传输的窗口来做到限流的效果,防止一次性发送或接受太多而导致的网络拥挤

2.三次握手(服务器和客户端连接)

2.1.三次握手的流程

                   

  1. 一开始客户端和服务端都是处于CLOSED状态,然后服务器主动监听某个端口,服务端进入LISTEN状态
  2. 然后客户端会随机创建一个序号x放到SYN报文的序号(seq = x)中,再发送这个SYN报文到服务端,这时客户端进入SYN_SENT状态
  3. 当服务端接收到客户端发送的syn报文后,服务端也会随机创建一个服务端的序号y,并将原先报文中的序号增加一放到应答序列(ack = x + 1)中,并且将报文中的seq变为服务器的序号(及seq = y),然后将报文的状态码的SYN和ACK标志位置为1,最后发送到客户端中,此时服务端进入SYN_RCVD
  4. 客户端接收到服务端的ACK报文后,会发送一个SYN报文,这个SYN报文中的应答序列为客户端ACK报文的序号加一(ack = y + 1),此次可以携带数据传输。客户端进入ESTABLISHED状态
  5. 服务端接收到客户端发送ACK报文后会进入ESTABLISHED状态

2.2.为什么一定要三次握手,不能四次或者两次?

  1. 三次握手才可以解决重复历史连接的初始化(主要原因)
  2. 三次握手才可以同步双方的序列号
  3. 三次握手才可以避免资源浪费

3.四次挥手(服务器和客户端断开连接)

3.1.四次挥手的流程

  1. 客户端发送FIN报文,客户端进入FIN_WAIT_1状态
  2. 服务端接收到FIN报文后会发送ACK报文,服务端进入CLOSED_WAIT状态
  3. 客户端接收到服务端的ACK报文后会会进入FIN_WAIT_2状态
  4. 等待服务端自己内存处理完数据后,会发送FIN报文,服务端进入LAST_ACK状态
  5. 客户端接收到服务端的ACK报文后,会发送ACK报文,并且进入TIME_WAIT状态
  6. 服务端在接收到到ACK报文后进进入CLOSED状态
  7. 客户端在经过2MSL段数据后也会进入CLOSED状态

3.2.为什么是四次挥手而不是三次或者五次?

        因为客户端和服务端都需要发送FIN报文和FIN报文的ACK报文,只有这样才能确保服务端和客户端不能发送和接受消息

最后理解完后可以做一道23年OPPO春招原题:oppo春招三次握手题目

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值