TCP三次握手(详解)

1:TCP在传输层和网络层数据传输的过程


TCP协议是在传输层端到端的传输信息,既然说到传输层协议,那么就讲一下传输层协议在数据传输过程中的位置:在这里插入图片描述

左边家庭要给右边家庭通信中的(应用层和传输层和网络层)

左边家庭的孩子小红(应用层中 应用进程)写了一封信(应用消息),然后小红将信交给了哥哥李雷(传输层),李雷将信放入到家门口的信箱里,邮递员来了将信取走放到了邮政汽车上,然后邮政汽车肯定不是直达的,他们到了转运中心(路由器)转到另一辆汽车上根据时间成本,路线成本等选择一条路继续运输(网络层)。

2:TCP报文


在这里插入图片描述

其中比较重要的字段

a:序号(sequence number):

Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

对序号的补充:

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的 报文段 (通常受该计算机连接的网络的 数据链路层 的 最大传输单元 ( MTU )的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层**。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。**然后接收端实体对已成功收到的包发回一个相应的确认( ACK );如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个 校验和 函数来检验数据是否有错误;在发送和接收时都要计算校验和。

b:确认号(acknowledgement number):

Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

c:标志位(Flags):

共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下

URG:紧急指针(urgent pointer)有效。

ACK:确认序号有效。

PSH:接收方应该尽快将这个报文交给应用层。

RST:重置连接。

SYN:发起一个新连接。

FIN:释放一个连接。

三:TCP的三次握手的图示

============================================================================

1:图示


所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。

以下为客户端主动发起连接的图解:

在这里插入图片描述

2:客户端各个状态:


CLOSED状态:为关闭状态

SYN_SENT状态:为请求连接状态, 当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。

ESTABLISHED状态:连接成功

3:服务端的各个状态:


LISTENING状态:监听状态, State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。

SYN-RCVD状态:收到和发送一个连接请求后等待对方对连接请求的确认。

ESTABLISHED状态:连接成功

补充:SYN-RCVD状态

当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,

如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。如果发现有很多SYN_RCVD状态,那你的机器有可能被SYN Flood的DoS(拒绝服务攻击)攻击了。

SYN Flood的攻击原理是:

在进行三次握手时,攻击软件向被攻击的服务器发送SYN连接请求(握手的第一步),

但是这个地址是伪造的,如攻击软件随机伪造了51.133.163.104、65.158.99.152等等地址。

服务器 在收到连接请求时将标志位 ACK和 SYN 置1发送给客户端(握手的第二步),

但是这些客户端的IP地址都是伪造的,服务器根本找不到客户机,也就是说握手的第三步不可能

完成。这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个

未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

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

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

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

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

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

img

最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
电子书+2021年最新大厂面试题。
[外链图片转存中…(img-si8SDuOK-1712224803640)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值