计算机网络复习5

传输层——端到端

文章目录

      • 传输层——端到端
        • 功能
        • 传输层的寻址与端口
        • UDP
        • TCP
        • TCP连接管理
        • TCP可靠传输
        • TCP流量控制
        • TCP拥塞控制
        • 网络拥塞的处理

功能
  • 从通信和信息处理的角度看,传输层它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层
  • 传输层位于网络层之上,它为运行在不同主机上的进程之间提供逻辑通信,而网络层提供主机之间的逻辑通信。显然,即使网络层协议不可靠(网络层协议使分组丢失,混乱或重复),传输层同样能为应用程序提供可靠的服务。
  • 复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
  • 传输层还要对收到的报文进行差错检测(首部和数据部分)
  • 提供两种不同的传输协议,即面向连接的TCP和无连接的UDP
传输层的寻址与端口
  1. 端口的作用
    端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程
  2. 端口号
    1. 熟知端口号,数值为0-1023,把这些端口号指派给TCP/IP最重要的一些应用程序

image.png

  1. 登记端口号,数值Wie1024-49151,他是供没有熟知端口号的应用程序使用,使用这类端口号需要先登记
  2. 客户端使用的端口号,数值为49152-65535,由于这类端口号只在客户进程运行时才动态选择,因此又称为短暂端口号
  3. 套接字

端口号拼接到IP地址即构成套接字Socket

  1. 传输层可以为IP层提供无连接和面向连接两种服务。

:::danger
TCP/IP协议族在IP层之上使用了两个传输协议:一个是面向连接的传输控制协议(TCP),采用TCP时,传输层向上提供的是一条全双工的可靠逻辑信道;另一个是无连接的用户数据报协协议(UDP),采用UDP时,传输层向上提供的是一条不可靠的逻辑信道
:::

UDP
  1. UDP数据报

UDP仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测。如果应用开发者选择UDP,那么应用程序几乎直接与IP打交道

  1. 优点
    1. 无须建立连接。因此不会引入建立连接的时延
    2. 无连接状态。TCP需要在端系统中需要维护连接状态。此连接状态包括接收和发送缓存,拥塞控制参数和序号与确认号的参数
    3. 分组首部开销小TCP有20B的首部开销,而UDP仅有8B的开销
    4. 应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率
    5. UDP支持一对一,一对多,多对一和多对多的交互通信,TCP只支持一对一可靠交付
  2. 数据报格式image.png
  3. UDP校验

在计算校验和时,要在UDP数据报之前增加12B的伪首部,伪首部并不是UDP的真正首部。只是在计算校验和时,临时添加在UDP数据报的前面,得到一个临时的UDP数据报。校验和就是按照这个临时的UDP数据报来计
算的。伪首部既不向下传送又不向上递交,而只是为了计算校验和。
image.png

TCP
  1. TCP协议的特点

TCP是在不可靠的IP层之上实现的可靠的数据传输协议,它主要解决传输的可靠,有序,无丢失和不重复问题。TCP是TCP/IP体系中非常复杂的一个协议,主要特点如下:

  1. TCP是**面向连接**的**传输层**协议
  2. 每条TCP连接**只能有两个端点**,每条TCP连接只能是**一对一**
  3. TCP提供**可靠的交付服务**,保证传送的数据无差错,不丢失,不重复且有序
  4. TCP提供**全双工通信** ,允许通信双方的应用进程在**任何时候**都能发送数据,为此TCP连接的两端都设有**发送缓存和接收缓存**,用来临时存放双向通信的数据
  5. TCP是**面向字节流**的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流
  1. TCP报文段
    1. TCP传送的数据单元称为报文段。TCP报文段既可以用来运载数据,又可以用来建立连接,释放连接和应答
    2. 一个TCP报文段分为首部和数据两部分,整个TCP报文段作为IP数据报的数据部分封装在IP数据报中,其首部的前20B是固定的。TCP报文段的首部最短为20B,后面有4N字节是根据需要而增加的选项,通常长度为4B的整数倍
  2. 报文段格式
    1. 确认号:占4B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为n,则表明到序
      号n-1为止的所有数据都已正确收到。
    2. 数据偏移:即首部长度,占4位(4bit),它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。数据偏移的单位是32位(以4B为计算单位),因此当此字段的值为15时,达到TCP首部的最大长度60B
    3. 急位 URG,URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
    4. 推送位PSH (push),接收方TCP收到PSH= 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填后再向上交付
    5. 同步位SYN,同步SYN=1表示这是一个连接请求连接接受报
    6. 终止位FIN(finish),用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接

image.png

TCP连接管理
  1. 每个TCP连接都有个阶段:连接建立,数据传送和连接释放。TCP连接的管理就是使运输层连接的建立和释放都能正常进行

  2. TCP连接的建立采用客户/服务器方式。主动发起连接建立的应用进程称为客户(client),而被动等待连接建立的应用进程称为服务器(server)

  3. 建立连接的过程:三次握手image.png

    1. 第一步:客户机的TCP首先向服务器的TCP发送连接请求报文段。这个特殊报文段的首部中的同步位SYN置1,同时选择一个初始序号seq=x。TCP规定,SYN报文段不能携带数据,但要消耗掉一个序号
    2. 第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,则向客户机发回确认,并为该TCP连接分配缓存和变量。在确认报文段中,把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。注意,确认报文段不能携带数据,但也要消耗掉一个序号
    3. 第三步:当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段的ACK位置1,确认号ack=y+1,序号seq=x+1该报文段可以带数据,若不携带数据则不消耗序号
  4. 释放连接的过程:四次挥手image.png

    1. 第一步:客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据主动关闭TCP连接,该报文段的终止位FIN置1,序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1,FIN报文段即使不携带数据,也消耗掉一个序号
    2. 第二步: 服务器收到连接释放报文段后即发出确认,确认号ack=u+1,序号seq=v,等于它前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了**【此时:客户机的发送端关闭,服务器的接收端关闭。但是客户机还有接收的能力,服务器还有发送的能力。】**
    3. 第三步: 服务器要关闭连接,向其TCP客户机发送连接释放报文段的同时发送确认,确认号ack=u+1,并停止发送数据,主动关闭TCP连接,该报文段的终止位FIN置1,序号seq=w,它等于前面服务器已传送过的数据的最后一个字节的序号加1,FIN报文段即使不携带数据,也消耗掉一个序号
    4. 第四步:** 客户机收到连接释放报文段后即发出确认,确认号ack=w+1,序号seq=u+1。【此时,客户机的接收端并没有释放,而是等服务器收到确认关闭发送端之后(一般时间为2MSL),客户机才关闭自己的接收端。】**这时服务器到客户机方向的连接才会释放。如果服务器没有收到确认,就会在过段时间再一次发送数据。
  5. TCP连接管理:小结

    1. 建立连接 step*3
      1. SYN=1,seq=x
      2. SYN=1,ACK=1,seq=y,ack=x+1
      3. ACK=1,seq=x+1,ack=y+1
    2. 释放连接 step*4
      1. FIN=1,seq=u
      2. ACK=1,ack=u+1,seq=v
      3. FIN=1,ACK=1,ack=u+1,seq=w
      4. ACK=1,ack=u+1,seq=w+1
TCP可靠传输
  1. 序号
  • TCP首部的序号字段用来保证数据能有序提交给应用层,TCP把数据视为一个无结构但有序字节流,序号建立在传送的字节流之上,而不建立在报文段之上
  1. 确认
  • TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号
  • TCP默认使用累计确认,即TCP只确认数据流中至第一个丢失字节为止的字节(接收到的最后一个字节)
  1. 重传
  • 两种事件会导致TCP对报文段进行重传:超时冗余ACK
  • 超时:TCP每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段
  • 冗余ACK(冗余确认):冗余ACK就是再次确认某个报文段的ACK,而发送方先前已经收到过该报文段的确认
TCP流量控制
  1. 传输层和数据链路层的流量控制的区别是:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化
  2. 拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载
  3. 拥塞控制与流量控制区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制,是个端到端的问题(接收端控制发送端),它所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收
TCP拥塞控制
  1. 接收窗口rwnd:接收方根据目前接收缓存大小所许诺的最新窗口值,反映接收方的容量。由接收方根据其放在TCP报文的首部的窗口字段通知发送方
  2. 拥塞窗口cwnd:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络的当前容量。只要网络未出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入网络的分组数。发送窗口的上限值=min[rwnd,cwnd]
  3. 慢开始和拥塞避免
    1. 慢开始算法:在TCP刚刚连接好并开始发送TCP报文段时,先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。每收到一个对新报文段的确认后,将cwnd加1,即增大一个MSS。用这样的方法逐步增大发送方的cwnd,可使分组注入网络的速率更加合理。【慢开始一直把cwnd增大到一个规定的慢开始门限sstresh(阈值),然后改用拥塞避免算法

例如,A向B发送数据,发送方先置拥塞窗口cwnd=1,A发送第一个报文段,A收到B对第一个报文段的确认后,把cwnd从1增大到2;于是A接着发送两个报文段,A收到B对这两个报文段的确认后,把cwnd从2增大到4,下次就可一次发送4个报文段。

  1. 拥塞避免算法:每经过一个往返时延RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,使拥塞窗口cwnd按线性规律缓慢增长(即加法增大),这比慢开始算法的拥塞窗口增长速率要缓慢得多
网络拥塞的处理
  1. 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(未按时收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方的cwnd值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法

image.png

  1. 快重传和快恢复
    1. 快重传:当发送方连续收到三个重复的ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时
    2. 快恢复:当发送方连续收到三个冗余ACK(即重复确认)时,把慢开始门限ssthresh设置为此时发送方cwnd的一半。与慢开始不同之处是它把cwnd值设置为慢开始门限sthresh改变后的数值,然后开始执行拥塞避免算法("加法增大"),使拥塞窗口缓慢地线性增大

image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs+vue+ElementUi农产品团购销售系统zto2c

目标是为了完成小区团购平台的设计和实现,在疫情当下的环境,方便小区业主购入生活所需,减小居民的生活压力 采用B/S模式架构系统,开发简单,只需要连接网络即可登录本系统,不需要安装任何客户端。开发工具采…

jmeter之beanshell使用:常用变量汇总

1.变量--日期 使用场景:当入参日期是变量,取当前日期 使用如下: (1)当前日期 import java.text.SimpleDateFormat; import java.util.Date;// 创建 SimpleDateFormat 对象并指定日期格式 SimpleDateFormat dateFor…

Seata AT TM->RC->RM一次完整的交互过程

原理 TM两阶段: 阶段1:TM向TC申请全局事务,netty客户端发起了一次记录xid的请求 阶段2:TC协调之后,决定执行RM是否提交或者回滚。 spring公共组件部分 1、SeataAutoConfiguration类 利用springboot自动装配机制从…

Ubuntu 安装MySQL以及基本使用

前言 MySQL是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分安装。它使用关系数据库和SQL(结构化查询语言)来管理其数据。 安装…

使用Vscode远程debug报错找不到Module找不到File

1..报第一个错 提示我无法导入自己写的module 如图: 解决办法: stackoverflow上说的在launch.json中加了一条 env,就解决了。 "env": { "PYTHONPATH":"/home/zt/ge-sc-master/ge-sc-master"}, 2.解决完第一个…

Mysql5.7主从数据库同步失败(日记文件错误)解决记录

记录一次Mysql主从数据库同步失败(日记文件错误)解决记录 查看同步状态: 具体错误: 检查mysql数据库日记 2021-06-10T03:45:43.522398Z 1 [ERROR] Error reading packet from server for channel : event read from binlog did not pass crc check; the…

【HarmonyOS开发】案例-记账本开发

OpenHarmony最近一段时间,简直火的一塌糊度,学习OpenHarmony相关的技术栈也有一段时间了,做个记账本小应用,将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件(Button、Select、Text、Span、Divider、Image&am…

简单了解SQL宽字节注入与httpXFF头注入(基于sqllabs演示)

1、宽字节注入 sqllabs-less-32为例 使用单引号进行测试 提示我们输入的单引号被转义符 \ 进行了转义,即转义符自动的出现在输入的特殊字符前面,这是防止sql注入的一种方法,导致无法产生报错。 这种情况我们就可以尝试宽字节注入&#xff…

报表控件FastReport VCL 中的新 S3 传输 (Amazon)

在本文中,我们将探讨新的 S3 传输。从功能上来说,S3 与大多数人习惯使用的有很大不同,因此在本文的开头,我们将详细介绍它的主要功能。 FastReport .NET 是适用于.NET Core 3,ASP.NET,MVC和Windows窗体的全…

数据结构--二叉搜索树的实现

目录 1.二叉搜索树的概念 2.二叉搜索树的操作 二叉搜索树的插入 中序遍历(常用于排序) 二叉搜索树的查找 二叉搜索树的删除 完整二叉树代码: 二叉搜索树的应用 key/value搜索模型整体代码 1.二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一…

亚信安慧AntDB数据并行加载工具的实现(一)

1.概述 数据加载速度是评判数据库性能的重要指标,能否提高数据加载速度,对文件数据进行并行解析,直接影响数据库运维管理效率。基于此,AntDB分布式数据库提供了两种数据加载方式: 一是类似于PostgreSQL的Copy命令&am…

ES6之解构赋值详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

Nacos注册

一、简介 Nacos是阿里云开源的一个服务发现、配置管理和服务鉴权平台,它提供了一种更简单、更便捷、更开放的方式来管理服务,帮助开发者快速实现服务的发现、配置的管理、服务的鉴权等功能。Nacos可以帮助开发者轻松管理微服务应用中的服务提供者、服务…

《整机柜服务器通用规范》由OCTC正式发布!浪潮信息牵头编制

近日,中国电子工业标准化技术协会开放计算标准工作委员会(OCTC)正式批准发布了《整机柜服务器通用规范》,该标准由浪潮信息牵头,中国工商银行、中国质量认证中心、英特尔、中国计量科学研究院等十余家单位联合编制&…

Github 2023-12-30 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4JavaScript项目2C项目1Python项目1Java项目1HTML项目1Dart项目1非开发语言项目1 令人惊叹的 …

一起玩儿物联网人工智能小车(ESP32)——13. 用ESP32的GPIO控制智能小车运动起来(一)

摘要:本文更深入的讲述了GPIO的相关知识,并完成了导线连接工作,为下一步的软件开发做好了准备。 通用输入输出端口(GPIO:General Purpose Input/Output Port),在前面已经有了初步的介绍&#xf…

代码随想录-刷题第四十二天

0-1背包理论基础 0-1背包问题介绍 0-1背包问题:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 0-1背包问题可以使用回溯法进…

mongoose中http server服务器解决“Access-Control-Allow-Origin mongoose”跨域问题

问题 使用mongoose做http服务器,自己构造的浏览器端jquery在访问server时,会遇到: Access to XMLHttpRequest at http://127.0.0.1:8000/ from origin null has been blocked by CORS policy: No Access-Control-Allow-Origin header is pr…

Android Camera

1. 相关的API Android有三套关于摄像头的API(库),分别是Camera、Camera2和CameraX,其中Camera已废弃,在Android5.0以后推荐使用Camera2和CameraX,Camera2推出是用来替换Camera的,它拥有丰富的API可以为复杂的用例提供…

ArcGIS批量计算shp面积并导出shp数据总面积(建模法)

在处理shp数据时, 又是我们需要知道许多个shp字段的批量计算,例如计算shp的总面积、面积平均值等,但是单个查看shp文件的属性进行汇总过于繁琐,因此可以借助建模批处理来计算。 首先准备数据:一个含有多个shp的文件夹。…