TCP与UDP协议

2023-11-15

TCP报文格式

在这里插入图片描述
在这里插入图片描述

  • 源端口: 2字节,标识报文的返回地址。
  • 目的端口: 2字节,指明接收方计算机上的应用程序接口。
  • 序号: 4字节, 大约21亿的范围。序号,即seq,指明本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。
  • 确认号: 4字节, 大约21亿的范围。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0时确认号无效。
  • 数据偏移: 4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
  • 保留: 为将来定义新的用途保留,现在一般置0。
  • 控制位: URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
  1. SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
  2. ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
  3. URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
  4. PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
  5. RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
  6. FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
  • 窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
  • 校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
  • 紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
  • 选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。
  • 数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

UDP报文格式

在这里插入图片描述

  • 源端口: 2字节,标识报文的返回地址。
  • 目的端口: 2字节,指明接收方计算机上的应用程序接口。
  • 长度:2字节,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。
  • 校验值:2字节,可以检验数据在传输过程中是否被损坏。

TCP与UDP协议的比较

  1. 拆包/粘包: 数据被分割成TCP认为最合适发送的数据块,而UDP将应用层传来的数据包全量传送
  2. 重传机制: TCP发出一个段后,启动定时器,如果不能及时收到报文段,则重发一个报文段
  3. 确认: 当TCP收到一个段后,会发送一个确认
  4. 校验和: TCP将保持它首部和数据的校验和
  5. 重排序: TCP对收到的数据进行重新排序,保证数据的有序
  6. 丢弃重复: TCP会丢弃重复的数据
  7. 流量控制: TCP提供流量控制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP与UDP协议 的相关文章

  • Vue总结第二天~自定义子组件、父子组件通信、插槽

    目录 一 组件 组件目录 1 注册组件 全局组件 局部组件和demo template模块 1 注册组件的基本步骤 2 全局组件demo 3 局部组件demo 4 template模块的简化 模板的分离写法 即将其内容封装到 templat
  • vue组件props属性监听不到值变化

    在写项目时遇到一个问题 父组件传到子组件的prop 在子组件监听不到变化 遂查看vue文档 得知watch有一种深度监听的方法 阅读vue文档如下代码 var vm new Vue data a 1 b 2 c 3 d 4 e f g 5
  • c#的二进制序列化组件MessagePack介绍

    c 的序列化有多种 我一般喜欢用第三方组件 一个公共组件要拿出来用 而且支持很多语言 甚至以此谋生 肯定有其优势 有或者说存在必然有其合理性 经过几年开发 我更加喜欢第三方的东西 类似序列化的东西 开篇总是牢骚 大家要习惯哈 最近在写一个小
  • vue.js组件的全局注册和局部注册详解

    1全局注册实例 按照官网的例子下面是代码 div div
  • CocosCreator中的Prefab文件格式总结

    CocosCreator所有的Prefab都是以下类似的格式 我们学会用文本编辑器查看Prefab文件 可以帮助我们更轻松的查找节点 查看节点和组件信息 批量修改节点和组件信息等等 因为在文本编辑器中的Prefab文件才是原始的 而且Coc
  • react antd 实现 表格(Table)多个多选功能组件实现

    壹 功能展示和使用需求 需求描述 基于antd 实现 表格要实现多个多选互不影响包含 全选 半选 可自由拓展 功能展示 贰 封装代码 import Checkbox Table from antd import React useEffec
  • angular原理及模块简介

    本人前端小白 奈何在公司在做一个PC端的程序 用angular写 不得不自学了一下angular框架 虽然在工作过程中勉强勉强够了 但是觉得既然用了就稍微了解得全面一点 所以花了几个晚上看了一下angular的developer guide
  • uni-app使用ucharts地图(主要微信小程序-初步使用)

    下载 https ext dcloud net cn plugin id 271 描述 根据数据门店数量 地图颜色逐步加深 效果 使用 目录结构 新建index vue 复制以下内容
  • 【VUE】vue组件之间通信有几种方式

    vue组件之间通信可分为以下几种 props和 emit 也就是常说的父子组件通信 常用 attrs和 listeners 中央事件总线 非父子组件间通信 v model provide和inject parent和 children vu
  • Visual Studio 2017 如何更改缓存以及组件的路径,以保证VS2017正常启动

    当安装完Visual Studio 2017时 发现安装过程中设置的缓存路径或组件存放路径不合理 但一旦修改 会导致Visual Studio 2017出现项目加载失败等问题 修改方法是通过 regedit命令打开windows注册表 然后
  • ElementUI浅尝辄止17:Progress 进度条

    用于展示操作进度 告知用户当前状态和预期 常见于操作流程进度或某项任务的状态 1 如何使用 Progress 组件设置percentage属性即可 表示进度条对应的百分比 必填 必须在 0 100 通过 format 属性来指定进度条文字内
  • Vue--插槽 vs 高复用组件

    为什么要用插槽 组件的最大特性就是提高复用性 而插槽的作用是最大程度的优化组件的可复用能力 组件的复用常见场景如多个页面有同样的UI结构 通过组件间通讯机制传递数据 以此达到同一套代码渲染不同数据的效果 然而 这种利用组件间通讯机制只能满足
  • elementui中多个table同步滚动

    问题描述 element admin中同时使用多个table 要求头部固定 给每个并列的table设置max height 通过监听一侧的table滚动情况去控制另外一侧的table滚动 问题分析 table分成两部分 左侧是一个table
  • Element浅尝辄止9:Popover 弹出框组件

    Popover 的属性与 Tooltip 很类似 它们都是基于Vue popper开发的 因此有重复属性 1 如何使用 trigger属性用于设置何时触发 Popover 支持四种触发方式 hover click focus 和 manua
  • 从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

    系列文章目录 内容 链接 从Vue2到Vue3 零 Vue3简介 从Vue2到Vue3 一 Composition API 第一章 从Vue2到Vue3 二 Composition API 第二章 从Vue2到Vue3 三 Composit
  • vue父子组件&继承组件的生命周期以及应用

    父子组件的生命周期顺序 今天在做项目时候 发现了一个问题 那就是父子组件的执行顺序问题 在我印象里 肯定是先执行父组件的生命周期 再执行子组件的生命周期 但其实并不是这样的 我们来看代码 我们先用vue cli搭建一个项目 用什么搭建并不重
  • TCP与UDP协议

    TCP与UDP协议 TCP报文格式 UDP报文格式 TCP与UDP协议的比较 TCP报文格式 源端口 2字节 标识报文的返回地址 目的端口 2字节 指明接收方计算机上的应用程序接口 序号 4字节 大约21亿的范围 序号 即seq 指明本报文
  • vue-grid-layout 使用以及所有属性

    vue grid layout 作用 下载及引入 版本 案例 以及所有属性 作用 1 实现桌面拖拽布局功能 2 可调整每个部件的大小 3 可以在不重新构建网格的情况下添加或删除小部件 下载及引入 下载 install with npm 用n
  • React技巧1(状态组件与无状态组件的使用)

    本教程总共5篇 每日更新一篇 请关注我们 你可以进入历史消息查看以往文章 也敬请期待我们的新文章 1 React 技巧1 状态组件与无状态组件的使用 2018 01 04 2 React 技巧2 避免无意义的父节点 2018 01 05 3
  • vue-router设置默认路由

    git仓库 https github com xiaoli0510 vue router vue使用vue router步骤 1 安装并创建实例 npm install vue router 2 新建router 文件夹和router js

随机推荐

  • RabbitMQ系列(十五)RabbitMQ进阶-SprintBoot集成RabbitMQ使用

    RabbitMQ进阶 SprintBoot集成RabbitMQ使用 文章目录 RabbitMQ进阶 SprintBoot集成RabbitMQ使用 1 构建项目 1 1 Spring Init创建项目 1 2 新建项目包 2 初始化Rabbi
  • 【Chrome】分享几个常用的插件,持续集成

    文章目录 一 准备 打开扩展程序 1 1 方式一 1 2 方式二 1 3 打开开发者模式 二 Chrome应用商店在线安装 需要科学上网 三 离线安装 3 1 离线crx下载地址 3 2 crx方式安装 3 3 加载已解压的扩展程序 方式安
  • 计算机组成原理实验——五、单周期CPU设计

    一 实验目的 掌握指令执行过程的5个阶段 掌握每条指令的数据通路选择 掌握译码器和控制器的功能和实现 掌握数据输入输出处理的方法 实现risc v中RV32I指令的单周期CPU 利用实现的risc v CPU实现平方数 二 实验内容 实现r
  • DHorse系列文章之操作手册

    在介绍DHorse的操作之前 我们先来看一下发布一个系统的流程是什么样的 发布系统的流程 我们以一个Springboot系统为例 来说明一下发布流程 1 首先从代码仓库下载代码 比如Gitlab 2 接着是进行打包 比如使用Maven 3
  • 求和2.14

    n int input 输入数字的数量 a list map int input split 输入一个列表 print a S 0 s1 sum a for i in range 0 n s1 a i S a i s1 print S
  • 使用PHPExcel实现数据批量导入到数据库

    此例子只使用execel2003的 xls文档 若使用的是其他版本 可以保存格式为 Execel 97 2003 工作簿 xls 即 xls文件类型即可 功能说明 只能上传Excel2003类型的xls文件 大小不超过5M 可下载例子模板添
  • 配置服务器实现无缝连接

    在进行网络爬虫时 经常会面临目标网站的IP封锁 反爬虫策略等问题 为了解决这些问题 配置代理服务器是一种常见的方法 本文将向您介绍如何配置代理服务器与爬虫实现无缝连接 助您顺利进行数据采集 一 了解代理服务器的作用 代理服务器充当中间人的角
  • vue3.0 vue.config.js 配置实战

    项目常用配置 const path require path const UglifyJsPlugin require uglifyjs webpack plugin function resolve dir return path joi
  • MIUI11系统详细卡刷开发版获取Root超级权限的步骤

    小米的机器不同手机型号一般情况官方论坛都提供两个不同的系统 它们是稳定版和开发版 稳定版没有提供root权限管理 开发版中就提供了root权限 很多情况下我们需要使用的一些功能强大的工具 都需要在root权限下工作 就比如我们公司在使用的营
  • 2、应用入口类 SpringbootApplication&核心注解

    官网 https docs spring io spring boot docs 2 5 8 SNAPSHOT reference htmlsingle getting started installing 核心注解分析 许多 Spring
  • 【Postgresql】触发器某个字段更新时执行,行插入或更新执行

    Postgresql 触发器某个字段更新时执行 行插入或更新执行 1 postgresql触发器 2 触发器的创建及示例 1 字段更新时 触发 2 行插入或更新时 触发 3 触发器的删除 4 触发器的坑 参考 1 postgresql触发器
  • 服务器好玩的项目_推荐!github上四个与100有关的优质项目

    编辑 zero 关注 搜罗最好玩的计算机视觉论文和应用 AI算法与图像处理 微信公众号 获得第一手计算机视觉相关信息 今天要分享四个非常优质的开源项目 一定能够有效的提升你的coding能力 1 Python 100天从新手到大师 2 10
  • 机器学习基础学习-多元线性回归问题(梯度下降法实现)

    1 基本概念 在之前的博客当中描述了怎样模拟出了梯度下降的过程 如果是多维情况 theta其实是一个向量 那么对其求导的损失函数也是向量 梯度就是损失函数对每个方向的theta求偏导 和之前的一维线性回归相比 我们对只是对w这个数字进行求导
  • VC++ CComboBox自绘(颜色下拉列表框)

    使用前 请将控件的Style属性设置为DropdownList 下拉列表 Owner Draw设置为Fixed Has Strings设置为TRUE 效果图如下 头文件声明 CSWColorComboBox h pragma once in
  • 关于C++ 对象私有成员不可访问的理解误区

    C 中对象的私有成员是否可以被别的对象访问 答案是肯定的 但是分场合 同一个类 友元类 什么情况下可以访问C 对象的私有成员呢 首先 C 私有成员不可以直接访问是个错误理解 C 对象的私有成员在类内是可以访问的 请注意是类内而不仅仅是对象内
  • Flink自定义实现ElasticSearch Table Source

    Flink版本 1 12 1 ES Maven版本 elasticsearch rest client 6 3 1 FLINK TableSource官方文档 https ci apache org projects flink flink
  • minio搭建图床 配合typora实现写博客图片自动上传

    minio搭建图床 配合typora实现写博客图片自动上传 1 搭建minio 查看博客 http www weinigb cn info blogOid 32 2 使用脚本 python 使用之前需要添加依赖 分别需要添加 minio r
  • Binder (一) mmap与一次拷贝原理

    Binder机制 跨进程通信IPC 远程过程调用手段RPC 4个角色进行粘合 Client Server Service Manager和Binder驱动程序 整个过程只需要一次拷贝 Binder Driver misc设备 dev bin
  • 【已更新】2023电工杯数学建模B题完整代码 持续更新

    已给出第一问详细代码 完整获取链接为 https mbd pub o bread ZJmXmpxt import pandas as pd import numpy as np from sklearn preprocessing impo
  • TCP与UDP协议

    TCP与UDP协议 TCP报文格式 UDP报文格式 TCP与UDP协议的比较 TCP报文格式 源端口 2字节 标识报文的返回地址 目的端口 2字节 指明接收方计算机上的应用程序接口 序号 4字节 大约21亿的范围 序号 即seq 指明本报文