TCP的连接与释放

1.TCP/IP网络模型

协议: 不同计算机与网络设备硬件与操作系统之间的通信都需要一种规则,这种规则就是协议
TCP/IP是网络中各类协议族的总称,比如: TCP、UDP、IP、FTP、HTTP、ICMP、SMTP 等都属于TCP/IP族内的协议。

网络协议可以划分为四层

  • 链路层: 负责封装和解封装IP报文,发送和接受ARP/RARP报文等。
  • 网络层: 负责路由一级把分组报文发送给目标网络或主机。
  • 传输层: 负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文
  • 应用层: 计算机网络的顶层,负责向用户提供应用程序,如HTTP、域名系统DNS、文件传送协议FTP

2.TCP和UDP

UDP全称用户数据报协议

TCP全称传输控制协议

区别:

  • 连接: UDP是无连接的,TCP是面向连接
  • 可靠性传输: TCP实现可靠传输。UDP则是不可靠传输尽力交付。
  • 传输方式: TCP面向字节流。UDP面向报文,对于应用层交付下来的报文,既不合并,也不拆分
  • 适用场景: TCP适用于可靠传输的应用,如文件传输。UDP适用实时性的传输,如电话会议、直播
  • 传输速度: TCP由于实现可靠传输速度相对较慢,UDP速度快

TCP的连接与释放

TCP建立连接(三次握手)

  1. 第一次握手,客服端向服务端发送建立连接的请求,将SYN置为1,初始化通信序号seq为x,客户端进入SYN-SENT状态
  2. 第二次握手,服务端接收到连接请求后,若同意连接,则向客户端发送建立连接的应答,SYN置为1,初始通信序号seq为y,ACK为1,确认序号ack为x+1,随后进入SYN-RECEIVED状态
  3. 第三次握手,客户端收到应答后,需要再向服务端发送一个确认报文,ACK为1,确认序号ack为y+1 通信序号seq为x+1。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
    在这里插入图片描述

注:TCP规定SYN为1的报文段不能携带数据,但是要消耗一个序号,前二次报文段是TCP连接请求确认报文段,不能携带数据。第三个报文段是普通的TCP确认报文段可以携带数据,也可以不携带数据,若不携带则不消耗序号。

为什么不能两次握手?

因为加入一个失效的TCP连接请求延迟与TCP服务端建立连接,而此时TCP客户端处于连接关闭状态,TCP服务端会一直处于连接建立状态,浪费资源。
服务端为了确保客户端有正常的数据接受能力,在客户端接受到服务端应答后,要及时的向服务端发送一个确认应答,以证明客户端的有效性。
在这里插入图片描述

TCP释放连接(四次挥手)

  1. 第一次挥手:客户端向服务端发送释放连接的请求,FIN(终止位) 为1,客户端进入 FIN_WAIT_1 状态
  2. 第二次挥手:服务端收到释放请求后,向客户端发送应答ACK为1,并带上自己的seq,随后进入CLOSE_WAIT状态,此时客户端和服务端的连接已经释放,服务端不再接受客户端发送的数据。但是由于TCP是全双工的,服务端还可以向客户端发送数据,客户端收到应答后进入FIN_WAIT_2状态并持续60s,若60s内没有收到服务端发送的请求会直接关闭。
  3. 第三次挥手:服务端将还没有发送完的数据发送,完毕后向客户端发送释放连接请求FIN为1,随后进入LAST_ACK状态
  4. 第四次挥手:客户端收到释放请求后,向服务端发送ACK确认应答,随后进入TIME_WAIT状态,并持续2MSL(最长报文段寿命),在该时间段客户端没有收到服务端的重发请求后,进入CLOSED状态。服务端收到应答后也进入CLOSED状态,连接断开。
    在这里插入图片描述

TCP客户进程在发送完最后一个确认报文段后,为什么不直接关闭而是要等待2MSL时间后才关闭?

因为如果第四个报文段丢失,那么TCP服务端进程会一直进行TCP连接释放的超时重传,但是此时TCP客户端已经关闭,导致服务端进程一直无法关闭浪费资源。
在这里插入图片描述

为什么TIME_WAIT时间这么久?

1. 保证客户端ACK确认应答能够被服务端接收到,并正常的断开连接进入CLOSED状态释放资源。
2. 防止具有相同四元组的数据包被找到,如果第四次挥手中没有了time_wait,服务端发送的数据包客户端就无法收到,等到下次重新启用时客户端就收到了上次的旧数据包

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

〖雪月清〗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值