计算机网络复习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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年度总结和规划

年度总结和规划 目录概述需求: 设计思路实现思路分析1.技术总结2.管理总结3.职业计划比较 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait…

准备用vscode代替sourceinsight

vscode版本1.85.1 有的符号,sourceinsight解析不到。 看网上说vscode内置了ripgrep,但ctrlshiftf在文件里查找的时候,速度特别慢,根本不像ripgrep的速度。ripgrep的速度是很快的。 但今天再查询,速度又很快了&#x…

Python武器库开发-武器库篇之上传本地仓库到Git(三十八)

武器库篇之上传本地仓库到Git(三十八) 当我们在Git中创建远程仓库和进行了SSH key免密登陆之后,我们点击 Your respositories 可以查看我们所创建的远程仓库,如图所示: 如果我们需要将本地的仓库上传到Git,首先我们需要建立一个本…

2023-12-29 服务器开发-centos-安装php8

摘要: 2023-12-29 服务器开发-centos-安装php8 centos-安装php8 必备条件 Minimal CentOS 8 / RHEL 8User with sudo rightsInternet Connection (1) 更新系统 更新系统 $ sudo dnf update $ sudo dnf upgrade 重启系统 $ sudo reboot (2) 启用 EPEL & Remi 软件库…

修改源码,element的el-table合并,处理合并产生的hover样式问题

1、确认自己element-ui的版本号 2、此element-ui下的lib包是修改过hover样式的包,如何替换自己文件下的node_modules中的包 修改后将lib文件夹中文件替换你项目中/node_module/element-ui/Lib中的文件问题??如果替换开发环境中的node_module的包无法升级到测试环境,因为nod…

FPGA设计时序约束十四、Set_External_Delay

一、序言 在时序约束中对clock的约束还存在一种特殊的延时约束set external delay。set external delay如字面含义,设置外部的时延值,但这个外部时延主要是指反馈时延,即信号从FPGA的output端口输出后经过外部电路回到输入端口的时延值。 二…

基于js和html的骰子游戏

介绍: 1.游戏者选择“大”时,三个骰子点数之和为11-18时,游戏者获胜。2.游戏者选择“小”时,三个骰子点数之和为3-10时,游戏者获胜。3.如果游戏者选择具体点数,则根据三个骰子的点数计算,如果与…

AI大模型时代下运维开发探索第二篇:基于大模型(LLM)的数据仓库

在SREWorks社区聚集了很多进行运维数仓建设的同学,大家都会遇到类似的挑战和问题: 数仓中存储大量数据消耗成本,但很多存储的数据却并没有消费。进数仓的ETL学习成本高、管理成本高,相关同学配合度低,以及上游结构改动…

PiflowX组件-ReadFromKafka

ReadFromKafka组件 组件说明 从kafka中读取数据。 计算引擎 flink 有界性 Unbounded 组件分组 kafka 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_hostKAFKA_HOST“”无是逗号分隔的Ka…

概率论基础复习题

一、填空题 二、选择题 答案:B 答案:C 答案:C 答案:D。统计量不含任何未知参数。 答案:A 答案:C 样本均值是总体均值的无偏估计;样本方差是总体方差的无偏估计。 答案:B。统计值是一…

机器学习的一般步骤

机器学习专注于让机器从大量的数据中模拟人类思考和归纳总结的过程,获得计算模型并自动判断和推测相应的输出结果。机器学习的一般步骤可以概括为以下几个阶段: 数据收集和准备: 收集与问题相关的数据,并确保数据的质量和完整性。…

熊猫目标检测数据集VOC格式1200张

熊猫是中国的国宝,也是世界上最受人喜爱的动物之一。熊猫以其独特的外貌和与生俱来的文化象征意义而闻名于世。它们是一种大型的食草动物,主要分布在中国中部地区的竹林和高山地带。 熊猫的身形圆润笨拙,黑白分明,拥有圆润的脸庞…

【openlayers-3】加载图标

在OpenLayer3中添加图标有两种方式&#xff0c;一种是通过overlay方式&#xff0c;另一种是通过Feature Style的方式。 1、通过overlay方式添加 <div id"mapCon" style"width: 100%; height: 100%; position: absolute;"></div> <div id…

GPT系列概述

OPENAI做的东西 Openai老窝在爱荷华州&#xff0c;微软投资的数据中心 万物皆可GPT下咱们要失业了&#xff1f; 但是世界不仅仅是GPT GPT其实也只是冰山一角&#xff0c;2022年每4天就有一个大型模型问世 GPT历史时刻 GPT-1 带回到2018年的NLP 所有下游任务都需要微调&#x…

关于java循环结构for

关于java循环结构for 在上一篇文章中&#xff0c;我们了解到了while和do…while的结构以及用法&#xff0c;这篇文章我们主要学习一下最常用的循环结构&#xff0c;for结构&#x1f600;&#xff0c;这个结构理解起来相对while结构会难一些&#xff0c;本篇文章内容会很多&…

Linux LVM逻辑卷

一、LVM的定义 LVM 是 Logical Volume Manager 的简称&#xff0c;译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备&#xff0c;并允许用户动态调整文件系统的大小。此外&#xff0c;LVM 的快照功能可以帮助我们快速备份数据。LVM 为…

L1-072:刮刮彩票

题目描述 刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示&#xff1a; 每次游戏玩家会拿到一张彩票&#xff0c;上面会有 9 个数字&#xff0c;分别为数字 1 到数字 9&#xff0c;数字各不重复&#xff0c;并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个…

【ArkTS入门】ArkTS开发初探:语言特点和开发特点

什么是ArkTS&#xff1f; ArkTS是一个为鸿蒙组件而生的框架&#xff0c;语法亲人好用。基于TypeScript&#xff0c;ArkTS拓展了声明式UI、状态管理等的能力&#xff0c;从本质上来讲&#xff0c;是TypeScript的扩展&#xff0c;主要服务于前端。 ArkTS的开发可以满足“一次开…

Python列表的介绍与操作 增改查,连接,赋值,复制,清空

列表 在日常中我们通过给变量赋值来存储数据,比如 a "hello" b "world" c "你好啊" d "....."由于变量一次只能存储一个数据,但我们如果想一次存储多个数据,的话这样存储会很复杂,所以,我们可以通过列表 列表(List)是Python中的…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1&#xff1a;获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段&#xff0c;只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表&#xff0c;获取学生对应班级…