传输层协议—网络

news2024/12/28 20:41:19

文章目录

  • 1.TCP
    • 1.1TCP协议段格式
    • 1.2可靠机制
      • 1.2.1确认应答机制
      • 1.2.2超时重传机制
      • 1.2.3连接管理机制
      • 1.2.4流量控制机制
      • 1.2.5拥塞控制机制
    • 1.3效率机制
      • 1.3.1滑动窗口机制
      • 1.3.2延迟应答机制
      • 1.3.3捎带应答机制
    • 1.4粘包问题(tcp问题,应用层的数据包)
  • 2.UPD和TCP
    • 2.1UPD和TCP的区别
    • 2.2UDP问题

1.TCP

1.1TCP协议段格式

在这里插入图片描述
TCP:传输的数据的控制,可靠和效率是成反比:越可靠,效率越低,TCP是综合考虑了两者,取的一个均衡,不是保证绝对意义的可靠,也不是绝对意义的效率最高

1.2可靠机制

1.2.1确认应答机制

(1)发送的数据,接收端需要返回确认接收到数据报的应答
在这里插入图片描述

(2)数据会进行编号,并使用32位序号保存
(3)ack的标志位是1,会使用32位确认序号保存
(4)下一个是接受到的数据报连续序号的最大值+1(说明接收端将之前的数据全部接收到了)

1.2.2超时重传机制

(1)发送端超过一定的时限没有接收到ack应答包,就会进行重传
(2)这里的时限是动态变化的,与网络的环境有关,时限是成指数级增长的,重传达到一定的次数就会关闭连接
(3)没有接收到ack应答包,可能是发送数据丢包,也可能是ack应答丢包
(4)重传指的是数据包重新发送
在这里插入图片描述
在这里插入图片描述

1.2.3连接管理机制

  1. 建立连接:三次握手(建立连接本质是双方保存了一个连接状态)
    流程:
    (1)客户端发送syn,申请建立客户端到服务端的连接;
    (2)服务端返回syn+ack,申请建立服务端到客户端的连接,其中ack是对第一个数据包的应答(注意:ack和syn可以合并一起发送,也可以分开发送,合并一起发送就是一个数据包,两个标志位置为1);
    (3)客户端返回ack,对第二个数据包的应答;
    (3)

  2. 断开连接:四次挥手
    流程:
    (1)客户端发送syn到服务端,申请关闭客户端到服务端的连接
    (2)服务端返回ack,服务端的状态置为close_wait
    (3)服务端发送fin到客户端,申请关闭服务端到客户端的连接,客户端的状态置为time_wait
    (4)客户端返回ack,服务端状态置为closed,客户端等待一定的时间将状态置为closed
    在这里插入图片描述

  3. 重点问题:
    (1)双方的连接状态,为什么最后才是closed
    客户端接收到第三个数据报不能马上置为closed,因为第四个数据报可能会发生丢包(服务端无法断开连接),服务端就会根据超时重传机制重新发送第三个数据报,此时如果客户端是closed就无法接收了,双方都要保证可靠的关闭连接,如果是一端关闭,一端还存在就会出现藕断丝连的情况
    (2)第2,3个数据报为什么没有合并
    第二个数据报是系统内核返回的,不需要程序写代码来发送,而第三个数据报是程序调用close方法发送的(服务端在关闭连接前可能还需要做一些其他的工作)
    (3)第2,3个数据报是否可以合并
    将第二个数据报放在缓冲区(可能立即发也可能不是),对应的第三个数据报也是发送到缓冲区,此时,如果第二个数据报还在缓冲区就可能合并发送
    (4)服务端出现大量的close_wait的原因
    服务端没有执行close方法(因为只有执行了close才会发送第三个数据报)
    (5)客户端接收第三个数据报状态是time_wait需要等待多久
    2msl,1msl是单个报文传输的最大时间,需要等待的是第四个返回及可能的重传数据

1.2.4流量控制机制

(1)发送端发送速度如果快于接收端,程序读取速度就可能导致接收缓冲区被打断进而引起系统丢包,重传再次丢包的问题(程序读取指的是程序从缓冲区读取接收的数据)
(2)tcp协议首部:16位窗口大小指的是流量窗口大小
(3)接收端接收能力有限,主动告诉发送端自己的接收能力(接收能力指的是接收端接收缓冲区后剩余的空间大小,返回的ack应答包还会使用窗口大小字段来设置接收能力的大小)

1.2.5拥塞控制机制

(1)网络状态不明的情况下,贸然的发送大量的数据报就可能产生网络拥塞
(2)含义:发送端发送数据之前先根据“拥塞窗口”来进行探路(拥塞窗口是动态变化的)
(3)如何变化:从1开始,先指数增长,再线性增长,网络拥塞导致大量丢包后重置为1
在这里插入图片描述

1.3效率机制

1.3.1滑动窗口机制

(1)作用:以并发的方式发送数据报,减少等待时间(通过叠加等待时间),提高数据传输效率
(2)窗口大小指无需等待应答而可以继续发送的数据报最大值
(3)窗口大小确定:窗口大小=min(流量窗口大小,拥塞窗口大小)
(4)滑动窗口的大小决定吞吐率(一定时间网络数据传输数量越大,吞吐率越高)
(5)滑动窗口滑动的方式:可以滑动的位置是下一个序号的最大值减去窗口的起始位置(下一个是x代表接收端在x序号之前的数据报都已接收)
(6)已确认接收的数据都是保存在缓冲区的(发送端保存在发送缓存区(可能需要重传),接收端保存在接收缓冲区(可能需要去重))
(7)发生丢包的情况:
①ack丢包:没有影响,后续的ack也能表示序号前的全部接收
②发送的数据报丢包:接收的ack下一个序号是接收端,接收到的连续序号最大值+1(如果中间有部分没有接收到就相当于不连续);快重传:连续3次接收到下一个是x就表示从x开始的数据报丢包,需要重传
(8)理解缓冲区:把网络数据传输理解为发快递对方返回一个应答在这里插入图片描述

1.3.2延迟应答机制

(1)接收端返回流量窗口代表接收缓冲区的可用空间大小,如果立即返回流量窗口大小就会比较小,不划算(不划算的原因是接收端可能接收速度比较快,读走以后就可以设置的更大)
(2)接收端返回的流量窗口,不是立即返回而是等待一定的时间(等待一定的时间就是延迟应答的由来),这样返回的流量窗口大小就可能更大(流量窗口是滑动窗口大小的决定因素之一,而滑动窗口大小又是网络吞吐量的决定因素之一,所以是效率机制延迟时间应答效率就更高)
(3)延迟的条件是由数量和时间来限制(数量指的是每几个包)(时间指的是不能超过最大延迟时间,超过时间发送端就认为丢包会进行超时重传)

1.3.3捎带应答机制

不管是客户端还是服务端都既可以是发送端也可以是接收端,不管是客户端还是服务端接收到数据后返回的ack应答包(作为接收端),可以和发送的数据报(作为发送端)合并在一起发送给对方

1.4粘包问题(tcp问题,应用层的数据包)

  1. 应用层需要约定统一的协议,明确包与包之间的边界
  2. 没有明确边界就会出现粘包问题
    (1)在传输层,如果基于tcp协议,面向字节流,没有关闭流可以一直收发数据
  3. 解决方案:明确包之间的边界
    (1)固定大小的包:读、写都按照固定大小来发送\接收
    (2)可变大小的包:发送时包含长度的信息,接收时就按照这个信息读取相应大小的数据,也可以使用分隔符
  4. udp协议:因为是面向数据报(发送数据是一整块的发,接收也是一整块的收),固不存在粘包问题

2.UPD和TCP

2.1UPD和TCP的区别

在这里插入图片描述

2.2UDP问题

(1)基于传输层udp协议设计一个可靠的/大小不限的数据传输?
在应用层自己写代码来实现类似tcp的可靠机制:引入tcp类似的字段(序号、确认序号等),引入可靠机制(连接管理机制等)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter 性能测试实例分析

一、性能测试分类: 1、基准测试 2、并发测试 3、负载测试 4、压力测试 1、基准测试: 也是单用户测试,测试环境确定以后,对业务模型中的重要业务做单独的测试,获取单用户运行时的各项性能指标,为多用户…

C# 细说async/await的用法

目录 一,引言 二,实例演示 2.1 多线程同步执行下载任务,任务完成后通知 2.2 异步执行下载任务,任务完成后通知 三,async/await的用法 3.1 跨线程修改UI控件 3.2 异步获取数据 一,引言 首先先来区分…

【Go】实现一个代理Kerberos环境部分组件控制台的Web服务

实现一个代理Kerberos环境部分组件控制台的Web服务 背景安全措施引入的问题SSO单点登录 过程整体设计路由反向代理登录会话组件代理YarnHbase 结果 背景 首先要说明下我们目前有部分集群的环境使用的是HDP-3.1.5.0的大数据集群,除了集成了一些自定义的服务以外&…

python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 🚀Haar分类器是一种基于机器学习的目标检测算法,它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的,可以用来描述目标的边缘、角落和线条等特征。 使用…

Jenkins (一)

Jenkins (一) Docker Jenkins 部署 一. 安装 jenkins $ mkdir -p /home/tester/data/docker/jenkins $ vim jenkins:lts-jdk11.sh./jenkins:lts-jdk11.sh 内容 #! /bin/bash mkdir -p /home/tester/data/docker/jenkins/jenkins_homesudo chown -R 1000:1000 /home/tester/da…

利用LightHouse进行合理的页面性能优化,看这一篇就够了!

利用LightHouse进行合理的页面性能优化,看这一篇就够了! 前言一. Lighthouse下载1.1 相关指标概念1.2 Lighthouse 优化建议 二. 跟着 Lighthouse 进行性能优化2.1 Enable text compression 开启文本压缩2.2 Resize images 重新设定合适大小的图片2.3 Eli…

Java阶段五Day08

Java阶段五Day08 文章目录 Java阶段五Day08内容回顾学习内容目的自动配置原理SPI-API:一对类似的概念 自定义Starter属性配置问题 网关组件SpringCloud Gateway网关架构微服务网关介绍Spring Cloud Gateway(技术选型)网关转发入门案例明确案例需求实现案…

学习系统编程No.31【多线程互斥与同步】

引言: 北京时间:2023/7/16/14:32,摆烂至今,在耍这方面,谁能比我行,哈哈哈,乐观!欠了一堆课要补,等我们把线程相关知识学完,对于系统编程方面我们搞定的就差不…

二分类结局变量Logistic回归临床模型预测——分训练集和测试集(完结)

1. 介绍 2. 基线特征 3. 单因素多因素logistic回归分析及三线表 4. 构建临床列线图模型 5. 模型评价 6. 外部数据集验证 7. 另一种发文章的办法,分训练集和测试集,分析上述3-6节的内容 这里就讲一下如何分训练集和测试集,其余的步骤和之前是一样的,分训练集和测试集用…

Fiddler网络调试器,抓包工具供大家学习研究参考

Fiddler 是一个 http 协议调试代{过}{滤}理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断 点,查看所有的“进出”Fiddler 的数据(指 cookiehtmljscss等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为…

从Vue2到Vue3【零】——Vue3简介

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建 文章目录 系列文章目录前言一、Vue3的发布带来了什么1.1 性能提升1.2 源码升级1.3 支持TypeScript1.4 新特性1.5 支持 vue3 的UI组件库 二、创建Vue3.0工程2.1 什么是Vite2.2 利用Vite创建Vue3.0工程2.3 利用vue-cli脚…

下载最新版 VC_redist.x86.exe / VC_redist.x64.exe for Visual Studio 2015, 2017, 2019, and 2022

目录 1、如何处理程序需要的C/C运行时库? 2、VC_redist.x64.exe的主界面以及支持的命令行参数 3、到微软官网上下载最新版本的VC_redist.x86.exe / VC_redist.x64.exe VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&a…

总结几个GPT的超实用之处【附带Python案例】

GPT(Generative Pre-trained Transformer)是人工智能领域中最受欢迎的预训练语言模型之一,由OpenAI开发。该模型使用深度学习技术,可以自动生成各种文本,如文章、日记、小说等。GPT的超实用之处有很多,下面…

【Ubuntu 20.04LTS系统】安装CUDA11.8、cuDNN,可进行CUDA版本切换

Ubuntu 20.04LTS系统安装CUDA11.8、cuDNN,可进行CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项2. 安装CUDA3. 安装cuDNN4. CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ # 默认注释了源码镜像以提…

java项目之毕业生就业信息管理系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的毕业生就业信息管理系统。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java …

哇~真的是你呀!今天是LINUX中的SSH服务。

目录 前言 一、概述 二、身份验证机制及验证过程 三、加密机制 四、基本参数 五、基本操作 六、操作 前言 SSH(Secure Shell)是一种加密网络协议,用于远程登录和安全传输数据。在Linux系统中,SSH服务是一种常见的远程管理工具&am…

python copy.copy与copy.deepcopy 区别

结论 b a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 b copy.deepcopy(a): 深拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。 import copy origin [1, 2, [3, 4]]…

CS拒绝连接,Cobalt Strike连接失败,Cobalt Strike使用方法(二)

本文主要介绍Cobalt Strike的界面及使用方法。 界面 菜单介绍 Cobalt Strike New Connection // 新建连接,可连接多个服务器端 Preferences // 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录 Visualization // 主要展…

精益生产有哪些管理工具?

精益生产有哪些管理工具? 一、什么是精益生产 智能制造是落实我国制造强国战略的重要举措,加快推进智能制造,是加速我国工业化和信息化深度融合、推动制造业供给侧结构性改革的重要着力点,对重塑我国制造业竞争新优势具有重要意义…

java项目---2048

目录 游戏介绍 游戏玩法 全代码 (1)Main类: (2)GamePanel类 (3)Card类 (4)GameFrame类 项目设计思路 1.绘制一个窗口 2.创建菜单 3.创建所有空白卡片 &…