5.1 运输层协议

2023-05-16

运输层协议

  • 运输层的复用与常见端口
    • 常用端口
  • UDP协议
    • 特点
    • UDP帧格式
  • TCP协议
    • 特点
    • socket套接字
    • 可靠传输工作原理
    • TCP帧首部
      • 重要字段
    • TCP可靠传输
      • 以字节为单位的滑动窗口
      • 选择超时重传时间
      • 选择确认SACK(未经常使用P227)
    • TCP流量控制
    • TCP拥塞控制
      • TCP拥塞控制办法:慢开始、拥塞避免、快重传、快恢复
      • 慢开始与拥塞避免
      • 快重传与快恢复
    • TCP连接建立与断开:
      • TCP连接建立
      • 2次握手为什么不行
      • TCP连接释放
      • 为什么要等待两个MSL
      • TCP有限状态机

运输层向上面的应用层提供通信服务,为两个主机进程间提供端到端的逻辑通信。

运输层的复用与常见端口

  • 运输层的复用/分用技术靠端口号实现;
  • 运输层向下屏蔽了网络层的核心;
  • TCP:逻辑信道相当于一条全双工可靠信道;
  • UDP:相当于一跳不可靠信道;

常用端口

FTP		TCP		21		文件传输
SSH		TCP		22		加密传输
TELNET	TCP		23		远程终端接入
SMTP	TCP		25		邮件
HTTP	TCP		80		超文本传输
HTTPS	TCP		443
====================================
DNS		UDP		53		名字转换
RIP		UDP		520		路由选择
DHCP	UDP		67		IP地址配置
IGMP	UDP		?		多播
TFTP	UDP		69		简单文件传输
……

端口号分类:

  1. 服务器使用的端口号:
    • 系统端口号: 0 ~ 3FF
    • 登记端口号: 400 ~ BFFF
  2. 客户端使用的端口号: C000 ~ FFFF

UDP协议

特点

  • 无连接的
  • 尽最大努力交付
  • 面向报文的
  • 无拥塞控制(允许丢失一些数据,但不允许数据有大的延迟)
    • 可能会造成更严重的拥塞问题;
  • 一对一、多对多交互通信
  • 首部开销小(8字节)

UDP帧格式

  • IP的伪首部用于校验和(12字节)
  • 8字节首部
伪首部		源IP地址4B		目的IP地址4B		1B		类型1B		UDP长度2B
											 0		 17

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

UDP校验和计算需要加上伪首部,类似IP的计算方式(16bit求和取反)

TCP协议

特点

  • 面向连接的运输层协议
  • 端到端的通信
  • 可靠的通信
  • 全双工的通信
  • 面向字节流的(将程序交付下来的数据看成无结构的字节流)

socket套接字

TCP把连接作为最基本的抽象。
TCP连接的端点叫做套接字(IP地址:端口号)

可靠传输工作原理

理想传输特点:

  • 信道不产生差错;
  • 无论发送方速率多快,接收方总是来得及接收;

可靠传输流程:

  • 停止等待协议
    • 无差错情况
    • 出现差错
    • 确认丢失与迟到
    • 信道利用率
  • 无差错ARQ协议:对最后一个到的分组发送确认
    • 124到,发2的确认;
    • 5到,发2的确认;
    • 2、7到,发5的确认;
    • 每到一个,必须发确认。

需要注意情况(无差错):

  1. 暂存已发送分组副本至收到确认信号;
  2. 发送分组、确认分组都必须编号;
  3. 重传时间比RTT时间要稍微长一些;

TCP帧首部

TCP报文
TCP检验和也要添加伪首部

重要字段

  • 序号(seq):发送每一个字节都要编号;
    • 假如本次发送了100有效字节,下一次发送编号+100;
  • 确认号(ack):期望对方下一个报文段的第一个数据字节的序号;
  • 紧急URG:若为1则紧急字段有效;
  • 确认ACK:ACK=1时确认字段有效;
  • 同步SYN:SYN=1,ACK=0时表示请求连接的报文;
  • 终止FIN:FIN=1表示终止请求;
  • 校验和:同UDP;
  • 时间戳:计算RTT等

TCP可靠传输

以字节为单位的滑动窗口

依次发送窗口内的数据,收到回复确认后移动窗口、修改窗口大小;超时后重新发送需要发送的字节

选择超时重传时间

R T O = R T T S + 4 ⋅ R T T D RTO = RTT_S + 4{\cdot}RTT_D RTO=RTTS+4RTTD

n e w R T T S = ( 1 − α ) ⋅ o l d R T T S + α ⋅ R T T , α = 1 8 newRTT_S = (1-\alpha) \cdot old RTT_S + \alpha\cdot RTT,\alpha = \frac{1}{8} newRTTS=(1α)oldRTTS+αRTTα=81

n e w R T T D = ( 1 − β ) ⋅ o l d R T T D + β ⋅ ∣ R T T S − R T T ∣ , β = 1 4 newRTT_D = (1-\beta) \cdot old RTT_D + \beta\cdot |RTT_S - RTT|,\beta = \frac{1}{4} newRTTD=(1β)oldRTTD+βRTTSRTTβ=41

  • 第一次测量时, R T T D RTT_D RTTD取测量到的RTT样本的一半;
  • 重传报文不计算RTT;
  • 每次重传RTO应适度增大;

选择确认SACK(未经常使用P227)

TCP流量控制

让发送方的发送速率不要太快,要让接收方来得及接受;

  • 接收方来不及处理数据时,可以先将窗口设置为0,等缓存空间空闲大于一半时,再通知对方。

TCP拥塞控制

拥塞:网络中对资源的需求超过了该资源所能提供的可用部分。

拥塞控制:防止过多的数据注入到路网络中,使路由器或链路不至于过载

  • 流量控制时端到端的问题;
  • 拥塞控制是全局性的问题;
  • 拥塞控制用一些信息通知端,网络出现麻烦,需要降低放松速率;

TCP拥塞控制办法:慢开始、拥塞避免、快重传、快恢复

指数上升,线性增长,乘法减小,快速恢复;

AIMD:加法增大乘法减小

拥塞控制效果图:
TCP拥塞控制

拥塞控制关键词:

  • cwnd:拥塞窗口,计算单位;
  • SMSS:发送方最大报文段,计算cwnd的字节数;
  • ssthresh:慢开始门限;

慢开始与拥塞避免

  • 先发送1个cwnd的数据;
  • 接收到确认报文段后,每个传输轮次,cwnd数量指数增长;
  • 当cwnd > ssthresh时,进入拥塞避免阶段;
  • 拥塞避免阶段,每个传输轮次,cwnd + 1;

出现超时:

  • ssthesh变为原先一半;
  • cwnd从1重新指数增长;

快重传与快恢复

接收方对失序的报文段必须立即回复,连续三次重复确认回复,发送方重新发送。
此时发送的拥塞创空与慢开始门限如下:

  • ssthesh:变为之前一半(误认为超时之前);
  • cwnd:变为与ssthesh一样,直接进入线性增长阶段。

eg:

  • A发送123456;
  • B收到13,回复2;
  • 收到4,5,6分别回复2,2,2;
  • A收到连续三次回复2,立刻重新发送2,并跳过慢开始阶段,直接进入拥塞避免阶段。

TCP连接建立与断开:

连接建立、数据传送、连接释放:

TCP连接建立

TCP三次握手

注意:

  • 1、2次握手,不能携带数据,必须消耗序号seq;
  • 3次握手,可以携带数据,不带数据不消耗序号seq;

2次握手为什么不行

  • 若第二次握手消息包丢失,则服务器进入无限等待客户机数据状态;
  • 若第一次握手的请求包延迟(多发了一个,前一个延迟到达,到达时前一次传输已经结束),服务器回复同意连接,陷入无限等待数据阶段。

TCP连接释放

TCP四次挥手

  • FIN不携带数据也需要消耗一个序列
  • 客户机(最先发送释放连接请求的),最后需要等待两个MSL(最长报文段寿命)

为什么要等待两个MSL

  • 保证最后的ACK报文段能够到达服务器(可能因网络问题被丢弃)
  • 保证网络中所有连接请求报文段都已失效。

保活计时器

TCP有限状态机

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5.1 运输层协议 的相关文章

  • ROS学习笔记(一)ROS安装和helloworld

    ROS学习笔记 xff08 一 xff09 ROS安装和helloworld 文章目录 一 ros安装及测试1 打开ubuntu软件和更新 xff0c 进行如下设置2 设置安装源3 设置安装密钥4 更新软件源5 安装ros6 添加命令7 初
  • 网络管理协议 SNMP V3安装配置

    简单网络管理协议 xff08 SNMP xff09 是常见的一种监控手段 xff0c 目前snmp定义了三个版本的网络管理协议 xff1a SNMP v1 xff0c SNMP v2c xff0c SNMP v3 SNMP v1 xff0c
  • 【计算机游戏开发】游戏交互界面设计

    github项目地址 一 实验目的与要求 熟悉交互界面设计原理 了解Cocos2d x中的用户交互 触摸事件 碰撞检测机制 二 实验内容与方法 完成游戏编译 50分 仿照实验一 英雄快跑 实验 xff0c 将教材源码和素材文件复制到自己的项
  • 电子爱好者常备的工具和材料有哪些?

    万用表 xff1a 也叫多用表 一般可用于电压 电流 电阻的测量 有的还具 有电容 电感 频率测量等功能 电烙铁 xff1a 这个不用多说 xff0c 主要是用来焊接元器件 xff0c 有时也拿来烫烫硅胶 或者塑料什么的 根据加热元件的位置
  • 腾讯笔试

    1 字典序最小 牛牛有个无环的单链表 xff0c 牛可以不停的旋转这个链表 xff0c 比如链表 1 gt 2 gt 3 gt 4 经过旋转后可以变成以下4种链表 4 gt 1 gt 2 gt 3 3 gt 4 gt 1 gt 2 2 gt
  • STM32学习心得(第一天)

    作为一名刚接触STM32的初学者 xff0c 今天通过观看网站上的视频 xff0c 对STM32有了最基础的了解 xff0c 并学到了一些STM32的学习方法 xff0c 自我感觉收获不错 一 学习方法 1 两个学习网址 xff1a 开源电
  • 组原7_程序查询和程序中断方式

    目录 1 I O 方式简介 2 程序查询方式 3 程序中断方式 1 I O 方式简介 2 程序查询方式 程序查询方式流程图 程序查询方式接口结构 一次只能传送一个字的原因在于 xff1a 这种方式下 xff0c 外设传过来的数据是放在寄存器
  • k-近邻实现手写数字识别

    1 k 近邻工作原理 简单地说 xff0c K近邻算法采用测量不同特征值之间的距离方法进行分类 该算法具有一下特点 优点 xff1a 精度高 对异常值不敏感 无数据输入假定 缺点 xff1a 计算复杂度高 空间复杂度高 K近邻算法的工作原理
  • 吴恩达教你读论文:持续而缓慢的学习,才是正道

    转载这篇文章 xff0c 主要是有两句话特别认同 xff1a 持续而缓慢的学习 xff0c 而不是临时抱佛脚 xff0c 才能带来长久的成长 吴恩达 智慧不是学校教育的产物 xff0c 而是终身学习的产物 阿尔伯特 爱因斯坦 以下为原文 x
  • The Lighting Handbook, Tenth Edition 读书札记

    这本照明书可以说是经典了 xff0c 对照明从微观到宏观 xff0c 从理性到感性 xff0c 从物理到艺术洋洋洒洒做了比较充分和严谨的说明 xff0c 书中引用的论文也是浩浩荡荡 xff0c 可以说是一本集结了众多头脑 xff0c 闪烁着
  • 国家电网公司标准化建设成果应用目录(2015)参考书目

    国家电网标准化图集有很多 xff0c 但有时找的时候又很难记住书名 xff0c 因此把2015年之前的书籍目录摘录出来以便查找 目前是最先的版本了 xff0c 另外有一些06年的废止的分册不再列出了 2016年又增加了一本 国家电网公司输变
  • pyecharts——WordCloud词云图

    转自 xff1a pyecharts学习笔记 WordCloud词云图 码农家园 基本 词云图 注意数据格式 xff0c word1 count1 word2 count2 xff0c 可使用 counter 做词频统计 xff0c 生成这
  • 一个中文词云项目的使用总结

    一个中文词云项目的使用总结 用一个pa wordcloud项目来生成词云图的时候碰到了好几个问题 xff0c 一个pillow库安装问题 xff0c 卸载重新安装了最新版本 xff0c 就是numpy版本不匹配问题 xff0c 安装了对应p
  • 圆周率怎么计算来的?教你利用欧拉恒等式,生成圆周率万能公式!

    原文链接 xff1a http www twoeggz com news 4791962 html 在古代 xff0c 缺少数学技巧的情况下 xff0c 圆周率的计算是相当困难的 xff0c 我们国家伟大的数学家 xff0c 天文学家祖冲之
  • 影片avi转rmvb教程

    昨天被迫压制 MS IGLOO 正好学习了下影片avi转rmvb的技术 找来找去发现篇文章似乎不错 现在根据自己的操作过程 xff0c 加点操作心得再内 xff0c 保留一篇备用 xff01 首先还是要有专门压制的的软件 xff0c 之前我
  • 手机摄像头的等效焦距

    笔者随意拿出一张最近评测文章中的样张 xff0c EXIF信息就位于照片的下方 我们看到 xff0c 光圈 ISO感光度 曝光时间 曝光补偿这样的参数都比较好理解 xff0c 唯独这个焦距确实让不少人生疑 焦距 4mm 光圈 f 2 4 I
  • 关于3D打印文件格式:STL、OBJ、AMF、3MF的详解

    很多人对3D打印的数据格式颇有微词 xff0c 辛辛苦苦用三维软件设计好的作品 xff0c 一转换成3D打印格式 xff0c 基本就从白天鹅变成丑小鸭了 xff0c 既没有颜色 xff0c 数据也不完整 xff0c 形状重叠表面破损那是常有
  • 在线绘制函数图像和在线图标绘制网址

    经过寻找 xff0c 找到了几个在线绘制函数图像的网址 xff0c 可以不用matlab和geogebra软件绘制了 数学函数图像 xff1a 第一个 xff1a Desmos 首推 第二个 xff1a fooplot 可以绘制分段函数比如
  • geogebra中函数的定义域的输入

    ggb中函数的输入有如下几种方式 xff1a 一 如果if做法 1 区间函数 xff1a 做出函数在某区间上的图象 xff1a f x 61 if x gt 61 0 amp amp x lt 61 2 x 2 43 2x 1 2 分段函数

随机推荐

  • 升级Ubuntu内核

    自己下载deb或使用某些其他工具 xff0c 无脑dpkg deb会导致Depends libc6 gt 61 2 33 but 2 31 ubuntu9 2 is to be installed的错误 xff08 猜测该错误产生的原因是没
  • 在ROS的noetic版本中通过rosrun运行python文件

    xff08 1 xff09 不要将python文件放入scr目录中 xff0c 否则后续编译工作空间会报如图所示的错误 首先要在功能包文件夹 xff08 catkin ws src learnning topic xff09 中创建一个sc
  • linux音量调节

    转自 xff1a https www jianshu com p fc8c8cad67d6 一 alsa设置默认声卡 alsa设置默认声卡 理解和使用Alsa的配置文件 alsa的配置文件是alsa conf位于 usr share als
  • FutureTask实际应用案例

    GetResultTask java package com cwp data service service task import com cwp data intelligence common exception RRExcepti
  • 异常检测算法综述

    一 异常检测 随着人工智能的火热 xff0c 运维人员也开始考虑将算法引入运维领域 xff0c 对传统DevOps的核心功能进行优化改进 异常检测是运维不可或缺的重要要功能模块之一 xff0c 可以提升企业运维能力和效率 xff0c 释放运
  • 每日一书丨嵌入式C语言自我修养:从芯片、编译器到操作系统

    最近 xff0c 阅读了王工 xff08 王利涛 xff09 赠送的一本由他编著的书籍 嵌入式C语言自我修养 xff0c 感觉写的挺不错 今天分享一下这本书籍 嵌入式C语言自我修养 xff1a 从芯片 编译器到操作系统 从芯片 编译器到操作
  • JSP提交仍然停留在当前页面

    在C S结构中 xff0c 用户提交内容以后 xff0c 系统任停留在当前页面上 xff0c 直到服务返回处理成功或者失败的提示 而用户录入的信息 xff0c 除非程序清除 xff0c 否则不会自动消失 xff0c 方便用户修改 为了解决这
  • FreeRTOS Queue

    变量定义 span class token keyword typedef span span class token keyword void span span class token operator span QueueHandle
  • 专门讲解无人机航拍图像处理的书【包括图像拼接!!!】

    最近正式开始做课设啦 xff0c 博主在网上搜集到有专门的书讲解无人机航拍图像的处理 xff0c 包括图像拼接 xff01 xff01 xff01 更非常激动的是博主在图书馆把两本书都找到了 xff0c 俺滴学校i了i了 两本书如下所示 x
  • 1.2 向量与线性代数

    向量与线性代数 图形学基础向量向量点乘向量叉乘矩阵 图形学基础 基础数学 xff1a 线性代数 统计学 微积分基础物理 xff1a 其他课程 xff1a 信号处理 数学分析一点点 xff1a 美学课程 向量 方向长度单位向量向量加法 向量点
  • 2.1 变换

    矩阵变换 二维变换齐次坐标齐次坐标下的二维变换矩阵逆变换 xff08 逆矩阵 xff09 复合变换三维空间仿射变换 modeling and viewing 模型变换和视角变换 二维变换 尺度变换 Scale 镜像变换 切变变换 旋转变换
  • 2.2 变换(模型、视图、投影)

    变换 xff08 模型 视图 投影 xff09 三维变换观测变换 xff08 Viewing transformation xff09 视图 xff08 View xff09 定义相机如何将相机移动到约定俗成位置 投影 xff08 Proj
  • 四轴飞行器入门——基础知识

    引言 从2016年起 xff0c 细细数来入门无人机已经有两年时间 两年期间 xff0c 自己边学边摸索 xff0c 组装过机架四轴无人机 xff0c 也修改过开源飞控的代码 xff0c 但是因为种种原因 xff0c 始终没有写过相关博客记
  • Linux系统下搭建PX4/Pixhawk原生固件编译环境

    简介 PX4固件是Pixhawk飞行控制器的官方固件 xff0c Pixhawk官网也给出了Linux windows下搭建开发环境的方法 由于种种原因 xff0c 搭建开发环境时总会遇到各种各样的bug xff0c 致使PX4固件编译失败
  • main(int argc, char *argv[])

    这是UNIX和Linux中的标准主函数 argc 用来统计运行时发送给main函数的命令行参数的个数 argv 其中每个元素都是上述参数 以字符串形式存储 的首地址 argv 0 指向程序运行的全路径名 argv 1 指向程序名后的第一个参
  • 为PX4添加串口通讯模块(模块结构)

    主要讲模块的结构 不贴代码 从最外层开始 执行read uart main start dev ttyS1 read uart main int argc char argv 入口函数 判断任务进程read uart task是否存在 根据
  • C++抽象基类与虚基类(C++ primer)

    c 43 43 primer plus P508 xff0c 抽象基类 c 43 43 primer plus P556 xff0c 虚基类 抽象基类 xff08 abstract base class xff0c ABC xff09 抽象
  • MFC学习笔记(二)处理命令行选项

    目标 让应用程序处理这里所见的命令行标志 gt XXX exe c d 策略 一个MFC应用程序可以用CCommandLineInfo类的成员函数ParseParam 处理一些标准标 志 要添加我们自己的标志 xff0c 而仍然能够支持另外
  • C++ expection异常类、捕获所有异常(C++ primer,P639)

    expection类 头文件 lt expection gt stdexcept类 C 43 43 primer plus xff0c P632 包含以下异常 xff1a domain errorinvalid argumentlength
  • 5.1 运输层协议

    运输层协议 运输层的复用与常见端口常用端口 UDP协议特点UDP帧格式 TCP协议特点socket套接字可靠传输工作原理TCP帧首部重要字段 TCP可靠传输以字节为单位的滑动窗口选择超时重传时间选择确认SACK xff08 未经常使用P22