• 网络协议详解:TCP Part1


    目录

    TCP的可靠性

    TCP的机制

    ack

    编号机制

    1.发送的数据编号(SN)

    2.确认的数据编号(ASN)

    3.编号规则

    4.SN在发送TCP Segment 的 Header 中如何体现

    5.ASN的填写规则

    6.ISN 

    TCP segment扮演角色

     开关在header中的体现

    重传机制

    1.没有收到数据,所以没应答

    2.收到数据,也应答了,但还没有传回来

    3.数据在何时选择重发 

    4.重发失败处理 

    TCP缓冲区 

    发送缓冲区

    接收缓冲区 

    TCP连接

    连接管理

    握手的认识

    同步信息

    握手过程

     syn标志位及携带数据问题

     三次握手

     三次握手过程中的状态转移


    TCP的可靠性

    TCP的可靠性是通过以下这几点实现的:

    1.TCP会尽量把数据发送给对方,但不保证100%

    2.TCP的数据如果发送不成功,会给发送端应用层错误通知,这个时候应用层就知道数据丢失了

    3.TCP可以保证接收方的应用层严格按照发送时的数据顺序接收

    4.TCP保证数据不会无意损坏(UDP也可以)

    5.TCP尽可能地在维护网络质量

    TCP的机制

    ack

    ack代表确认信息,当对方收到信息后,便会将ack发送回发送端,这个时候就直到数据成功传过去了。

    编号机制

    当我们发送数据时,发的肯定是某一段数据,这个时候只需要把需要传递的数据的序列号开头传过去就可以。

    1.发送的数据编号(SN)

    SN 也就是发送的数据编号开头

    2.确认的数据编号(ASN)

    ASN 确认的数据编号,这个信息一般由接收方二次发送回来,代表着发送端的下次开头编号,便于下次发送端发送数据。

    3.编号规则

    一般不从0开始,因为太容易被坏人劫持,太好猜

    一般我们的payload都是byte[]数组,所以我们基本一个字节占用一个编号

    4.SN在发送TCP Segment 的 Header 中如何体现

    TCP 发送和接收的完整数据内容一般称为Segment(段),也就是header和payload的总和

    我们一次会发送多个数据,又因为byte[]数组的连续性,所以我们SN直接填写本次发送数据的第一个字节的数据编号即可。

    在Header中,我们会保存payload中第一个字节的数据(SN编号),这样编号就变得可用了,在我们发送的时候,发送这个字节数据即可,segent会承担payload的长度

    5.ASN的填写规则

    1.在header中,就是32位确认序号那一栏

    2.ASN表示要接收的下一个字节的数据,把它传回给发送端,发送端就知道发什么了

    6.ISN 

     ISN指数据的第一个字节编号,一般不会从0开始,这是处于安全角度考虑,以防恶意用户推测出合法的SN值来加以利用。

    TCP segment扮演角色

    segement就是上图的完整内容合并,它不仅可以担任send的角色,当我们标志位开关被打开时,也具有acknowledge segment的功能。

     开关在header中的体现

    header中是含有标志位的,每个标志位我们就想象成一个开关,开关打开,就具备了响应功能

    重传机制

    重传分为以下两种情况

    1.没有收到数据,所以没应答

    1.有可能是数据还在路上

    2.有可能数据已经丢失了

    2.收到数据,也应答了,但还没有传回来

    1.有可能还在路上

    2.丢失

    我们可以通过设定合理超时时间,解决在路上的问题,我们可以多等一会儿,再不来,那就只可能是丢失了。

    3.数据在何时选择重发 

    无论是数据已经丢包,还是数据正在半路,只要超时没有收到ack,我们都可以选择无脑重发数据

    4.重发失败处理 

    当尝试几次重发后还是收不到ack,我们就停止发送。这里TCP已经用自己最大努力了

    接下来,可以这样操作:

    1.通知应用层,发送失败(一般在write()中就会抛出异常)

    2.尽自己最大努力再尝试联系一下(reset segment) :最后的尝试,没收到也就没收到了

    TCP缓冲区 

    发送缓冲区

    TCP是有发送缓冲区的,因为我也不知道能不能发送成功,所以需要暂时保留数据,以防万一

    一旦数据放到本机的TCP发送缓冲区,就证明算是发送成功了

    接收缓冲区 

    TCP同样有接收缓冲区,用法和UDP一个意思

    TCP连接

    连接是抽象概念,说白了就是两台主机的相互连接,可以进行信息交互

    连接管理

    当我们连接起来,有这么几个阶段:

    握手(连接建立) -> 使用 -> 挥手(连接断开)

    握手的认识

    同步信息

    握手是一个双方信息互相同步的过程

    握手过程

    一般发送方先发送同步请求,由接收方接收后,再放回来发送同步请求和ack,这样,双方就连接起来并且可以互通数据了

     syn标志位及携带数据问题

    同样在header标志位中,打开开关,即可同步

    当我们第一次建立同步时,是不可以携带数据的,因为不知道能不能连接上

     虽然不携带数据,但syn同样会消耗序列号

     三次握手

    上述中描述我们可以看出,两端之间有三次的互通过程,之后可以正常使用,这个就叫做三次握手

     三次握手过程中的状态转移

    我觉得老师的总结已经很到位了

    就是当我发送端发syn的时候起,接收方就会被打开,然后进行我们的三次握手过程就完事了

  • 相关阅读:
    利用 python 脚本 PyRdp 设置 RDS 服务器蜜罐 Honeypot
    MySQL之JDBC及常见错误
    MySQL调优参数配置详解
    Django学习日志07
    Servlet学习(八):Session
    刷题记录:牛客NC16856[NOI1999]钉子和小球
    Java:理解Java软件开发的利与弊
    electron:2.通过COS上传视频video
    谷粒学院——Day05【后台系统前端项目创建、讲师管理模块前端开发】
    windows10系统安装nvm切换电脑node版本
  • 原文地址:https://blog.csdn.net/weixin_65278827/article/details/125948431