JAVAEE初阶 网络编程(五)

TCP协议

    • 一.TCP协议图
    • 二. TCP中的关键协议
      • 确认应答
        • 后发先至机制
        • 引入序号和确认序号
      • 超时重传
        • 去重机制
      • 建立连接
        • 三次握手

一.TCP协议图

JAVAEE初阶 网络编程(五)_第1张图片

我们可以发现,相比于UDP,TCP协议明显复杂很多,比如32位序号和32位确认序号,4位首都长度,保留位,窗口大小,紧急指针,选项,数据等这都是UDP协议中不存在的,我们就依次来看看TCP协议中的关键内容吧。

JAVAEE初阶 网络编程(五)_第2张图片

接着来介绍6位保留位,我们知道,在UDP协议中,因为受到报头长度的限制,如果我们长度超过报头的长度时,就会发生截断,超出部分就不会保留,那么在TCP中专门有"保留位"这个概念来预备将来想要扩展时所需的长度。

二. TCP中的关键协议

确认应答

确认应答是保证可靠性最核心的机制。在网络传输

后发先至机制

在网络传输的过程中,我们经常会发现有后发先至这种情况,意思就是后发出去的消息先显示出来的情况。

JAVAEE初阶 网络编程(五)_第3张图片

在网络传输过程中,出现后发先至,就会导致错误的含义。
为什么会发生后发先至的情况呢

JAVAEE初阶 网络编程(五)_第4张图片

那么为了解决后发先至这种情况,我们来引入一些规则。

引入序号和确认序号

引入这种之后,应答方就会告知发送方,我回答的是哪个数据。就不会导致被错误的理解。

JAVAEE初阶 网络编程(五)_第5张图片
JAVAEE初阶 网络编程(五)_第6张图片

而应答报文中的第一个序号,是按照发送报文的最后一个字节的序号+1得到的。

JAVAEE初阶 网络编程(五)_第7张图片

在确认应答机制中,通过应答报文来反馈回送给发送方,表示当前的数据正确收到了。
应答报文,也就是acknowledge,ack的缩写。

在这里插入图片描述

保留位中的第二位,就是ACK。如果当前报文是应答报文,ACK就会从0变成1.

超时重传

如果这一切数据的传输都是顺利的,那么接收方就会收到ACK应答报文,表示数据传输过程中传输正确,那么,如果在传输的过程当中,遇到丢包的情况,收不到ACK应答报文,这时候就需要超时重传上场了。

在发送方传输数据时,等的时间里,收到了ACK应答报文,如果等了好久都还没有收到, 那么发送方就会认为在传输的过程发生了丢包,就会把刚才的数据包再次传输。但是等待的时间有一个最大值阈值。

JAVAEE初阶 网络编程(五)_第8张图片

去重机制

JAVAEE初阶 网络编程(五)_第9张图片

超时确实会重传,但是重传也会有一定的次数限制,不会无休止的重传。
1.重传到一定程度,还没有ack应答报文,就会尝试重新连接,如果连接不上,就会放弃连接。
2 重传时间也不是一成不变的,重传到一定程度,会随着重传的次数而增大。

建立连接

建立连接的代码表示:

在这里插入图片描述

三次握手

此处的连接是虚拟的连接,抽象的连接,目的是让双方都能够保存到对端的信息。

JAVAEE初阶 网络编程(五)_第10张图片

虽然看起来图上有四次交互,但是有两次可以合并为一次,也就是中间的ack和syn可以合并为一处,最终形成三次握手。

所谓的建立连接的过程,就是服务器和客户端各自向对方发起一个syn,接收一个ack,其实在双方第一次交互的时候,连接就已经建立好了,但是最终要完成连接的建立,确立出后续进行通信,还需要接下来的步骤走完才可以,等到所有的握手环节都走完,服务器才会保留对端,也就是客户端的信息。

最终四步交互可以变成三步。

JAVAEE初阶 网络编程(五)_第11张图片

三次握手的意义是什么?为什么要进行三次握手。

  1. 可以先针对通信路径,投石问路,通信链路是否畅通。
  1. 针对通信双方,检验一下发送能力和接收能力是否正常。

JAVAEE初阶 网络编程(五)_第12张图片

  1. 服务器和客户端双方协商一些必要的参数。

在这里插入图片描述

协商参数的时候,大部分是以选项来体现的,最少0字节,最多40字节(因为报头部分占有20字节),TCP在一次通信过程中,每次开始的序号并不是从0/1开始的,而是选择一个较大的数字,以这个数字来继续计算,即使是同一个客户端和服务器,每次连接开始的序号也不同。

你可能感兴趣的:(网络,java-ee,java)