传输层(port)UDP/TCP——解决怎么发,发多少,出错了怎么办

**传输层:**负责数据能够从发送端传输接收端.

传输层所封装的报头里一定有:源端口号和目的端口号的。
**端口号:**可以标识一台主机中的唯一一个进程(运用程序),这样当数据传输到传输层的时候就可以通过端口号来辨别上层交付的对象是谁。

有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号: ssh服务器, 使用22端口
ftp服务器, 使用21端口
、 telnet服务器, 使用23端口
http服务器, 使用80端口
https服务器, 使用443
执行下面的命令, 可以看到知名端口
cat /etc/services

一个端口号只可以对应一个进程,一个进程可以绑定多个端口号。

传输的协议:结构体字段,把端口号和数据包装。

UDP协议:

UDP的结构非常简单
1、无连接:知道对方的端口号和IP就可以发送数据,不需要链接
2、不可靠:没有确认机制,既不能确定对方是否收到了发送方发送的数据,也就没有重传重传机制——不可靠
3、面向数据报:一次发多少接收方就要读多少
在这里插入图片描述

缓冲区

发送缓冲区:UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
接收缓冲区:UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;——不可靠
在这里插入图片描述

TCP控制协议

可以对数据的传输进行详细的控制——提高可靠性的同时,即使工作繁杂但任然在提高效率。
既然要对传输详细的管控那么其结构一定是要有多个标识数据来实现的,所以结构一定是复杂的。
在这里插入图片描述

报头和有效载荷如何分离:TCP报头:标准报头长度(20)+选项+有效载荷——那么如何分离呢?
4位首部长度就可以表示出报头的大小
但是有效载荷是多大呢??不要忘了TCP包的大小其实就是IP协议的有效载荷的大小:
所以有效载荷=ip有效载荷的大小-TCP报头总大小

缓冲区

TCP的发送端和接收端都有缓冲区
在这里插入图片描述
内核的全双工确认应答机制:
在收报文后,把报文放当接收缓冲区内核就会给发送端发送确认收到的应答报文
——保证了可靠性(只要收到应答就能保证历史最近一条消息接受方是收到的)
在这里插入图片描述
TCP数据发送的方式:
基本理解:发送一个应答一个
在这里插入图片描述
但其实实际中是发送和应答是重叠的——保证可靠性的同时提升效率
在这里插入图片描述

建立连接—三次握手(捎带应答)

TCP双发想要通信的话首先就要建立连接,三次握手建立连接方式可以
1、最小成本验证全双工——双方都可以确认可以向对方收发报文。
2、奇数次握手,保证了一定是客户端先把链接建立好后服务器才会建立连接,防止恶意的客户端不断的让服务器建立连接,自己又不建立连接,服务器要把建立的链接进行管理的如果建立的链接太多的话就会造成服务器卡顿。
在这里插入图片描述

超时重传

在这里插入图片描述

断开连接——四次回首
在这里插入图片描述

滑动窗口+丢包

窗口大小指的是无需等待确认应答而可以继续发送数据的最大值
滑动窗口是发送缓冲区的一个区域,里面有要发送的数据
滑动窗口的大小在连接刚建立成功是由接收端的窗口大小决定,之后如果发生了网络拥塞就由拥塞控制大小
滑动窗口的最大值并不止是16位那么大,他还有一个窗口扩大因子M,来左移M个数的大小。
在这里插入图片描述

如上图:发送前四个段的时候, 不需要等待任何ACK, 直接发送;
收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推;
操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉;
窗口越大, 则网络的吞吐率就越高;
那么如果出现了丢包, 如何进行重传? 这里分两种情

情况1:数据包没有丢失,只是确认丢失,
在这里插入图片描述
情况二:数据包直接丢失
在这里插入图片描述

在这里插入图片描述
流量控制:
接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段, 通过ACK端通知发送端;
窗口大小字段越大, 说明网络的吞吐量越高;
接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
发送端接受到这个窗口之后, 就会减慢自己的发送速度(窗口变小了,每次不用等待ACK应答的段变少了,所以消耗的时间就多了,速度就变慢了)
如果接收端的缓冲区满了,ACK回来的滑动窗口就是0,此时发送端就停止发送数据,而是定期发送一个窗口探测数据段,使接收端把当前窗口的大小告诉发送端。

网络拥塞:
网络和中的数据太多或者网络的环境太差,造成我们发送的大量的数据都得不到应答(出现大量丢包),此时我们采用的方案就不是超时重传了。而是拥塞控制——控制滑动窗口的大小——控制每次发送数据大量,通过指数增长式的试探,当增长到某个特定值后就加法增长。
如果网络非常好,那么此时发送数据的大小就由对方的接收能力决定(滑动窗口),如果网络拥塞,就要用拥塞窗口决定(拥塞避免算法)
滑动窗口大小=min(拥塞窗口大小,对方接收能力)

在这里插入图片描述
拥塞避免算法:指数级(慢开始,快增长)当到达一定阈(yu)值时再线性增长,当检测到网络拥堵(拥堵窗口大小)时,就不用此值/2得到下次拥塞算法的阈值。再此过程中窗口大小任然要遵循min(拥塞窗口大小,对方接收能力)
其实在TCP进行网络数据发送的时候,斌不并不是一开始就根据对法接收能力发送大量数据的,而是就是根据这种拥塞算法来发送数据的
注意:min(拥塞窗口大小,对方接收能力),如果拥塞窗口大小>对方接收能力,那么就说明此时的网络状态是正常的。

延时应答(想给发送端应答一个大一点的滑动窗口)
接收端收到数据后不忙给客户端发送ACK通告自己的滑动窗口,而是等一等,如果接收端在这段时间把数据处理了,那么接收缓冲区能接受的能力就越大,应答回去的滑动窗口就越大,对方的发送速度就越快了。
等多久:
1:等待接收到N个包就应答一次(常用)
2:等待最大延时时间就应答一次(最大应答时间(200ms)<超时重传时间(500ms))

面向字节流

调用write时, 数据会先写入发送缓冲区中; 如果发送的字节数太长, 会被拆分成多个TCP的数据包发出; 如果发送的字节数太短,
就会先在缓冲区里等待, 等到缓冲区长度差不多了, 或者其他合适的时机发送出去; 接收数据的时候,
数据也是从网卡驱动程序到达内核的接收缓冲区; 然后应用程序可以调用read从接收缓冲区拿数据; 另一方面, TCP的一个连接,
既有发送缓冲区, 也有接收缓冲区, 那么对于这一个连接, 既可以读数据, 也可以写数据. 这个概念叫做全双工 写100个字节数据时,
可以调用一次write写100个字节, 也可以调用100次write, 每次写一个字节; 读100个字节数据时,
也完全不需要考虑写的时候是怎么写的, 既可以一次read 100个字节, 也可以一次read一个字节, 重复100次;

粘包问题——由TCP传输来的数据,在http处解决粘包问题

数据的拆分在应用层实现——http/https协议——解决粘包问题
因为TCP是面向字节流的,所以发送过来的数据包之间是粘在一起的,但是他们的顺序是有序的(因为有序号这样的字段),所以我们http就要解决包与包之间的分离,报头和数据之间的分离——对于定长报头,通过报头中的len字段就可以确定这个包有多大,然后根据/n/r 空格就实现了报头和数据之间的分离,这样就解决了粘包问题和向上的反序列化
解决粘包问题:
1,包与包之间通过特殊字符分割
2.定长报文,包与包的大小一样
3,报头+自描述字段(len)__报头的大小是定长的——(我们常用)
在这里插入图片描述

TCP异常

如果在双方网络通信的过程中,突然进程挂了的话,内核(操作系统会自动做四次回首关闭连接(socket套接字文件))——进程终止、机器重启、
如果网线突然被切断的话,服务器是来不及做四次回首断开连接的,那么就需要他每隔一段时间就去询问一下客户端还活着吗(报活/心跳机制),如果客户端一直没有答复那么就会自动关闭连接

listen(socket,default_backlog)的第二个参数default_backlog

创建服务器:
1.创建套接字
2、绑定套接字信息
3、把套接字设置为监听套接字
在这里插入图片描述
4、获取连接
在这里插入图片描述
如果我们把listen的第二个参数设置为1,然后不去调用accept获取连接的话,
此时有客户端的链接请求的话,服务器的内核是会给我们维护一个全连接队列的,虽然我们上层并没有获取连接,但是在队列中是已经帮我们保存了链接,并和客户端链接上的。全连接队列能够保存链接的个数=listen的第二个参数值+1
那么这样做的作用:在服务器很忙的时候来不及accept(),但是链接请求又来了,那么就先保存链接好。——(饭店吃饭的例子)
在这里插入图片描述
问:服务器不获取连接就不会与客户端建立连接吗?
答:否,要看Listen的第二个参数值决定的全连接队列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387856.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单向链表(常规和带哨兵)

1.定义 在计算机科学中&#xff0c;链表是数据元素的线性集合&#xff0c;每个元素都指向下一个元素&#xff0c;元素存储上并不连续 2.分类 链表中还有一种特殊的节点称为哨兵结点&#xff0c;也叫哑元结点、首元结点&#xff0c;它不存储数据&#xff0c;通常用作头尾&…

艾体宝干货 | 如何分析关键网络性能指标?持续接收样品试用申请!

网络性能是企业顺利运营的重要基础&#xff0c;而Allegro流量分析仪作为一款强大的网络性能分析工具&#xff0c;为企业提供了深入了解网络运行状况的途径。在本文中&#xff0c;我们将探讨如何利用Allegro 流量分析仪分析关键网络性能指标&#xff0c;以优化网络性能、提高安全…

视频监控国标GB28181平台EasyGBS如何更换默认的SQLite数据库?

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富&#xff0c;部署灵活&#xff0c;既能作为业务平台使用&#xff0c;也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视…

Apache2之Ubuntu-XXE漏洞渗透

一、配置靶场 第一步&#xff1a;打开kali&#xff0c;作为攻击机&#xff0c;打开是黑屏不要蒙圈&#xff0c;是正常的 第二步&#xff1a;配置局域网主机 探测局域网内的所有主机-- 1、查看虚拟机的网络配置 2、查看到我的子网地址为192.168.189.0 第三步&#xff1a;使用…

文心智能体零代码开发实践,创建一个智能体:从理论到实践AI技术落地

文心智能体引领零代码智能体开发新风尚&#xff0c;诚邀您一同探索这前沿科技的魅力&#xff01;以下为实践创建一个叫”从理论到实践AI技术落地“智能体的步骤。 首先登录官网&#xff1a;文心智能体平台AgentBuilder | 想象即现实 登录后点击&#xff1a;创建智能体 输入“…

C语言例题(图形打印,逆序输出,交换数组,平均值)

一.X形图形 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。针对每行输入&#xff0c;输出用“*”组成的X形图案。 代码展示 #include <stdio.h> int main() {int i0;int j…

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…

LCM接口通讯说明

LCM&#xff08;Liquid Crystal Module&#xff0c;液晶模块&#xff09;接口通讯说明涉及多种接口类型和通讯方式&#xff0c;这些接口和通讯方式的选择取决于具体的应用场景和需求。 最常见的LCD模块接口协议是&#xff1a; 1.并行接口 2.串行接口 3.串行或并行配置到微处…

基于欧氏距离的点云聚类(python)

1、背景介绍 欧式聚类是一种基于欧氏距离度量的聚类算法。它是点云处理中的一个重要步骤&#xff0c;它可以帮助我们从无序的点云数据中提取有意义的信息。一般来说&#xff0c;对点云进行欧式聚类处理&#xff0c;可以帮助后续数据处理&#xff0c;如物体检测与识别、三维重建…

<Rust><iced>基于rust使用iced构建GUI实例:一个CRC16校验码生成工具

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第五篇实例,是一个CRC16校验码转换程序。 本篇内容: 1、CRC16校验码生成 代码介绍 本文的crc16校验码生成工具,主要设计两个方面,一个是crc16 modbus…

【动态规划】力扣.213. 打家劫舍 II

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一…

基于YOLOv8的高压输电线路异物检测系统

基于YOLOv8的高压输电线路异物检测系统 (价格88) 包含 【“鸟窝”&#xff0c;“风筝”&#xff0c;“气球”&#xff0c;“垃圾”】 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数…

文件解析漏洞--IIS--Vulhub

文件解析漏洞 一、IIS解析漏洞 用windowserver2003安装IIS测试 1.1 IIS6.X 方法一&#xff1a;目录解析 在网站下建立文件夹的名字为.asp/.asa的文件夹&#xff0c;其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 1.txt文件里是asp文件的语法查看当前时间 方…

黑马头条Day11- 实时计算热点文章、KafkaStream

一、今日内容 1. 定时计算与实时计算 2. 今日内容 KafkaStream 什么是流式计算KafkaStream概述KafkaStream入门案例SpringBoot集成KafkaStream 实时计算 用户行为发送消息KafkaStream聚合处理消息更新文章行为数量替换热点文章数据 二、实时流式计算 1. 概念 一般流式计…

【Win10】记一次蓝屏修复

最近电脑蓝屏了好多次&#xff0c;错误代码为&#xff1a;IRQL_NOT_LESS_OR_EQUAL 直接搜这个错误代码不太好找原因&#xff0c;于是按照这篇文章[1]来打开错误日志文件。 需要先在windows的应用商店中下载WinDbg 然后&#xff0c;打开目录 C:\Windows\Minidump &#xff0c;…

“论云原生架构及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 近年来&#xff0c;随着数字化转型不断深入&#xff0c;科技创新与业务发展不断融合&#xff0c;各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下&#xff0c;以容器和微服务架构为代表的云原生技术作为云计算服务的新…

CANoe在使用时碰到的一些很少见的Bug

CANoe作为一款成熟且稳定的总线仿真与测试工具&#xff0c;深受汽车工程师们的喜爱。CANoe虽然稳定&#xff0c;但作为一个软件来说&#xff0c;在使用中总会出现一些或大或小的Bug。最近全球范围内的大规模蓝屏事件&#xff0c;是由某个安全软件引起的。而很多CANoe使用者最近…

linux常使用的命令

关机命令 shutdown halt poweroff reboot grep 选项 参数 -l 显示所有包含关键字的文件名 -n 在匹配之前加上行号 -c 只显示匹配的行数 -v 显示不匹配的行 管道符 “|” 左边的输出作为右边的输入 例如&#xff1a;我们找个文件包含abc 但是不含有def的文件 grep …

《如鸢》开通官号,女性向游戏爆款预定

今天&#xff0c;备受瞩目的沉浸式剧情卡牌手游《如鸢》正式开通了官方社媒账号并发布了玩家信。 《如鸢》由灵犀互娱倾力打造&#xff0c;游戏不仅拥有跌宕起伏的权谋剧情&#xff0c;更采用Live2D技术&#xff0c;为玩家带来沉浸式的游戏体验&#xff0c;吸引了众多玩家关注。…

西门子s7第三方(S7netplus)读写操作

和西门子PLC通讯需要使用S7netplus​​这个包&#xff0c;可以在NuGet​​上搜索下载&#xff0c;下载后引入命令空间using S7.Net;​​ 创建PLC对象进行连接使用Write Read进行读写操作即可不需要在发请求帧 //创建Plc对象Plc plc; //西门子设备是s7-1200//参数1 CPu类型//参…