网络原理

server/2025/2/12 3:56:29/

UDP

特点:无连接 不可靠传输 面向数据报    全双工

报文格式:

UDP数据报=UDP报头+UDP载荷(应用层数据报)

                         |

源端口   目的端口    报文长度   校验和

TCP

特点:有连接   可靠传输  面向字节流     全双工

 作为传输层协议,首先就需要能表示端口号是啥。

4位首部长度:        指的是报头的长度.不是总tcp报文的长度.

选项:optional  可以通过选项,来选择加长或者不加长。

不加长的时候最少为20.

长度可以变长,最长可以变成60个字节。((首部长度的单位是4个字节)。实际的首部长度是要这个数字的基础上*4.所以为15*4=60)

保留6位

UDP报文长度使用2个字节表示。不能扩展

但是TCP提前申请好一块空间,即是保留位,为了后面发展拓展功能的时候就可以应用这个保留位了。

TCP协议的核心机制

1.确认应答机制

TCP协议来说,要要解决一个很重要的问题,可靠传输.(你发送方能够100%的把数据发送给接收方但是会尽可能.尤其是能够让发送方知道,接收方是否收到.).

在日常生活中,对人打招呼的时候,另一个人一般会回一个招呼,这样回复的应答数据就可以称为“应答报文”。

就是应答报文(1bit)。

但是会出现一种问题,当我们早期发消息的时候会有消息延迟,导致我问你了两个问题,你回复两个问题的时候会导致误会。

网络传输中也会出现这种情况-》后发先至。

这样的问题在我网络通信的时候经常会出现,所以我们就要对传输的数据进行编号,这样就能让应答报文和发送的数据编号,对应起来,

 给应答报文使用的(ack为1的时候才有效)这样的数据就可以根据确认序号区分出要应答哪个上面的报文了,

实际真实的tcp的序号不是按照“一条两条”方式来编号的而是按照“字节”来编号的.

此处报头中写的序号的数值就是载荷部分第一个字节的序号。

每个字节都有编号,字节的编号是连续递增的。

1)对于B来说,<1001的数据都已经确认收到了,

2)B再向A索要从1001开始的数据~~

可靠传输之所以能达成,主要就是依靠“确认应答”机制。

在日常生活中,每个交换机或者路由器是有上限的,当一个机器转发的信息量过多,合作社超出自己能处理的极限的时候,就会把接下来多出来的信息直接丢弃。

2.超时重传

A通过是否收到了ACK(b返回信息)来区分是否出现了 丢包的情况(A等待一定时间后,时间超过了某个阈值,没有收到ACK,就认为出现了丢包现象):

(1)就是A发送信息,B没有收到。

可以重新传输

(2)A发送信息,B接收到了,但是返回响应的时候,A没有收到。

如果B对相同的数据进行两个响应的时候就会出现bug,所以B会进行去重操作。通过发送的序号来去重。

B的内核态中有接受缓冲区,那会把接受的数据放入一个阻塞队列中,然后根据数据的序号来判定这个数据是否在队列中存在(或者曾经在队列中存在过)只要存在过,这个新的数据就不会进入队列,而是直接丢弃。

进入用户态:

调用accept拿到clientSocket拿到InputStream进行read

队列中的数据就会进入到用户态,但是他的序号会保存在这个阻塞队列中继续去重。

在其中也会根据序号自动来排序,让序号小的,在前头,序号大的在后头,并且数据和数据之间的序号始终都是连续的,这样就能提高效率。

超时重传,超时时间,是多少呢?

注意,这个时间,不是固定数值,而是会动态变化随着重传轮次的增加,会变的越来越长~~

这样重传的频率会越来越低,

如果达到一定重传次数就会尝试重置连接。

触发一个“复位报文”尝试重置连接(相当于连接重新开始)

重置就是通信双方清空之前tcp传输过程中接受缓冲区里里的数据啥的都不要了)

但是如果网络出现了严重故障,重置也没有用,就会断开连接 。

就会把信息删除掉。

TCP可靠传输,全靠确认应答超时重传这俩机制支撑着。

3.链接管理

建立连接的流程:三次握手  

两个机器,一见面,然后就进行打招呼,打招呼过程中,没有实质上的数据交互只是为了打招呼而传输一些数据

断开连接的流程:四次挥手

在握手和挥手的过程中,传输的网络数据报,不携带任何业务上的数据


http://www.ppmy.cn/server/39205.html

相关文章

mybatis的xml配置文件以及mybatis使用

数据库配置文件.db(放在resource下)&#xff1a; Mb.driver com.mysql.cj.jdbc.Driver Mb.url jdbc:mysql://127.0.0.1:3306/数据库名 Mb.username root Mb.password 密码 mybatis-config的xml文件&#xff08;放在resource下&#xff09;&#xff1a; <?xml versio…

声明式导航-跳转传参

目录 一、概念解释 二、查询参数传参 三、动态路由传参 四、两种传参方式的区别 五、动态路由参数可选符 一、概念解释 声明式导航&#xff1a;<router-link>标签 跳转传参&#xff1a;在跳转路由时&#xff0c;进行传值。 二、查询参数传参 语法&#xff1a;<…

信息技术自主可控的意义,针对国产化替换,服务器虚拟化或比公有云更具优势

我们之前在文章《博通收购VMware后&#xff0c;经销商和用户如何应对&#xff1f;新出路&#xff1a;虚拟化国产替代&#xff0c;融入信创云生态》中提到&#xff1a; 从信创整体发展和政策标准来看&#xff0c;供应商必须满足两个条件&#xff1a;一是融入国产信息技术生态&am…

git学习指南

文章目录 一.版本控制1.认识版本控制2.版本控制功能3.集中式版本控制4.分布式版本控制 二.Git的环境安装搭建1.Git的安装2.Git配置分类3.Git配置选项 三.Git初始化本地仓库1. git init/git clone-获取Git仓库2. 本地仓库文件的划分3. git status-检测文件的状态4. git add-文件…

MySQL没有初始化配置文件设置属性

情况描述 安装mysql的时候&#xff0c;为了速度&#xff0c;并没有配置my.ini或者my.cnf文件&#xff0c;数据库因为断电&#xff0c;导致数据都看不见了&#xff0c;一直提示不存在&#xff0c;这时候需要修改配置文件&#xff0c;将innodb_force_recovery设置为0到6的值&…

【Qt】界面定制艺术:光标(cursor)、字体(font)、提示(toolTip)、焦点(focusPolicy)与样式表(styleSheet)的深度探索

文章目录 前言&#xff1a;1. cursor: 设置按钮的光标2. front&#xff1a;设置字体3. toolTip: 鼠标悬停提示4. focusPolicy&#xff1a;设置控件获取到焦点的策略5. styleSheet : 样式表总结&#xff1a; 前言&#xff1a; 在现代软件开发中&#xff0c;用户界面(UI)的设计和…

vue原生div做触底加载

第一种&#xff1a; 触底加载和图片懒加载的思路一样&#xff0c;屏幕的高度加上滚动的高度快要大于最后一个元素距离顶部的高度的时候就开始加载数据&#xff1b; &#xff08;1&#xff09;clientHeight&#xff1a;屏幕的高度&#xff1b; &#xff08;2&#xff09;scro…

WPF之自定义绘图

1&#xff0c;创建自定义控件类 class CustomDrawnElement:FrameworkElement{public static readonly DependencyProperty BackgroundColorProperty;static CustomDrawnElement(){FrameworkPropertyMetadata meta new FrameworkPropertyMetadata(Colors.SkyBlue);meta.Affects…