TCP、UDP

news2024/11/26 14:57:26

      • TCP和UDP
      • TCP
          • 报头
          • 三次握手,四次挥手
          • 确认机制(重传ARQ)
          • 重传机制
          • 拥塞控制(慢开始-拥塞避免,快重传、快恢复)
          • 流量控制(滑动窗口)
          • 差错控制(校验和)
      • UDP
          • 报头

TCP和UDP

TCPUDP
传输层传输层
面向连接,可靠,全双工,连接可管理(不丢,顺序,无错)无连接,不可靠,一对一,一对多,多对一,多对多
面向字节流:应用程序每次交给TCP一个数据块,存储与TCP缓冲区,作为无结构字节流,经TCP拆分,选适合长度发送面向报文:应用层交给UDP的报文保留报文边界,原样发送,每次一个数据段,当过大时,由IP层分片(效率低)
传输单位TCP报文段用户数据报 ip包中协议号17
优缺点安全,速度,效率低,稳定,有状态不安全,快,不稳定,无状态
机制流量控制(滑动窗口)不分组,组装排序
差错控制(校验和)由应用层负责可靠,ip层提供不可靠包交换
拥塞控制(慢开始-拥塞避免,快重传、快恢复)网不好时易丢包
三次握手,四次挥手少攻击
确认机制(重传ARQ)耗时,占用资源,容易被攻击
应用效率要求低,准确性高,要求有连接效率要求高,准确性低
eg:文件传输(FTP,HTTP)准确,慢即时通信(qq)
发送接受邮件(POP,IMAP,SMTP)准确,慢在线视频
远程登录(talent,SSH)准确,有连接网络语音(TFTP)
编程模型在这里插入图片描述在这里插入图片描述
客户端连续发送&服务器缓存足够大一次接收,无边界UDP多次连接,发一次,收一次,有边界

TCP

报头

在这里插入图片描述

源端口:2B,大于1023的16位数,由基于tcp应用的用户进程随机选择
目的端口:2B,由应用程序指定
顺序号:4B,32bit无符号数,范围0~2^32 -1,TCP源向目的发送数据字节流,用顺序号对每个字节计数,表示该报文段中第一个数据字节的顺序。当建立连接SYN=1时,表示该主机选择的该连接的初始顺序号ISN
确认号:4B,发送确认一端期望收到的下一个顺序号,当ACK=1时有效
数据偏移:4bit,报头中32bit字的数目(报头长度)
保留区域:6bit,未来使用,置0
控制位:6bit

URG“1” 紧急指针有效
ACK“1” 确认号
PSH“1” 接收方应尽快将报文交给应用层,不用等等缓冲区满
RST用于复位由于主机崩溃或者其他原因而出现的错误连接,拒绝非法报文段/连接请求。 当RST=1时必出问题
SYN同步序号 “1” 连接请求,用于建立连接和使序号同步
FIN释放连接 “1” 关闭本端数据流

窗口大小:2B,0~2^16 -1,从确认号开始源端可以接收的字节
校验和:2B,对整个TCP报文,发送端计算存储,接收端验证
紧急指针:2B,+顺序号=紧急数据最后一个字节的序号,URG=1时有效
选项和填充:4n B(保证为整数字节),连接方在通信的第一个报文段中指明该选项,指明本端能接收的最大长度报文段(MSS)
伪首部
源ip(4B)+目的ip(4B)+0(1bit)+6(1bit)+TCP长度(2bit)

三次握手,四次挥手

目的

  • 消除旧连接请求SYN对新连接的干扰
  • 同步连接双方的确认号,序列号
  • 交换TCP窗口大小

三次握手后,得到双方序号,最大接收数据大小,以及MSS(最大分段大小)
MSS=MTU(以太网最大传输单元,一般为1500B)-IP头(20B)-TCP头(20固定+12可选)=1448B(1460B)
∴当应用层数据>MSS时,分段发送

确认机制(重传ARQ)
  1. 尽量不发ACK包(ACK包不消耗seq),最好发其他消息时捎带ACK
  2. 任何时候,不超过两个未确认的段(够两个就发ACK)
  3. 延迟确认收到数据后延迟200ms(看是否有其他数据发/收,满足①②)
  4. 当收到的段seq>预期的seq,立即发ACK(快重传)
  5. 收到重复段,丢弃包,立即发ACK(快重传)
  6. 收到缺失段,发ACK

回复按序收到的最后一个序号的确认号(对最后一个数据重复确认)
∴多余ACK为冗余ACK

重传机制

在往返时间RTT(TCP动态估算RTT)内未收到确认,则重传&下一次超时间隔=2倍的RTT
收到三个冗余ACK——>快重传

拥塞控制(慢开始-拥塞避免,快重传、快恢复)

慢开始:拥塞窗口cwnd=1MSS,传输首次被确认则翻倍,直到丢包为止
eg:cwnd=1,阈值ssthresh=cwrd/2
拥塞避免:每RTT,cwnd+1MSS
快速恢复
每个冗余ACK,cwnd+1MSS
收到对丢失报文的ACK,降低cwnd,进入拥塞状态
若出现超时,进入慢开始状态

流量控制(滑动窗口)

收/发双方各有一个窗口大小,防止对方发消息过快
收/发双方各有一个缓冲区,根据窗口大小,已发字节,期待字节,计算可发字节
建立确认重传机制,收到ACK,移动窗口
自动重传请求ARQ

  1. 停止等待ARQ,窗口为“1”,不确认不发送,信道利用率低
  2. 连续ARQ:窗口(后退N帧),重传后面的

选择重传:将出错的帧后面的帧存于缓冲区,按顺序交给网络层,接受不按顺序

差错控制(校验和)

UDP

伪首部
源ip(4B)+目的ip(4B)+0(1bit)+17(1bit)+UDP长度(2bit)

报头

源端口2B+目的端口2B+长度2B+校验和2B

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

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

相关文章

Qt之高仿QQ系统设置界面

QQ或360安全卫士的设置界面都是非常有特点的,所有的配置项都在一个垂直的ScrollArea中,但是又能通过左侧的导航栏点击定位。这样做的好处是既方便查看指定配置项,又方便查看所有配置项。 一.效果 下面左边是当前最新版QQ的系统设置界面,右边是我的高仿版本,几乎一毛一样…

JVM初步理解浅析

一、JVM的位置 JVM的位置 JVM在操作系统的上一层,是运行在操作系统上的。JRE是运行环境,而JVM是包含在JRE中 二、JVM体系结构 垃圾回收主要在方法区和堆,所以”JVM调优“大部分也是发生在方法区和堆中 可以说调优就是发生在堆中&#xf…

国外seo比较好的优化方法有哪些?

随着互联网的不断发展,SEO(搜索引擎优化)变得越来越重要。 对于国外市场,Google搜索引擎是最为重要的搜索引擎之一, 因此在优化国外网站时,需要将Google SEO优化作为首要任务。 关键词研究和优化 在进行…

Windows逆向安全(一)C与汇编的关系

前言 逆向是一种新型的思维模式也是软件开发领域中极为重要的技术,涵盖各种维度去深挖软件架构的本质和操作系统原理,学习逆向后可以在各领域中发挥至关重要的作用,其中包括黑灰色,安全开发,客户端安全,物…

没有对象感,沟通太费劲

沟通中最重要的感觉:对象感! 要沟通的是谁?以啥方式最好? 趣讲大白话:蹲着跟小孩说话 【趣讲信息科技100期】 ******************************* 对象感是沟通者必须训练和提升的 是换位思考的一种能力 以便跟沟通对象进…

【虚拟工厂】SCL编写<机械手加盖模块>应用

使用scl来编写实虚拟工场中的一个机械手加盖应用项目 文章目录 目录 文章目录 前言 1.机械手加盖场景 2.了解各部分功能 3.命名变量找出输入输出 4.在博图建立变量 二、编写思路 1.分析 2.使用小模块化来编写 3.确定编程思路 三、编程 1.上料部分 2.机械手部分 3…

【数据结构】线性表和顺序表

Yan-英杰的主页 悟已往之不谏 知来者之可追 目录 1.线性表 2.顺序表 2.1 静态顺序表 2.2 动态顺序表 2.3移除元素 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线…

新C++(14):移动语义与右值引用

当你在学习语言的时候,是否经常听到过一种说法,""左边的叫做左值,""右边的叫做右值。这句话对吗?从某种意义上来说,这句话只是说对了一部分。---前言一、什么是左右值?通常认为:左值是一个表示数据的表达式(…

Git版本控制管理

Git日志记录查看日志获取执行过的命令查看每一次提交记录比较文件差异还原文件git远程仓库克隆远程仓库移除无效的远程仓库Git远程仓库推送、抓送,和拉取Git远程仓库多人协作冲突问题Git远程仓库SSH协议推送Git分支查看分支创建分支修改分支切换分支推送至远程仓库分…

Python3实现“美颜”功能

导语利用Python实现美颜。。。这是之前在GitHub上下载的一个项目。。。似乎有些日子了。。。所以暂时找不到原项目的链接了。。。今天抽空看了下它源代码的主要思想,似乎挺简单的。。。于是决定用Python3自己复现一下。。。T_T感觉还是挺有趣的。。。Just have a tr…

源码分析Spring @Configuration注解如何巧夺天空,偷梁换柱。

前言 回想起五年前的一次面试,面试官问Configuration注解和Component注解有什么区别?记得当时的回答是: 相同点:Configuration注解继承于Component注解,都可以用来通过ClassPathBeanDefinitionScanner装载Spring bean…

IT服务发布管理过程文件

目的 规范发布管理的提交、审批、沟通、测试、回滚、实施等活动。 范围 适用于我公司的IT服务管理重大变更的内、外部发布。 术语定义 发布:将一个或多个变更交付、分发到实际运行环境中并可对其进行追溯。非项目的IT服务重大变更需要遵循本过程进行发布。发布主要包…

论文投稿指南——中文核心期刊推荐(工业经济)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

使用TorchGeo进行地理空间深度学习

前言TorchGeo是一个PyTorch域库,提供特定于地理空间数据的数据集、采样器、转换和预训练模型。https://github.com/microsoft/torchgeo几十年来,地球观测卫星、飞机和最近的无人机平台一直在收集越来越多的地球表面图像。有了关于季节和长期趋势的信息&a…

【算法】算法基础入门详解:轻松理解和运用基础算法

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!&#x1f4…

查找Pycharm跑代码下载模型存放位置以及有关模型下载小技巧(model_name_or_path参数)

目录一、前言二、发现问题三、删除这些模型方法一:直接删除注意方法二:代码删除一、前言 当服务器连不上,只能在本地跑代码时需要使用***预训练语言模型进行处理 免不了需要把模型下载到本地 时间一长就会发现C盘容量不够 二、发现问题 正…

c++11 标准模板(STL)(std::unordered_map)(九)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

Python进阶-----高阶函数zip() 函数

目录 前言&#xff1a; zip() 函数简介 运作过程&#xff1a; 应用实例 1.有序序列结合 2.无序序列结合 3.长度不统一的情况 前言&#xff1a; 家人们&#xff0c;看到标题应该都不陌生了吧&#xff0c;我们都知道压缩包文件的后缀就是zip的&#xff0c;当然还有r…

Mybatis源码分析系列之第四篇:Mybatis中代理设计模型源码详解

一&#xff1a; 前言 我们尝试在前几篇文章的内容中串联起来&#xff0c;防止各位不知所云。 1&#xff1a;背景 我们基于Mybatis作为后台Orm框架进行编码的时候&#xff0c;有两种方式。 //编码方式1 UserDao userDao sqlSession.getMapper(UserDao.class); userDao.quer…

[入门必看]数据结构1.1:数据结构的基本概念

[入门必看]数据结构1.1&#xff1a;数据结构的基本概念第一章 绪论1.1 数据结构的基本概念知识总览1.1.1 基本概念和术语数据类型、抽象数据类型&#xff1a;1.1.2 数据结构的三要素数据的逻辑结构数据的物理结构&#xff08;存储结构&#xff09;数据的运算知识回顾与重要考点…