TCP协议内部工作机制一(确认应答,超时重传,连接管理)

这篇具有很好参考价值的文章主要介绍了TCP协议内部工作机制一(确认应答,超时重传,连接管理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

TCP报文结构

TCP的首部长度

保留(6位)

TCP特点

TCP内部的工作机制

一确认应答

超时重传

连接管理

建立建立(三次握手)

 TCP断开连接(四次挥手)


TCP报文结构

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

 TCP的报文结构中,16位源端口,16位目的端口,16位校验和和UDP是一样的,本篇文章就暂不介绍了,可参考俺之前写的UDP协议详解,

TCP的首部长度

TCP的首部长度是指TCP的报头长度,TCP报头的长度是可变的,因为在TCP报头中有选项这一栏,它是可有可无的,如果不加选项TCP报头是固定长度20字节,因此我们也可以算出选项长度:报头长度-20字节.另外注意4位首部长度4个bite位,范围是0->15,单位是4字节,也就是说如果4位首部长度显示的是5,说明这个报头没有加选项,如果4位首部长度是6,说明报头一共24个字节,选项长度为4字节.

保留(6位)

此处TCP的6位保留位为了以后TCP扩展用的,方便以后扩展升级,给报头添加一些新的部分,就可以直接拿这些保留位就好了


其它部分会在接下来的TCP协议工作原理中介绍.

TCP特点

有连接,可靠,面向字节流,全双工

TCP内部的工作机制

一确认应答

确认应答是TCP实现可靠传输最核心机制,可靠传输不是说把消息100%发送给对方(由于网络物理等因素干扰,不可能实现),而是,当我们成功把数据发送给对方,我们知道发送成功了,当我们没有把数据发送给对方,我们能知道发送失败了

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

简单来说就是A给B发了个消息,B收到后就会返回一个应答报文(ack),此时A收到应答后,就知道刚刚发的数据已经顺利发送给了B

序号和确认序号

 TCP协议内部工作机制一(确认应答,超时重传,连接管理)

 同样我给hxd发消息,但是我可能是连续发俩条消息,我发第二天消息的时候没有等第一条消息的ack,hxd收到我的消息就立即回应

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

 此时就可能产生歧义,站在我的视角来看,我说走,上号,hxd的回答是滚犊子,我说"我是恁爹",hxd的回答是好啊,好啊.

由于网络俩个主机之间路线有多条,数据报1数据报2走的可能是不同的路线,数据报1的转发路径上的路由器/交换机和数据报2的路由器/交换机可能不一样,有的转发速率快,有的转发速率慢,此时俩个数据报到达的顺序可能就发生改变,就可能会发生后发先至这种情况!此时我们就需要考虑如何规避这种顺序错乱带来的歧义.

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

 当我们使用序号确认序号,就不怕顺序错乱了,即使顺序错乱,因为有序号和确认序号我们也不会产生歧义

任何一条数据(包括应答报文)都是有序号的,确认序号只有应答报文有(普通报文确认序号字段无意义),如果上面的报文结构图中ACK显示的是1,则表示是应答报文,如果是0,则表示不是应答报文

TCP的序号是面向字节流的,TCP的序号是按照字节来编号的

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

总结,我们通过确认应答机制,通过应答报文来让发送发知道传输是否成功,进一步引入序号和确认序号,针对多组数据进行区分

超时重传

如果我们发送的数据,丢包(发送发发给接受方的数据丢了)了怎么办? 

丢包分为俩种情况,1是发送方发送的数据丢了,2是接受方返回的应答报文(ack)丢了,这俩种情况,在发送方的视角是分不清的,得到的结果都是发送方没有收到接受方的应答报文.所以发送方都会认为是发送的数据丢了

此时就会有TCP的重传机制,TCP有一个时间阈值,发送方发了一个数据后,就会等待ACK,此时开始计时,如果在时间阈值范围内没有收到ACK,就认为是丢包了,就会重新给接受方发送数据

当然,对于接收方发送返回的应答报文丢了,发送方重新发送数据.此时接收方就收到了2份同样的数据,这种情况会有特殊处理(如果不处理,就可能会发生一个支付请求,支付俩次这种情况),TCP存在一个"接受缓冲区"这样的存储空间(接收方操作系统内核里的一段内存),每个TCP,socket对象,都有一个接收缓存区(也有一个发送缓冲区),主机B收到主机A的数据,其实B的网卡已经读到数据了,把这个数据放到B对应的socket的接收缓冲区中(此处的接收缓冲区就相当于是一个阻塞队列),根据数据的序号,TCP很容易识别当前的俩条数据是否重复,如果重复就把后来的这份重复的数据丢了,这样就保证read读到的数据,一定是不重复

总结:由于接收缓冲区序号的存在(接收的数据都是先放在接收缓冲区的,如果发生后发先至也没关系,由于序号的存在,我们很容易接收缓冲区给数据重新排序去重),即使数据重复了,顺序错乱了,接收方也能很好的处理.        

重传的数据是否可能又丢包了?这是有可能的,因此超时重传可能会重传N次,当然N不会是一个很大的数字,当重传几次都丢包,此时再重传意义也不大了.(很可能是因为网络出现重大故障).因此当重传到一定次数后,此时就不会重传了,视为网络出现故障,接下来TCP会尝试重置连接(相当于断开连接,重连),如果还是失败,就彻底断开连接了,另外重传的时候,第一重传的时间间隔和第二次重传的时间间隔不一样,重传的轮次越大,间隔越大

TCP的可靠传输就是通过 确认应答 + 超时重传 来体现的,其中确认应答描述的是传输顺利的情况,超时重传描述的是传输出现问题的情况 

连接管理

TCP建立连接
A和B建立连接,A中就有一部分存储空间存储了B的IP和端口,B中也有一部分空间存储了A的IP和端口,这俩部分信息被维护好了,此时A和B就建立了连接,而保存这部分信息的储存空间(数据结构)也称为 连接

TCP断开连接

A和B把自己储存的连接信息删了,此时就称为断开连接

那我们是如何具体的建立连接 和 断开连接的呢?

建立建立(三次握手)

通信双方需要各自记录对方的信息,彼此之间相互认同

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

SYN:客户端服务器发起的建立连接请求称为SYN,也叫同步报文段

这里为什么要把中间俩次的响应和请求合并到一起?

这俩次交互的时机相同,都是操作系统内核收到建立连接请求的时候,返回响应的同时也会给对方发送一个建立连接的请求 .另外,每次交互都需要封装和分用,交互成本很高,我把俩次交互合并成一次这样只用分装分用一次就可以了.

俩次握手能否完成建立连接的过程?

如果只有俩次,比如这里最后A没有给B返回一个ACK,在A的视角是可以的,知道了A保存至了B的信息,并且知道B保存了自己的信息,但在B的视角,B只知道自己保存了A的信息,但不知道A是否保存了自己的信息.另外三次握手还有个作用是,验证通信双方各自的发送能力和接收能力是否正常,如果是俩次握手,B是不知道自己的发送能力是否正常的

三次握手的意义:

1.让通信双方各自建立对对方的"认同"(保存了对方的信息)

2.验证通信双方各自的接收能力和发送能力

3.在握手的过程中,双方来协商一些重要参数

TCP在建立连接阶段的俩个状态

1.LISTEN
服务器的状态,表示服务器已经准备就绪,随时可以有客户端来建立连接

2.ESTABLISHED
客户端服务器都有的状态,表示连接建立完成,接下来可以正常通信了

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

 TCP断开连接(四次挥手)

四次挥手和三次握手类似,都是通信双方向对方发起一个断开连接的请求,再各自给对方一个回应

TCP协议内部工作机制一(确认应答,超时重传,连接管理)

 这里四次挥手能不能变成三次挥手呢(中间的ACK和FIN能不能合并)

不能,FIN的发起不是由内核控制的,而是由应用程序调用socket的close方法(或者进程退出)才会触发FIN.ACK则是,当收到FIN,操作系统内核就会立即返回一个ACK,所以FINACK发送的时机不同,这俩者之间会有一个时间差,服务器的程序执行到了对应的close方法才会触发FIN.当然如果执行程序执行close刚好和返回ACK的时机一样,此时也是可以合并的

TCP在断开连接阶段的俩个状态

1.CLOSE_WAIT
出现在被动断开连接的一方,表示等待关闭(等待调用close方法关闭socket)

2.TIME_WAIT
出现在主动发起断开连接的一方,假设是A是主动断开的一方,当A进入TIME_WAIT,相当于四次挥手已经挥完了.此时这里的TIME_WAIT要保持当前的TCP连接状态,不要立即释放.因为此时最后一个ACK刚刚发出去,还不确定有没有丢包,因此TIME_WAIT会等一段时间,之后如果没有收到重传的FIN,就认为最后一个ACK没有丢包,就彻底释放连接了(如果这里不保持连接状态,立即释放,如果最后一个ACK丢包了,连接断了,B是没法向A重传FIN的).TIME_WAIT会保持2MSL,意思是A如果经历了2MSL这个时间还没有收到重传的FIN,就认为这个ACK正常到达了(B没有重传FIN),MSL指的是,互联网上任意俩个节点数据传输消耗的最大时间,通常情况下这个值是60s

TCP协议内部工作机制一(确认应答,超时重传,连接管理)文章来源地址https://www.toymoban.com/news/detail-407500.html

到了这里,关于TCP协议内部工作机制一(确认应答,超时重传,连接管理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网路原理-传输层UDP,TCP/IP(确认应答,超时重传,连接管理,三次握手,四次挥手,状态转换,流量控制,滑动窗口,拥塞控制,延时应答,捎带应答,异常情况,面向字节流)-网络层(IP协议,地址管理)

    本节重点 • 理解传输层的作⽤,深⼊理解TCP的各项特性和机制 • 对整个TCP/IP协议有系统的理解 • 对TCP/IP协议体系下的其他重要协议和技术有⼀定的了解 我们之前编写完了基本的 java socket ,要知道,我们之前所写的所有代码都在应⽤层,都是为了 完成某项业务,如翻译等。

    2024年04月15日
    浏览(40)
  • TCP/IP(十二)TCP的确认、超时、重传机制

    一    TCP的 确认应答 机制 ①  带 重传 的肯定确认 ②  细节   二    TCP的 重传 机制 ①  RTT 和 RTO ②    TCP的 重传 机制 ③  超时 重传 ④  快速 重传 ⑤  SACK  重点 ⑥  Duplicate SACK D-SACK

    2024年02月07日
    浏览(24)
  • 确认应答机制与超时重发机制【TCP原理(笔记一)】

    在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK(ACK(Positive Acknowled-gement)意指已经接收。) )。 确认应答机制的基本原理 发送方将数据分割成称为TCP段(TCP segment)的较小单元,并为每个段分配一个唯一的

    2024年02月16日
    浏览(26)
  • 【网络原理】TCP协议如何实现可靠传输(确认应答机制)

    🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本篇主要讲解:TCP协议段格式,TCP的序列号,SYN、ACK标志位,确认应答机制。 目录 1、TCP协议段格式 1.1 TCP格式段 1.2 TCP协议段格式 2、确认应答机制 2.1 后发

    2024年02月09日
    浏览(31)
  • TCP/IP协议栈的心跳、丢包重传、连接超时机制实例详解

    大家好,本文结合具体的问题实例,详细讲解一下TCP/IP协议栈的心跳机制、丢包重传机制等内容,给大家提供一个借鉴和参考。 1、问题概述 虽然软件底层模块在网络恢复后能自动重连上服务器,但会议因为网络问题已经退出,需要重新加入会议。 因为客户特殊的网络运行环

    2024年02月07日
    浏览(32)
  • 【TCP】重传与超时机制

    在网络通信的世界里,传输控制协议(TCP)扮演着一个至关重要的角色。它确保了数据的可靠传输,就像邮差确保每一封信都能准确无误地送达收件人手中一样。但是,网络环境充满了不确定性,数据包可能会因为各种原因丢失或延迟。为了应对这种情况,TCP实现了重传和超

    2024年04月13日
    浏览(26)
  • TCP 协议(四)重传与超时

    TCP 中有四种计时器(Timer),分别为: 重传计时器:Retransmission Timer 持久计时器:Persistent Timer 保活计时器:Keeplive Timer 等待计时器:Timer_Wait Timer TCP 是保证数据可靠传输的。怎么保证呢?带确认的重传机制。在滑动窗口协议中,接受窗口会在连续收到的包序列的最后一个包

    2024年02月15日
    浏览(32)
  • 网络协议--TCP的超时与重传

    TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决

    2024年02月04日
    浏览(25)
  • TCP重传与超时机制:解锁网络性能之秘

    TCP(传输控制协议)是一种面向连接、可靠的传输层协议。为了保证数据的可靠传输,TCP采用了数据包重传的策略来应对在网络中传输过程中可能出现的丢包、错包、乱序等问题。下面我们详细介绍TCP重传的原理与机制。 (1)确认机制(Acknowledgement Mechanism) TCP通信中,接收

    2024年02月06日
    浏览(48)
  • 5.8.6 TCP可靠传输(二)超时重传机制

    5.8.6 TCP可靠传输(二)超时重传机制 超时重传机制是TCP协议保证数据可靠性另外一个非常重要的机制,它的原理是 当发出一个数据之后就开启一个定时器,如果在规定的时间之内没有得到发送数据报的ACK的应答就应当从缓存中把数据取出并重新发送出去,一直到数据发送成

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包