【计算机网络】TCP三次握手四次挥手

TCP三次握手四次挥手

一、TCP和UDP

1⃣️用户数据报协议UDP

  • UDP在传输数据前不需要建立连接,远程主机收到UDP报文后,不需要给出任何确认
  • UDP虽然不提供可靠服务,但是是一种最有效的工作方式,一般用于即时通信
  • UDP首部8个字节
  • UDP面向报文

2⃣️传输控制协议TCP

  • 提供面向连接的服务。数据传送前要建立连接,传送结束后要释放连接
  • 不提供广播或者多播服务。由于TCP提供可靠的、面向连接的服务,使协议数据单元首部增大太多,占用许多处理机资源(TCP的可靠性体现在TCP传递数据前,会有三次握手来建立连接,而在数据传递时,有确认、窗口、重传、流量控制、拥塞处理机制,在数据传完后,还会有四次挥手断开连接用来节约系统资源)
  • TCP一般用在文件传输、收发邮件、远程登录
  • TCP首部20个字节
  • TCP面向字节流

二、TCP报文段首部格式

请添加图片描述

各字段意义:

  • 1.源端口和目的端口:各占两个字节,分别写入源端口和目的端口,IP地址 + 端口号可以确定一个进程地址
  • 2.序号/序列号seq(Sequence Number,SN):在一个TCP连接中,传送的字节流中的每一个字节都按顺序编号。该字段表示本报文段所发送的第一个字节的序号。初始序号成为Init Sequence Number,ISN
  • 3.确认号ack:期望收到对方下一个报文段的第一个数据序号

举例:一个报文段序号201,共有100字节数据,当前序列号201(201~300),下个报文段序号301,即确认号为301

请添加图片描述

  • 4.数据偏移(首部长度):指TCP报文段首部长度
  • 5.保留:保留为今后使用

六个控制位:

  • 紧急位URG:置1,表明报文段有紧急数据,是高优先级的数据,应尽快发送,不用排队
  • 确认ACK:ack = 1时确认号字段才有效,否则无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
  • 推送PSH:当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这种情况下,将PSH置为1,并立即创建一个报文段发送出去,接收方收到PSH = 1的报文段就尽快交付接受应用进程,不用等到整个缓存都填满了后再向上交付
  • 复位RST:当RST = 1时,说明TCP连接中出现了严重错误,必须释放重新建立传输连接
  • 同步SYN:SYN = 1表示这是一个连接请求或连接接受报文
    • SYN = 1且ACK = 0时,表明这是一个连接请求报文段
    • 对方若同意建立连接,则在响应的报文段中使SYN = 1且ACK = 1
  • 终止位FIN:用于释放一个连接。当FIN = 1,表明此报文段发送的数据已经发送完毕,并要求释放连接

三、TCP三次握手建立连接

1⃣️三次握手过程详解

目的:确定双方接受、发送能力是否正常、指定自己的初始化序列号ISN为后面的可靠性传输做准备

请添加图片描述
请添加图片描述

2⃣️为什么要三次握手

目的:在不可靠的信道上建立可靠的数据传输,双方确认自己与对方的发送与接收是正常的

请添加图片描述

3⃣️ISN是固定的吗

ISN是随机生成的

4⃣️三次握手过程中可以携带数据吗

第一、二次(SYN = 1)不可以携带数据,第三次可以携带数据

  • 第一次❌:恶意攻击服务器时,如果携带数据,服务器就会在缓冲中不断存放大量数据,使得服务器崩溃
  • 第二次❌:同第一次一样
  • 第三次✅:客户端已经处于ESTABLISHED状态,对于客户端来说,他已经建立起来了,并且已知服务器的接收和发送功能正常,所以是可以携带数据的

5⃣️半连接队列

服务器第一次接收到客户端的SYN后,就会处于 SYN_RCVD 的状态,此时双方没有完全建立连接,服务器就会把这一状态下的请求连接放在一个半连接队列里

完成三次握手之后建立起的连接就会放在全连接队列里,如果全连接队列满的话,就会出现丢包现象

6⃣️SYN洪泛攻击

SYN攻击指的是Client在短时间内伪造大量不存在的IP地址,并向Server不断发送SYN包,服务器回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用半连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至瘫痪

7⃣️如果第三次握手丢失,客户端服务端会如何处理

服务器发完SYN + ACK包之后,如果未收到客户端响应的确认包,也就是第三次握手丢失

那么,服务器会进行首次重传,等待一段时间后仍未收到客户确认包就会进行第二次重传,如果重传次数超过系统规定的最大重传次数,则系统将该连接从半连接队列中删除

每次重传时间一般是指数增长,例如间隔1s,2s,4s,8s……

四、TCP四次挥手释放连接

1⃣️四次挥手详解

四次挥手是由于TCP的半关闭造成的(half-close):TCP提供了连接的一端在结束发送后还能够接收来自另一端数据的能力

客户端或服务器端都可以主动发起挥手动作

请添加图片描述
请添加图片描述

为什么要等待2MSL时间?

2MSL == 一个报文的来回时间

目的:确保服务器端收到客户端的确认报文。如果在规定时间没有收到的话,服务器会重新发送FIN报文给客户端,那么客户端在还没有CLOSED这2MSL时间内,又收到了服务器端的FIN报文,就知道之前的ACK确认报文丢失,就会重新发送ACK确认报文,最终使得服务器端关闭

2⃣️为什么要四次挥手

  • 四次挥手是由于TCP的半关闭特性造成的(half-close):TCP提供了连接的一端在结束发送后还能够接收来自另一端数据的能力
  • 两次握手可以释放一端,四次握手可以释放两端,从而完全关闭TCP连接

【参考】在这里我搞懂了TCP三次握手四次挥手
https://cswiki.top/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值