计算机网络复习笔记——运输层

news2024/11/19 7:48:16

计算机网络复习笔记——运输层

概述

  • 在计算机网络中进行通信的真正实体是位于通信两端主机中的进程

  • 运输层的不同端口对应不同的进程

  • 根据应用需求不同,运输层为应用层提供两种不同的运输协议,面向连接的TCP和无连接的UDP协议

运输层端口号、复用与分用

  • 运行在计算机上的进程使用进程标识符PID来标志

  • 不同操作系统使用不同格式的进程标识符

  • 为了使不同操作系统的计算机应用进程之间能够进行网络通信,必须使用统一方法对TCP/IP体系应用进程进行标识

  • TCP/IP体系运输层使用端口号来区分应用层的不同应用进程

    1. 端口号使用16比特表示,取值范围为0~65535
       - **熟知端口号**:0~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用21/20,HTTP使用80,DNS使用53
       - **登记端口号**:1024~49151,为没有数值端口号的应用进程使用,使用这类端口号必须在IANA按照规定的手续登记,以防止重复,例如:Microsoft RDP微软远程桌面使用的端口号是3389
       - **短暂端口号**:49152~65535,留给客户进程选择暂时使用,当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
    2. **端口号只具有本地意义**,即端口号只是为了**标识本计算机应用层中的各进程**,在因特网中,不同计算机中的**相同端口号是没有联系**的
    

发送方的复用和接收方的分用

image.png

  • TCP/IP体系的应用层常用协议所使用的运输层熟知端口号

image.png

UDP和TCP的对比

image.png

image.png

image.png

image.png

image.png

用户数据报UDP传输控制协议TCP
无连接面向连接
支持一对一,一对多,多对一和多对多交互通信每一条TCP只能有两个端点EP,只能是一对一通信
对应用层交付的报文直接打包面向字节流
尽最大努力交付,也就是不可靠;不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
首部开销小,仅8字节首部最小20字节,最大60字节

TCP流量控制

  • 流量控制是让发送方的发送速率不要太快,让接收方来得及接收
  • 利用滑动窗口机制来在TCP连接上实现对发送方的流量控制
    • TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小
    • TCP发送方收到接收方的零窗口通知后,应启动持续计时器,持续计时器超时后,向接收方发送零窗口探测报文

TCP拥塞控制

  • 在某段时间中,**若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。**这种情况就叫做拥塞
    • 在计算机网络中的链路资源(即带宽)、交换节点中的缓存和处理机等,都是网络的资源
  • 出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降

image.png

  • 发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化
    • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减小一些
    • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)
  • 发送方将拥塞窗口作为发送窗口swnd,即swnd=cwnd
  • 维护一个慢开始门限ssthresh状态变量
    • c w n d < s s t h r e s h cwnd < ssthresh cwnd<ssthresh时,使用慢开始算法
    • c w n d > s s t h r e s h cwnd>ssthresh cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法
    • c w n d = s s t h r e s h cwnd=ssthresh cwnd=ssthresh时,既可使用慢开始算法,也可以使用拥塞避免算法

慢开始算法

拥塞窗口按指数规律增大

拥塞避免算法

拥塞窗口按线性加一规律增大。

超时重传

当网络中出现超时重传时,要将ssthresh更新为发生超时重传时拥塞窗口的一半,并更新拥塞窗口cwnd的值为1

快重传

  • 有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞

    • 这将导致发送方超时重传,并误认为网络发生了拥塞
    • 发送方把拥塞窗口cwnd又设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率
  • 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失

  • 快重传是指让发送方尽快进行重传,而不是等超时重传计时器超时再重传

    • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
    • 即时收到了失序的报文段也要立即发出对已收到的报文段的重复确认
    • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传

快恢复

  • 发送方一旦收到3个重复确认,就知道现在知识丢失了个别的报文段,于是不启动慢开始算法,而执行快恢复算法
    • 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法

image.png

TCP超时重传时间的选择

  • 不能直接使用某次测量得到的 R T T RTT RTT样本来计算超时重传时间 R T O RTO RTO

  • 利用每次测量得到的 R T T RTT RTT样本,计算加权平均往返时间 R T T s RTT_s RTTs(又称为平滑的往返时间)

  • 有如下的计算公式

R T T S 1 = R T T 1 RTT_{S1}=RTT_1 RTTS1=RTT1

新 的 R T T S = ( 1 − α ) × 旧 的 R T T S + α × 新 的 R T T 样 本 新的RTT_S=(1-\alpha)\times旧的RTT_S+\alpha\times新的RTT样本 RTTS=(1α)×RTTS+α×RTT

在上式中, 0 ≤ α ≤ 1 0\le\alpha\le1 0α1

  • 已成为建议标准的RFC6298推荐的 α \alpha α值为1/8,即0.125

  • 超时重传时间RTO应略大于加权平均往返时间 R T T S RTT_S RTTS

  • RFC6298建议使用下式计算超时重传时间RTO

R T O = R T T S + 4 × R T T D RTO=RTT_S+4\times RTT_D RTO=RTTS+4×RTTD

R T T D 1 = R T T 1 ÷ 2 RTT_{D1}=RTT_1\div2 RTTD1=RTT1÷2

新 的 R T T D = ( 1 − β ) × 旧 的 R T T D + β × ∣ R T T s − 新 的 R T T 样 本 ∣ 新的RTT_D=(1-\beta)\times旧的RTT_D+\beta\times |RTT_s-新的RTT样本| RTTD=(1β)×RTTD+β×RTTsRTT

β \beta β的值建议为0.25

  • 若出现超时重传, 新 R T O = 2 倍 的 旧 R T O 新RTO=2倍的旧RTO RTO=2RTO

TCP可靠传输的实现

  • TCP基于以字节为单位的滑动窗口来实现可靠传输
  • 发送窗口的移动情况如下
    • 后沿移动情况
      • 不动(没有收到新的确认)
      • 前移(收到了新的确认)
    • 前沿移动情况
      • 通常向前移动
      • 不动(没有收到新的确认,对方通知的窗口大小也不变)
      • 不动(收到新确认但对方通知的窗口缩小,使发送窗口前沿正好不动)
      • 向后收缩(对方通知的窗口缩小了,一般不会发生)

TCP的连接建立

  • TCP是面向连接的协议,它基于运输连接来传送TCP报文段
  • TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程
  • TCP运输连接有以下三个阶段
    • 建立TCP连接
    • 数据传送
    • 释放连接

TCP“三报文握手”建立连接

image.png

TCP"四报文挥手"释放连接

image.png

TCP保活计时器

  • TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动包活计时器(2小时)
  • 若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每隔75秒发送一次,若一连发送10个探测报文段后仍无TCP客户进程响应,TCP服务器进程就认为TCP客户进程所在主机除了故障,接着就关闭这个连接

TCP报文段的首部格式

  • 为了实现可靠传输,TCP采用了面向字节流的方式
  • 但在TCP发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送
    • 一个TCP报文段由首部和数据载荷两部分构成
    • TCP的全部功能都体现在它首部中各字段的作用

image.png

  • 源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程

  • 目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程

  • 序号:占32比特,取值范围 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,2321],序号增加到最后一个后,下一个序号就又回到0,指出本TCP报文段数据载荷的第一个字节的序号

  • 确认号:占32比特,取值范围 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,2321],确认号增加到最后一个后,写一个确认号就又回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。

  • 标志确认位ACK取值为1时确认号字段才有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1

  • 数据偏移:占4比特,并以4字节为单位。用来指出TCP报文段党的数据载荷部分的起始处距离TCP报文段的起始处有多远。这个字段实际上指出了TCP报文段的首部长度。

    • 首部固定长度为20字节,因此数据偏移字段的最小值为 ( 0101 ) 2 (0101)_2 (0101)2
    • 首部最大长度为60字节,因此数据偏移字段的最大值为 ( 1111 ) 2 (1111)_2 (1111)2
  • 窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。这是以接收方的接收能力来控制发送方的发送能力,称为流量控制。

  • 校验和:占16比特,检查范围包括TCP报文段的首部和数据载荷两部分。在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。

  • 同步标志位SYN:在TCP连接建立时用来同步序号。

  • 终止标志位FIN:用来释放TCP连接。

  • 复位标志位RST:用来复位TCP连接。当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。

  • 推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。

  • 紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。

  • 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。

  • 扩展首部部分

    • 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。
    • 窗口扩大选项:为了扩大窗口(提高吞吐率)。
    • 时间戳选项
      • 用来计算往返时间RTT
      • 用于处理序号超范围的情况,又称为防止序号绕回PAWS
    • 选择确认选项
    • 填充:由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,也就是首部长度字段,是以4字节为单位的)

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

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

相关文章

CSS-盒子模型-内容,边框,内边距,外边距,(合并,塌陷情况)

CSS-盒子模型-内容&#xff0c;边框&#xff0c;内边距&#xff0c;外边距&#xff0c;(合并&#xff0c;塌陷情况) 目标&#xff1a;能够认识 盒子模型的组成 &#xff0c;****能够掌握盒子模型 边框、内边距、外边距 的****设置方法 学习路径&#xff1a; 1. 盒子模型的介绍 …

RK3588开发板的性能参数、功耗及功能特点|飞凌动态讲解

内容来源&#xff1a;飞凌嵌入式官网-www.forlinx.com2021年12月16日第六届瑞芯微开发者大会上&#xff0c;瑞芯微发布了全新一代旗舰处理器——RK3588。 相较前一代产品&#xff0c;RK3588的性能提高20%~30%&#xff01;同时采用新一代8nm制程工艺&#xff0c;也将大幅度降低功…

超级菜鸟怎么学习数据分析?

超级菜鸟如何学习数据分析&#xff0c;如何有效的成长为专业高手。 这个问题跟把大象放进冰箱是一个道理。 菜鸟成为超级高手是只需要四个步骤&#xff0c;直接上干货。 快速上手&#xff1a;可以简单、低门槛的上手学习与使用&#xff0c;快速入门 快速上手数据分析无非就是选…

Logstash:运用 Elasticsearch filter 来丰富地理数据

我们知道丰富数据对于很多的应用来说非常重要。这涉及到访问不同的表格&#xff0c;并进行搜索匹配。找到最为相近的结果并进行丰富数据。针对 Elasticsearh 来说&#xff0c;我们可以通过 enrich processor来进行丰富。你可以阅读我之前的文章来了解更多&#xff1a; Elastics…

git commit -m 撤销操作

1. 撤销本次commit-m操作 返回到add成功状态 git reset --soft HEAD^ 2.撤销本次commitadd 返回本地未提交状态 git reset --hard HEAD^ HEAD^ 表示上一个版本&#xff0c;即上一次的commit&#xff0c;几个^代表几次提交&#xff0c;如果回滚两次就是HEAD^^。 也可以写成HEAD…

代码随想录算法训练营第五十五天| LeetCode392. 判断子序列、LeetCode115. 不同的子序列

一、LeetCode392. 判断子序列 1&#xff1a;题目描述&#xff08;392. 判断子序列&#xff09; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新…

SSAT Essay 类写作 - 五步法

从去年起&#xff0c; SSAT 写作转向重点考察critical thinking的考察&#xff0c;SSAT middle 由2篇Story 题目转为一篇Story和一篇Essay, SSAT upper 由 1篇Story 和1 篇Essay 转为 2 篇Essay。这就意味着写好Essay 是SSAT 写作的必备能力。 Essay 写作的要求 体现Critica…

uniapp 实现在线签合同/签名/信息认证(无插件依赖)

最近项目接到一个新的需求&#xff0c;需要对接一个可以在线签合同的的功能&#xff0c;知道需要后马上开干&#xff0c;经过一番斗争&#xff0c;终于终于下班啦 开个玩笑&#xff0c;废话不多说&#xff0c;直接上代码&#xff0c;因为代码是直接项目中搬出来的&#xff0c;没…

把苦难的时光删去:从小县城售货员到深圳IT白领的蜕变之路

希望就像石头缝里的花&#xff0c;有种子就会发芽。 初中辍学&#xff0c;家具店打工&#xff0c;原生家庭带给我太多伤 几乎是所有重男轻女家庭共有的悲剧&#xff0c;我的学习生涯在中考之后寥寥收了场&#xff0c;中考失利&#xff0c;母亲本着“女子无才便是德”的观念不同…

CSS基础

文章目录学习CSS的目的引入的三种方式内部样式表行内样式表外部样式表选择器的分类基础选择器标签选择器类选择器id选择器通配符选择器复合选择器后代选择器子选择器并集选择器伪类选择器盒子模型不同浏览器下盒子模型的区别边框内边距外边距去除浏览器默认样式元素的显示模式块…

Bug系列路径规划算法原理介绍(二)——BUG1 BUG2算法

本系列文章主要对Bug类路径规划算法的原理进行介绍&#xff0c;在本系列的第一篇文章中按照时间顺序梳理了自1986年至2018年Bug类路径规划算法的发展&#xff0c;整理了13种BUG系列中的典型算法&#xff0c;从本系列的第二篇文章开始依次详细介绍了其中具有代表性的BUG1、BUG2、…

面试官:高并发场景下,你们是怎么保证数据的一致性的?图文详解

面试的时候&#xff0c;总会遇到这么一个场景。 1. 场景分析 面试官&#xff1a;你们的服务的QPS是多少&#xff1f; 我&#xff1a;我们的服务高峰期访问量还挺大的&#xff0c;大约是3万吧。 面试官&#xff1a;这么大的访问量&#xff0c;你们的服务器能撑住吗&#xff…

自学unity,该不该阻止?

看清现状&#xff0c;展望未来 进入游戏公司前 进入游戏行业一大契机&#xff1a;在校生身份。各大厂同一个岗位对校招和社会招聘的要求不是一个维度。从学校校招生的身份毕业成为社会人&#xff0c;按照再给两年来算&#xff0c;两年后技术会如何革新&#xff1f;各大公司的招…

【苹果推群发iMessage推】软件安装个性化必要高度 - (void) updateListH

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

MySQL8.0.26—Linux版安装详细教程

❤ 作者主页&#xff1a;Java技术一点通的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是Java技术一点通&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得关注、点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习&#xff0c;共同进步&#xff01;&am…

Network error: Connection refused

Network error: Connection refused1 问题的现象2 确认vmware ubuntu侧ssh是否启动2.1 确认ubuntu侧ssh的状态2.2 重启ssh服务2.3 安装ssh1 问题的现象 在用mobaXterm ssh去链接vmware虚拟机ubuntu时一直报下面的错误。 出现该问题之后我做了下面的检测&#xff1a; 检查vmw…

腾讯云年终选购云服务器攻略!

随着云计算的快速发展&#xff0c;很多用户都选择上云&#xff0c;上运中最常见的产品就是云服务器CVM和轻量应用服务器了&#xff0c;那么怎么选购最优惠呢&#xff0c;这篇文章将介绍新老用户选购腾讯云服务器的几个优惠方法。 一、买赠专区 第一个介绍的就是买赠专区&…

在kubernetes中对pod使用tcpdump+wireShark进行抓包

1.查看pod信息&#xff0c;获得pod所在的宿主机 kubectl get pod -n demo -o wide 2.获取宿主机的详情 kubectl get node zeebe.node1 -o wide 3.ssh连接到宿主机 ssh 用户名10.10.11.202 4.查看容器ID&#xff0c;使用POD名称中的关键字进行查找 docker ps|grep nodeapp 5…

java计算机毕业设计ssm图书馆预约管理系统txke6(附源码、数据库)

java计算机毕业设计ssm图书馆预约管理系统txke6&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

【Shell 脚本速成】07、Shell 流程控制——if 判断语句

目录 一、if 介绍 二、单 if 语法 三、if…else 语句 四、if…elif…else 五、if 嵌套 if 5.1 使用 if 嵌套 if 的方式判断两个整数的关系 5.2 写一个nginx安装初始化脚本 六、if 语句与 shell 运算 6.1 与文件存在与否的判断 6.2 文件权限相关的判断 6.3 整数之间…