TCP三次握手、四次挥手(超详细)

TCP三次握手、四次挥手(超详细)

TCP协议概述

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,旨在适应支持多网络应用的分层协议层次结构。TCP的主要特点如下:

  • 面向连接:TCP提供了一种可靠的、面向连接的字节流服务,能够保证数据在传输过程中的完整性和可靠性。
  • 可靠性:TCP通过一系列机制确保数据的可靠传输,包括数据包的排序、丢失检测和重传等。
  • 字节流:TCP将数据看作字节流,并将其实时传输到接收端。
  • 流量控制:TCP具有流量控制机制,可以防止接收端因接收数据过快而无法处理的情况。
  • 拥塞控制:TCP具有拥塞控制机制,当网络拥塞严重时,可以减缓发送速率,避免数据丢失。

TCP与UDP的区别

TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议(IP)中两种主要的传输层协议,它们有以下区别:

  • 连接性:TCP是面向连接的,在数据传输之前需要通过三次握手建立连接,并在传输结束后通过四次挥手关闭连接。而UDP是无连接的,发送数据之前不需要建立连接。
  • 可靠性:TCP提供了数据传输的确认和重传机制,能够保证数据的有序、可靠传输,适用于需要可靠通信的应用,如网页浏览、电子邮件等。而UDP则没有这样的保证,可能会出现数据丢失、重复或者乱序的情况,但它的简单性使其在实时应用(如音频和视频流)或需要快速传输的应用(如DNS查询)中得到广泛应用。
  • 速度:由于TCP的可靠性和顺序性,其数据处理速度相对较慢。而UDP由于无需确认和重传,处理速度快,适用于对实时性要求高的应用,如流媒体、在线游戏等。
  • 数据流量控制和拥塞控制:TCP具有复杂的数据流量控制和拥塞控制机制,可以根据网络状况动态调整数据传输速度,以避免网络拥塞。而UDP没有这样的控制机制。
  • 应用场景:TCP主要用于需要可靠、有序数据传输的应用,如网页浏览、电子邮件、文件传输等。而UDP则适用于实时应用,如流媒体、在线游戏、VoIP(语音通话)等。

工作原理

TCP的工作原理主要包括以下几个方面:

  1. 建立连接:TCP通过三次握手协议建立连接,以防止错误的连接请求。
  2. 数据传输:TCP将数据分割成适当长度的报文段,并通过IP协议传输到接收端。接收端对已成功收到的字节发回一个相应的确认(ACK),如果发送端未收到确认,将重传数据。
  3. 关闭连接:当数据传输完毕后,TCP通过四次挥手协议关闭连接。

TCP建立连接(三次握手)

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。

  • 第一次握手
    客户端将TCP报文标志位SYN置为1,随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,等待服务器端确认。
  • 第二次握手
    服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
  • 第三次握手
    客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

过程示意图
TCP三次握手示意图

TCP断开连接(四次挥手)

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

  • 第一次挥手
    客户端发起挥手请求,向服务端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
  • 第二次挥手
    服务端收到了客户端发送的FIN报文段,向客户端返回一个标志位是ACK的报文段,ack设为seq加1,客户端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次挥手
    服务端向客户端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
  • 第四次挥手
    客户端收到服务端发送的FIN报文段,向服务端发送标志位是ACK的报文段,然后客户端进入TIME_WAIT状态。服务端收到客户端的ACK报文段以后,就关闭连接。此时,客户端等待2MSL的时间后依然没有收到回复,则证明服务端已正常关闭,那好,客户端也可以关闭连接了。

过程示意图
TCP四次挥手示意图

参考文章:https://zhuanlan.zhihu.com/p/108504297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值