从TCP头看TCP协议,看完我人傻了

本文介绍了TCP协议中的三次握手和四次挥手过程,涉及SYN和ACK标志位以及序列号和确认号的作用。同时,针对Java开发者提供了一份全面的学习资料,包括基础知识、进阶课程和面试准备等内容。
摘要由CSDN通过智能技术生成
  1. B对A说:我确认收到了你的x序列号报文,我的序列号是y,你准备好了吗?

  2. A对B说:我确认收到了你的y序列号报文,我的序列号是x+1

根据上面的描述,我们需要两个标志位

  1. SYN(synchronize)是指这个报文的目的是同步连接需要,即用于表示“你准备好了吗?”。

  2. ACK(acknowledge)是指确认报文,即“我确认收到了你的报文”。

还需要两个值

  1. seq(sequence number)是报文的序列号,即“我的序列号是x”,每个报文都应该有序列号用于表示顺序。

  2. ack(acknowledge number)是报文应答的确认号,即“我确认收到了你的x序列号报文”,如果接收了x序列号的报文,确认号为x+1。

这样我们可以表示出三次握手的具体报文为

  1. A向B发送:SYN=1,seq=x

  2. B向A发送:SYN=1,seq=y,ACK=1,ack=x+1

  3. A向B发送:seq=x+1,ACK=1,ack=y+1

TCP头如下图所示,其包含了三次握手中需要的标志位(SYN、ACK)和两个值(序号和确认号)。

image.png

在三次握手中初步展示了TCP头的格式,本节我们根据TCP头来看一下TCP协议。

数据是如何传递给不同进程的


进程各自占据了单独的端口号,因此只要知道了端口,就能知道数据应该传递给哪个应用。在TCP头部保存源端口目的端口,从而知晓这个数据是从哪里来要到哪里去,接收方拿到数据包后调换源端口和目的端口后回传数据。

如何发送并接收字节流


TCP是一个基于字节流的协议,发送和接收的数据都是字节流,TCP协议通过设置发送和接收窗口来完成数据的传递。这两个窗口的大小不固定,因而称为滑动窗口,这样可以在各种网络条件下保证接收方来得及接收。那么接收方是如何告知发送方这个窗口的大小呢,这就靠TCP头中的“窗口”部分进行控制。

以下图为例,接收方告知发送方当前的窗口值为20字节,那么发送窗口从收到确认的最后一个字节(即30)开始,设定了[31,50]的发送窗口,该窗口内字节允许被发送;接收方在收到一系列有序的字节后,对最后一个按序收到的字节进行确认。

image.png

从TCP头中可以看出,这个窗口值的大小使用2字节表示,最大只能到64KB,这显然是不够的。因此TCP后来引入了缩放因子,用于对窗口值大小的倍率转换。这个值作为扩展字段在TCP头中的“选项”中存储,使用「种类,长度,值」三元组进行表示,窗口缩放值的种类值为3。

四次挥手


  1. A对B说:我的序列号为x,我要关闭连接

  2. B对A说:我确认收到了你的x序列号报文,我的序列号为y

  3. B向A发送完剩余的数据

  4. B对A说:我确认收到了你的x序列号报文,我的序列号为z,我要关闭链接

  5. A对B说:我确认收到了你的z序列号报文

根据上面的描述,除了ACK外还需要一个标志位FIN

FIN(finish):告诉对方我要关闭连接,之后不再发送数据。

这样我们可以表示出四次挥手的具体报文为

  1. A向B发送:seq=x,FIN=1

  2. B向A发送:seq=y,ACK=1,ack=x+1

  3. B向A发送完剩余的数据

  4. B向A发送:seq=z,ACK=1,ack=x+1,FIN=1

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
下**

[外链图片转存中…(img-CKbl31zP-1712306799644)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值