Java学习 - 网络TCP,UDP协议讲解

news2024/11/19 7:27:58

TCP协议

TCP协议特点

  • 面向连接

    • 应用程序在使用TCP协议之前,必须先建立TCP连接
    • 在数据传输完毕后,必须释放已经建立的TCP连接
    • 类似于打电话
  • 点对点通信

    • TCP协议就像打电话,只能一对一,不能一对多或多对多
  • 可靠传输

    • TCP协议能够保证传输的数据无差错,不丢失,不重复,不乱序
  • 全双工通信

    • TCP协议允许双方同时接收和发送数据
  • 面向字节流

    • TCP协议传输的数据以字节为单位,以流的形式传输

    在这里插入图片描述

TCP报文首部格式

  • 结构图

    在这里插入图片描述

  • 序号示意图

    在这里插入图片描述

组成说明
序号每个数据包的第一个字节位置在全数据中的位置
源端口发送方端口
目的端口接收方端口
确认号期待接收的下一个数据包的序号
数据偏移指TCP报文数据部分开始位置,即TCP报文首部占用空间大小
数据偏移占4位,单位为"4字节",即TCP报文首部最大为15*4=60字节
而TCP报文首部固定部分大小为20字节,即TCP首部可选部分最大为40字节
保留保留,暂时没用
紧急URG告诉发送发应优先发送
确认ACKACK=1时有效,用于建立TCP连接
推送PUSH告诉接收方应优先接收
窗口占2字节,范围[0,2^16-1],用于TCP流量控制和拥塞控制
检验和占2字节,计算检验和时,需要在TCP报文段前加上12字节的伪首部
紧急指针仅在URG=1时有效,指明紧急数据的位置
选项长度可变,只有一种选项:MSS(Maximum Segment Size),最大报文段长度

TCP可靠传输

停止等待协议
  • 概念

    • 发送方发送一个数据包,接收方接收后,返回一个确认包
    • 发送方只有当收到确认包后才发送下一个数据包
    • 现在已经不用这种技术,因为效率太低
  • 丢包情况

    • 接收方没有受到数据包
      • 发送方超时重传
    • 接收方收到数据包,但发送方没有收到确认包
      • 发送方超时重传,接收方收到重复包后丢弃,返回确认包
    • 接收方收到数据包,但发送方超时收到确认包
      • 发送方超时重传,接收方收到重复包后丢弃,返回确认包
  • 示意图

    在这里插入图片描述

    在这里插入图片描述

连续ARQ协议和滑动窗口协议
  • 概念

    • 停止等待协议的改进版:一包一确认效率太低
    • 核心思想:多个包分为一组,收到一个组才进行一次确认
    • 一组的大小就是TCP窗口的大小
    • 现在主要使用这种技术
  • 示意图

    在这里插入图片描述

  • 流程图

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 选择性确认

    在这里插入图片描述

  • 超时重传时间计算

    • 超时重传时间取决于TCP往返传输时间(RTT
    • RTT计算方法1:TCP Timestamp
      • 在发送时放入发送时间点的时间戳,接收方收到时,用接收时间点时间戳减去发送时间点时间戳
    • RTT计算方法2:重传队列中数据包的TCP控制块
      • 不懂不懂

TCP流量控制

  • 概念:流量控制是指TCP连接的两端(发送方,接收方)在进行数据传输时,控制其发送和接收数据包的个数

  • 核心思想

    • TCP协议报文有窗口,发送方叫发送窗口,接收方叫接收窗口
    • TCP传输过程中,发送窗口和接收窗口都会动态改变其大小,从而改变一次发送数据包的个数和一次接收数据包的个数,最终实现流量控制
  • 流程图

    在这里插入图片描述

    在这里插入图片描述

TCP拥塞控制

  • 概念:TCP拥塞控制的参与者是整个网络所有节点,所有节点共同采取措施避免网络的拥塞
慢开始算法
  • 概念:发送方在发送数据包时,一次发送的数量(MSS)随发送次数逐渐增多(第n次发送2^n个)

  • 示意图

    在这里插入图片描述

拥塞控制方案一
  • 示意图

    在这里插入图片描述

快重传算法
  • 概念:

    • 接收方每收到一个失序的分组后立即发送重复确认,这是为了使发送方能够及早知道分组没有及时到达而不要等到自己发送数据时才进行确认
    • 快重传规定:发送方只要一连收到三个重复确认就要立即重传没有准确送达的报文段,而不要等待超时重传时间
  • 示意图

    在这里插入图片描述

拥塞控制方案二
  • 快重传配合快恢复算法

在这里插入图片描述

  • 发送窗口 = min[接收窗口,拥塞窗口]

TCP连接管理

连接建立 - 握手
  • 示意图

    在这里插入图片描述

  • 为什么需要3次握手

    • 背景:假设是2次握手
    • A申请与B握手,A --> B
    • 第一次:A发出建立连接请求r1,但是路由的路线很慢
    • 第二次:因为请求r1走的很慢,超时都不到达,所以A放弃第一次连接请求,发出第二次请求r2
    • B收到r2请求,并发出响应包q2,A收到响应包q2,至此,两次握手成功,连接建立
    • 过了一会,B收到r1,并发出响应包q1,A收到响应包q1,但是A之前已经放弃了第一次请求
    • 由于两次握手的原因,B认为已经建立了连接,而A不认为是建立了连接,所以B就一直维持连接状态
连接释放 - 挥手
  • 示意图

    在这里插入图片描述

  • 为什么要等待2MSL(Maximum Segment Lifetime:最大报文生存时间)

    • 场景

      A主动向B请求断开
      
      1: A --> FIN --> B
      2: A <-- ACK <-- B
      # 此时A --> B连接已关闭
      3: A <-- FIN <-- B
      4: A --> ACK --> B
      
    • 等待2MSL的原因是为了确保 A->ACK->B 能够送达

    • 如果A->ACK->B丢失 --> B认为A<-FIN<-B丢失,进行重传

    • A接收到A<-FIN<-B重传所需时间:A<-FIN<-B超时时间 + A<-FIN<-B传输时间

    • 为了保守与容易计算,保留两个MSL来确保A能接收到A<-FIN<-B重传包

    • 一旦A接收到A<-FIN<-B,就重新等待2MSL

    • 如果A在2MSL都没有收到A<-FIN<-B,则有两种情况

      • B已经收到了A的包:可以关闭
      • B端网络断开了:可以关闭

SYN 攻击

  • 攻击者频繁地与服务器建立连接,造成服务器带宽资源与计算机资源被耗尽

UDP协议

UDP协议特点

  • 面向无连接:发送数据前不需要建立连接
  • 不保证可靠传输:因为不建立连接
  • 面向报文传输
  • 支持一对一,一对多,多对多通信
  • 首部开销小,只占8个字节,伪首部占12字节
  • 不具有拥塞控制功能

UDP报文结构

  • 图中16位UDP长度UDP长度相同

在这里插入图片描述

UDP校验和计算方法

  • UDP包的伪首部和首部和数据报文全部按16位进行划分
  • 然后将它们进行求和【此时参与计算的检验和为0】
  • 然后结果取反码,得到真正的检验和
  • 最后将其放入检验和

UDP检验和使用

  • UDP包的伪首部和首部和数据报文全部按16位进行划分
  • 然后将它们进行求和【此时参与计算的检验和为0】
  • 如果结果为全1,则数据传输没错,否则数据传输出错

DDos攻击

  • 攻击者同时发送大量的UDP包给服务器

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

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

相关文章

分布式锁实现方案-基于Redis实现的分布式锁

目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…

OpenAI CTO谈GPT-5将达博士生智力水平;斯坦福评估排名前十两款来自中国

&#x1f989; AI新闻 &#x1f680; OpenAI CTO谈GPT-5将达博士生智力水平 摘要&#xff1a;美国达特茅斯工程学院采访了OpenAI首席技术官米拉・穆拉蒂&#xff0c;她表示GPT-4的智力相当于高中生&#xff0c;而GPT-5将在一年半后发布&#xff0c;预计达到博士生水平。穆拉蒂…

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中&#xff0c;Alpha Blend&#xff08;也称为Alpha混合&#xff09;是一种用于处理像素透明度的技术。它允许像素与背景像素融合&#xff0c;从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体&#xff08;如窗户、玻璃、水、雾等&#xff09;…

闷热烦躁,精神倦怠?3个食疗方,5款好物,助您清凉度夏~

夏日&#xff0c;阳气旺盛&#xff0c;万物繁荣秀丽&#xff0c;但赤日炎炎似火烧&#xff0c;人们容易闷热、食欲不佳、四肢倦怠、萎靡不振等&#xff0c;再加上蚊虫多&#xff0c;更是让人烦躁不安&#xff01; 5款清凉好物 赶走蚊虫 天气炎热&#xff0c;蚊子、小虫都来了…

webpack【实用教程】

基础配置 配置的拆分和合并 通常 webpack 的配置文件会有3个 webpack.common.js 公共配置&#xff08;会被另外两个配置文件导入并合并&#xff09;webpack.dev.js 开发环境的配置webpack.prod.js 生产环境的配置 开发环境的本地服务 在 webpack.dev.js 中配置 devServer:…

springboot加载bean的方式

在SpringBoot的大环境下&#xff0c;基本上很少使用之前的xml配置Bean&#xff0c;主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式&#xff0c; 1、注解装配Bean 1、使用Component等派生注解 只要在类上加类上加 Component 注解即可,该…

Kotlin 运行代码片段多种方式

目录 场景描述 一、Scratch files and worksheets in the IDE 1、Scratch files(草稿文件) 特点&#xff1a; Scratch files文件创建步骤&#xff1a; 功能解释&#xff1a; Scratch Buffer笔记文件&#xff1a; 2、Worksheets(工单) 1&#xff09;、创建方式不同。 …

基于堆叠长短期记忆网络 Stacked LSTM 预测A股股票价格走势

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

思看科技冲刺上市疑云:募资用途遭强烈质疑,IPO前突击分红

近日&#xff0c;思看科技&#xff08;杭州&#xff09;股份有限公司&#xff08;下称“思看科技”&#xff09;已更新提交2023年最新财务资料&#xff0c;重启科创板IPO进程。贝多财经了解到&#xff0c;思看科技的上市申请于2023年6月获上交所受理&#xff0c;目前已进入问询…

简鹿文件批量重命名:一款文件批量改名高手都在用的工具

作为 IT 行业的搬砖民工&#xff0c;互联网的数据量爆炸性增长&#xff0c;文件管理成为了一项日益重要的任务。"简鹿文件批量重命名"应运而生&#xff0c;旨在为用户提供一个高效、灵活的解决方案&#xff0c;以应对繁琐的文件命名、排序、创建及属性修改等挑战。 这…

足底筋膜炎吃什么药最管用

足底筋膜炎在使用药物后未见明显改善&#xff0c;但通过使用“古顺、敷堂、筋膜”贴后病情得到了缓解。按疗程使用自愈了&#xff0c;这款筋膜贴通过其药物成分渗透到组织中&#xff0c;从根本上消除炎症&#xff0c;从而快速缓解症状&#xff0c;足底筋膜炎得到了明显的改善。…

【思科】IPv6 过渡技术 - 6to4隧道

【思科】IPv6 过渡技术 - 6to4隧道 实验要求实现思路6 to 4 特点注意点IPv4 转 IPv6 格式小技巧 配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3)&#xff1a;IPv6 网络6 to 4 隧道 R3R4基础配置局域网环境(OSPFv3)&#xff1a;IPv6 网络6 to 4 隧道 R5基础配置…

Apifox 快速入门教程

访问示例项目​ 可访问Apifox官网&#xff0c;下载并打开 Apifox 后&#xff0c;你将会看到由系统自动创建的“示例团队”&#xff0c;其中内含一个“示例项目”。 项目中自动生成了与宠物商店有关的数条接口。 手动新建接口​ 新建接口是开发者们最常用的功能之一。Apifox 能…

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用 判断员工是否有权限访问&#xff0c;首先得知道现在操作的人是谁&#xff0c;所以必须先实现登录功能 2 登录流程 ① 提供登录页面&#xff0c;可输入用户名与密码信息&#xff0c;并添加执行登录的按钮。&#xff08;登录页面不能被拦截&#xff09;…

微服务、多租户、单点登录、国产化形成的开源Java框架!

一、项目简介 JVS是软开企服构建的一站式数字化的开源框架&#xff0c;支持对接多种账户体系&#xff0c;支持多租户、支持Auth2、统一登录、单点登录等&#xff0c;支持原生开发、低代码/零代码开发应用。 二、框架核心功能 控制台(首页)&#xff1a;采用配置化的方式 用户…

C语言从入门到进阶(15万字总结)

前言&#xff1a; 《C语言从入门到进阶》这本书可是作者呕心沥血之作&#xff0c;建议零售价1元&#xff0c;当然这里开个玩笑。 本篇博客可是作者之前写的所有C语言笔记博客的集结&#xff0c;本篇博客不止有知识点&#xff0c;还有一部分代码练习。 有人可能会问&#xff…

HarmonyOS Next 系列之可移动悬浮按钮实现(六)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

Huffman树——AcWing 148. 合并果子

目录 Huffman树 定义 运用情况 注意事项 解题思路 AcWing 148. 合并果子 题目描述 运行代码 代码思路 其它代码 代码思路 Huffman树 定义 它是一种最优二叉树。通过构建带权路径长度最小的二叉树&#xff0c;经常用于数据压缩等领域。 运用情况 在数据压缩中&a…

C语言 while循环1

在C语言里有3种循环&#xff1a;while循环 do while 循环 for循环 while语句 //while语法结构 while&#xff08;表达式&#xff09;循环语句; 比如在屏幕上打印1-10 在while循环中 break用于永久的终止循环 在while循环中&#xff0c;continue的作用是跳过本次循环 …

MySQL的综合运用

MySQL版的葵花宝典&#xff0c;欲练此功&#xff0c;挥刀自。。。呃&#xff0c;&#xff0c;&#xff0c;说错了&#xff0c;是先创建两个表&#xff0c;分别是location表和store_info表 示例表为location表和store_info表&#xff0c;如下图所示&#xff1a; 操作一&#xf…