【计算机网络】传输层(三)—— TCP 协议

TCP 是在不可靠的 IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。TCP是TCP/P体系中非常复杂的一个协议。

一、TCP协议的特点

  1. TCP是**面向连接(虚连接)**的传输层协议。
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  3. TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达
  4. TCP提供全双工通信。

发送缓存:准备发送的数据&已发送但尚未收到确认的数据

接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序到达的数据

  1. TCP 面向字节流,TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。

流:流入到进程或从进程流出的字节序列。

TCP 和 UDP 在发送报文时所采用的方式完全不同。UDP报文的长度由发送应用进程决定,而TCP报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。

二、TCP 报文段

TCP 传送的数据单元称为报文段。**TCP报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。**一个 TCP报文段分为首部和数据两部分,整个TCP报文段作为 IP数据报的数据部分封装在 IP数据报中。其首部的前20B是固定的。TCP报文段的首部最短为20B,后面有4N字节是根据需要而增加的选项,通常长度为4B的整数倍。

在这里插入图片描述

TCP的全部功能体现在其首部的各个字段中,各字段意义如下:

  1. 源端口和目的端口。各占 2B。端口是运输层与应用层的服务接口,运输层的复用和分用功能都要通过端口实现。
  2. 序号。占4B,范围为 0   2 32 − 1 0~2^{32}-1 0 2321,共 2 23 2^{23} 223 个序号。TCP是面向字节流的(即TCP传送时是逐个字节传送的),所以TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。

例如,一报文段的序号字段值是301,而携带的数据共有100B,表明本报文段的数据的最后一个字节的序号是400,因此下一个报文段的数据序号应从401开始。

  1. 确认号(ack)。占4B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都已正确收到。

例如, B正确收到了A发送过来的一个报文段,其序号字段是501,而数据长度是200B(序号501~700),这表明B正确收到了A发送的到序号700为止的数据。因此B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为 701。

  1. 数据偏移(即首部长度)。占4位,这里不是 IP数据报分片的那个数据偏移,而是表示首部长度(首部中还有长度不确定的选项字段),它指出 TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位(以4B为计算单位)。因此当此字段的值为15时,达到 TCP首部的最大长度60B。

  2. 保留。占6位,保留为今后使用,但目前应置为0。

  3. 紧急位URG。URG= 1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。但URG需要和紧急指针配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据。

  4. 确认位ACK。仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1

  5. 推送位PSH(Push)。接收方TCP收到 PSH=1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。

  6. 复位位RST (Reset)。RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

  7. 同步位SYN。同步 SYN=1 表示这是一个连接请求或连接接受报文。
    当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK = 1。

  8. 终止位FIN (Finish)。用来释放一个连接。当FIN = 1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。

  9. 窗口。占2B,范围为 0   2 16 − 1 0~2^{16}-1 0 2161。它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据

例如,设确认号是701,窗口字段是1000。这表明,从701号算起。发送此报文段的一方还有接收1000字节数据(字节序号为701~1700)的接收缓存空间。

  1. 校验和。占2B。校验和字段检验的范围包括首部和数据两部分。在计算校验和时,和 UDP一样,要在TCP报文段的前面加上12B的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)。

  2. 紧急指针。占2B。紧急指针仅在URG=1时才有意义,它指出在本报文段中紧急数据﹒共有多少字节(紧急数据在报文段数据的最前面)。

  3. 选项。长度可变。TCP最初只规定了一种选项,即最大报文段长度(Maximum Segment Size,MSS)。MSS是TCP报文段中的数据字段的最大长度(注意仅仅是数据字段)。

  4. 填充。这是为了使整个首部长度是4B的整数倍。

三、TCP 连接管理

TCP连接传输三个阶段:

在这里插入图片描述
TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

(一)、TCP 的连接建立

日常生活实例理解:

在这里插入图片描述

TCP 建立连接的三次握手:

在这里插入图片描述

ROUND 1:
客户端发送连接请求报文段,无应用层数据。
SYN=1,seq=x(随机)

ROUND 2:
服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
SYN=1,ACK=1,seq=y(随机),ack=x+1

ROUND 3:
客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。
SYN=0,ACK=1,seq=x+1,ack=y+1

确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1

同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文

序号 ack:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。

SYN洪泛攻击

SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

可以理解为 三次握手进行时,第三步客户机一直不回应,使进程不断挂起。

服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这使得服务器易受到 SYN 洪泛攻击。

(二)、TCP 连接的释放

参与 TCP 连接的两个进程中任何一个都能终止该连接。TCP 连接释放的过程通常称为四次握手

日常生活实例理解:
在这里插入图片描述

在这里插入图片描述
ROUND 1:

客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。FIN=1,seq=u 。seq等于前面已发送过的数据的最后一个字节的序号加1,FIN 报文段不携带数据,但同样消耗一个序号。

ROUND 2:
服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。

ACK=1,seq=v,ack=u+1

ROUND 3:
服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。

FIN=1,ACK=1,seq=w,ack=u+1

ROUND 4:
客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭。

ACK=1,seq=u+1,ack=w+1

TCP 连接建立和释放的总结

1)连接建立。分为3步:
SYN = 1,seq =x。
SYN = 1,ACK=1,seq=y,ack =x+ 1。
ACK = 1,seq = x + 1,ack =y+ 1。
2)释放连接。分为4步:
FIN = 1,seq = u
ACK = 1,seq= v,ack = u + 1
FIN = 1,ACK= 1,seq= w,ack =u + 1
ACK= 1,seq =u+ 1,ack =w+1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

何为xl

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

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

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

打赏作者

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

抵扣说明:

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

余额充值