计算机网络之运输层

一、概述

物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的的问题,实现了主机到主机的通信

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

如何为运行在不同主机上的应用进程提供直接的通信服务时运输层的任务,运输层协议又称端到端协议

 

 1.1端口号

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

逻辑端口的概念(端口):一个整数值(16位);0-65535

 网络上中进程工作方式:C/S 对应的端口号码的分配也分为两大类

服务类(静态的预先指定的)

1-1013(默认系统熟知的服务)

1023-45191(需要申请注册的服务  QQ4000,8000都是它所使用的端口)

客户类(随机的由本地操作系统自己管控)

端口:相当于进程在网络中的地址

IP+PORT(端口号) 构成了网络中唯一的通信端点:我们称之为端到端的通信

(Socket) (Socket) Protocol

 1.2复用与分用

发送方的复用

  • 发送方的某些应用进程所发送的不同应用报文,在运输层使用UDP协议进行封装,这是UDP复用;若用TCP封装则称TCP复用
  • 运输层使用端口号区分不同进程,不管使用何种协议封装的报文,在网络层都需要使用IP协议封装成IP数据报,这是IP复用,数据报中协议字段的值用来表名封装的是何种协议数据单元

接收方的分用

  • 根据协议字段的值,将IP数据报封装的协议数据单元上交运输层的过程叫IP分用
  • 同理,UDP根据端口号将数据交给应用进程叫做UDP分用;TCP根据端口号将数据交给应用进程叫做TCP分用

 1.3运输层引入的协议

1,TCP协议(负责完成端到端的可靠传输)

2,UDP协议(负责完成端到端的数据传输)

用户数据报协议UDP

  • UDP无连接的,随时可向目的主机发送报文,支持单播、多播和广播

  • UDP收到应用层报文后直接为报文添加UDP首部就进行发送,即面向应用报文

  • UDP数据报首部仅8字节

 传输控制协议TCP

  • TCP面向连接的。发送数据前需要"三报文握手"建立连接,数据传输结束后需要"四报文挥手"释放连接

  • 仅支持单播

  • TCP是面向字节流的。其将应用进程交付下来的数据块仅仅看作是一连串的字节流,TCP将这些字节流编号并存储在缓冲中;接收方一边接收数据,一边将缓冲中的数据交给应用进程。

  • 接收方收到的字节流必须和发送方收到的字节流完全一致

  • 不会出现传输差错(误码、丢失、乱序、重复)

  • TCP报文段首部最小20字节,最大60字节

 1.4TCP协议流量控制

1)滑动窗口  发送窗口  接收窗口

2)超时计时器

3)流量控制方法 :接收端控制发送端

2)超时计时器

3)流量控制方法:接收端控制发送端

4)流量控制的实现过程:0窗口

5)TCP协议效率管理:糊涂窗口

流量控制

一般来说,我们希望数据传输能快一些,但如果发送方把数据发送得过快,接收方就可能来不及接收,这会造成数据的丢失

流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收

利用滑动窗口实现流量控制

  • 发送方和接收方窗口保持一致,发送方窗口随着接收方窗口变化而变化(通过确认报文告知发送方)
  • 发送方发送完窗口内数据后需要等到确认报文才会滑动窗口并继续发送,若窗口内的某个值很久没有收到回答报文,则超时重传报文

若接收方窗口调为0后,一段时间之后又调为200,此时向发送方传递确认报文,可此时报文丢失,则会造成发送方窗口始终为0,接收方以为发送方收到了确认报文而开始等待数据,造成死锁,如何解决? 

当发送方窗口大小为0时,其隔一段时间就会发送一个1字节大小的零窗口探测报文,看看此时接收窗口大小是否进行调整

零窗口探测报文也有超时重传机制

1.5TCP的拥塞控制

1)拥塞控制的概念:拥塞就是拥堵了(网络拥堵了),拥堵的原因?数据包太多了,导致网络吞吐量下降,网络时延增加;网络时延增加又进而加剧了网络数据包增多

 2)拥塞控制的手段方法

(1)核心方法:减少数据包数量

(2)具体实现:就根据不同情况,采用不同方法来减少数据包数量

(3)拥塞的主要表现就是时延的增加,为此,就围绕时延增加来进行数据包数量的调整

(4)数据包投放数量是由各主机的发送窗口大小决定的

(5)TCP又引入一个拥塞窗口的概念;拥塞发生时应该控制发送窗口的数量

        结论:发送窗口的大小:min(拥塞窗口,接收窗口)

(6)拥塞窗口:拥塞发生时,能够发送数据包的个数

(7)拥塞控制算法:慢开始  拥塞避免 快重传  快恢复

1)慢开始:设置门限值;门限值内,试探着向网络投入数据包,避免拥塞

2)拥塞避免:拥塞发生时,能够发送数据包的个数

3)快重传:当数据包未按序到达,导致重复确认增多,则立即重传该数据包,门限降为重复确认时拥塞窗口的一半,拥塞窗口同时调小

4)快恢复:发生超时时,立即急速的减少投入网络的数据包

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫做拥塞

若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降

1.6超时重传时间(RTO)选择

正常情况下,超时重传时间应该设为略大于往返时间。但是由于各区域的速率可能不一致,因此将超时重传时间设置为一个固定值是行不通的 

 往返时间测量问题

针对出现超时重传时无法测准往返时间RTT的问题,有以下解决方法

在计算加权平均往返时间RTTs时,只要报文段重传了,就不采用其往返时间TT样本。也就是出现重传时,不重新计算RTTs,进而超时重传时间RTO也不会重新计算。


此方法的漏洞如下:如果报文段时延突然增大很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段,于是重传,造成死锁


修正方法:报文段每重传一次,就把超时重传时间RTO增大一些,典型的做法是将RTO的值取为旧RTO的2倍

1.7可靠传输

可靠性保障可以放在体系结构中的任何一层(数据链路层,网络层)实现,但现代网络系统面向的是主机(独立自主的计算力)系统,可以将可靠性保障交由主机来完成,进而减轻通信子网的负担,使得通信子网专注于数据包的高效传输

1.停止等待协议(ARQ自动请求重传协议)

A给B发送数据,B需要给一个确认,

否认应答:A再发,

 2.后退N帧重传(Go Back N ARQ)(接收窗口固定唯一,而TCP接收窗口不确定)

(1)发送窗口:没有得到确认的情况下,发送端可以连续发送分组的个数

(2)接收窗口:接收数据的个数以及包含能接受数据的序号

(3)工作协议

(4)窗口大小与序号关系

3.选择重传协议

目的提高发送速率,不在采用发送一个数据帧就停下来等待确认的模式,而是可以连续发送多个数据帧后才停下来等待的模式

接收端:引入一个接收窗口的概念(即应当接收的数据帧及数据帧序号);这类协议接收窗口大小为1

其中:连续发送多少个数据帧的个数称为  发送窗口

(1)发送窗口

(2)接收窗口

(3)工作过程

(4)窗口大小与序号关系

1.8运输连接管理

TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行

  • SYN1的报文段不能携带数据,但会消耗一个序列号seq
  • ACK=1代表这是普通确认报文段,ack=x+1表示这是对报文段序列号seq=x的确认

  • 客户端发起关闭请求,一去一回后进入半关闭状态【客户端不再发送数据,服务端可能还会发】
  • 服务器将自己剩余的数据发送完后也发送一个关闭请求,接着客户端给予回应后服务器关闭,客户机则要等到一段时间后完全关闭(防止发给服务器的确认报文丢失)

1.9首部格式

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

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

  • 序号:占32比特,取值范围[ 0 , 2^{32} − 1 ] ,序号增加到最后一个后,下一个序号就又回到0。作用是指出本TCP报文段数据载荷的第一个字节的序号
  • 确认标志位ACK:取值为1时确认号字段才有效,为0时确认号字段无效

确认号:占32比特,取值范围 [ 0 , 2^{32} − 1 ],序号增加到最后一个后,下一个序号就又回到0。可理解为若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据

  • 数据偏移:占4比特,并以4字节为单位

        用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处。这个字段实际 上是指出TCP报文段的首部长度

首部固定长度为20字节,因此数据偏移字段的最小值(0101)_2

  • 保留字段:占6比特,保留为今后使用,但是目前应置为0

  • 窗口:占16比特,以字节为单位。指出发送本报文段一方的接收窗口

    窗口值作为接收方让发送方设置其发送窗口的依据,这是以接收方的接收能力来控制发送方的发送能力,称为流量控制

  • 检验和:占16比特,检测范围包括TCP报文段的首部和数据载荷两部分

    在计算校验和时,要在TCP报文段的前面加上12字节的伪首部

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

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

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

  • 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度

选项:增加选项可以增加TCP的功能

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

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

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

相关文章

从设计上理解JDK动态代理

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 照理说,动态…

上门预约小程序开发优势

想要放松身心,享受按摩的舒适感?那就需要一个专业的按摩师来上门服务。我们开发的预约按摩小程序app系统,汇聚各类上门按摩服务,包括推拿SPA、小儿推拿、中医等,为您提供高价值、高标准的养生健康体验。24小时随时提供…

【前端】让列表像Excel单元格一样编辑

前言 领导说了一堆的话,最后总结一句就是客户很懒,客户的员工更加懒。 本着让别人节省时间的原则,提倡出了让列表和Excal的单元格一样,不仅看数据还可以随时更改数据。 查资料 根据 Jeecg-Vue3 源码介绍,从而知道是基于 Vben Admin 开源项目进行改造的。 因此在 Vben…

沉头孔和埋头孔的区别

埋头空和沉头孔的区别在于螺栓孔上部扩孔:沉头孔是直筒结构;埋头孔是四十五度结构,比沉头孔较为平顺。 螺栓孔上部扩孔能容纳螺栓头部,使螺头部不高于周围表面。埋头空和沉头孔只是两种不同的叫法。 沉头孔是 PCB 上的圆柱形凹槽…

将form表单中的省市区的3个el-select下拉框的样式调成统一的间隔距离和长度,vue3项目iot->供应商管理

省市区是用3个el-select组成的 在表单中用el-col,会导致3个下拉的距离不统一,市和区的前面也是不需要文字label的 如何解决:用vue3的:deep()进行样式穿透,由于el-form-item标签都是一样的,为了能准确的找到市的el-form-item&…

解决:前端js下载文件流出现“未知文件格式”错误

第一中情况: 出现的问题,前端已经设置了responseType: blob,下载下来还是格式不对。 最后经过排查,后端缺少charsetutf-8,所以前端可以设置编码: 第二中情况: 后端已经设置了charsetutf-8,前…

机器学习/sklearn 笔记:K-means,kmeans++,MiniBatchKMeans,二分Kmeans

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类,该算法要求指定群集的数量。它适用于大量样本,并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇,每个簇由簇中样本的平均值描…

数据结构-树

参考:https://www.hello-algo.com/chapter_tree/binary_tree/#711 1. 介绍 树存储不同于数组和链表的地方在于既可以保证数据检索的速度,又可以保证数据插入删除修改的速度,二者兼顾。 二叉树是一种很重要的数据结构,是非线性的…

【学习篇】Linux中grep、sed、awk

Linux 文本处理三剑客 – awk, sed, grep grep过滤文本 https://zhuanlan.zhihu.com/p/561445240 grep 是 Linux/Unix 系统中的一个命令行工具,用于从文件中搜索文本或字符串。grep 代表全局正则表达式打印。当我们使用指定字符串运行 grep 命令时,如…

Mysql并发时常见的死锁及解决方法

使用数据库时,有时会出现死锁。对于实际应用来说,就是出现系统卡顿。 死锁是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象。就是所谓的锁资源请求产生了回路现象,即死循环,此时称系统处于…

星河创新,开拓新纪!2023“星河产业应用创新奖”报名全面开启!

科技的浪潮汹涌而至,人工智能正悄无声息地渗透进我们生活的每一个角落,成为推动社会奔腾向前的强大引擎。 随着大模型时代到来,更多的创新者涌现出来,他们正积极探索AI与实体的深度融合,解决行业难题,开拓…

算法的奥秘:种类、特性及应用详解(算法导论笔记1)

算法,是计算机科学领域的灵魂,是解决问题的重要工具。在算法的世界里,有着各种各样的种类和特性。今天,我将带各位踏上一段探索算法种类的旅程,分享一些常见的算法种类,并给出相应的实践和案例分析。希望通…

【目标检测】保姆级别教程从零开始实现基于Yolov8的一次性筷子计数

前言 一,环境配置 一,虚拟环境创建 二,安装资源包 前言 最近事情比较少,无意间刷到群聊里分享的基于百度飞浆平台的一次性筷子检测,感觉很有意思,恰巧自己最近在学习Yolov8,于是看看能不能复…

【Go语言从入门到实战】反射编程、Unsafe篇

反射编程 reflect.TypeOf vs reflect.ValueOf func TestTypeAndValue(t *testing.T) {var a int64 10t.Log(reflect.TypeOf(a), reflect.ValueOf(a))t.Log(reflect.ValueOf(a).Type()) }判断类型 - Kind() 当我们需要对反射回来的类型做判断时,Go 语言内置了一个…

【23真题】最简单的211!均分141分!

今天分享的是23年河海大学863的信号与系统试题及解析。 我猜测是由于23年太简单,均分都141分,导致24考研临时新增一门数字信号处理!今年考研的同学赶不上这么简单的专业课啦! 本套试卷难度分析:平均分为102和141分&a…

ECharts与DataV:数据可视化的得力助手

文章目录 引言一、ECharts简介优势:劣势: 二、DataV简介优势:劣势: 三、ECharts与DataV的联系四、区别与选择五、如何选择根据需求选择技术栈考虑预算和商业考虑 结论我是将军,我一直都在,。! 引…

3.10-容器的操作

这一节讲解一下对于container我们可以进行哪些操作&#xff1f; 可以使用以下命令来停止正在运行的Docker容器&#xff1a; docker container stop <CONTAINER ID> 关于运行中的容器&#xff0c;我们可以进行的操作&#xff1a; 第一个是docker exec命令&#xff0c;这个…

实时语音克隆:5 秒内生成任意文本的语音 | 开源日报 No.84

CorentinJ/Real-Time-Voice-Cloning Stars: 43.3k License: NOASSERTION 这个开源项目是一个实时语音克隆工具&#xff0c;可以在5秒内复制一种声音&#xff0c;并生成任意文本的语音。 该项目的主要功能包括&#xff1a; 从几秒钟的录音中创建声纹模型根据给定文本使用参考…

数字化转型没钱?没人?没IT?低代码平台轻松帮你搞定

随着数字技术的不断渗透&#xff0c;数字化已经不仅仅是一个趋势&#xff0c;而是深入人心的日常生活部分。在这样的时代背景下&#xff0c;企业面临的挑战也愈发严峻&#xff1a;如何不断创新&#xff0c;满足用户日益增长的业务需求&#xff1f; 传统的开发方式&#xff0c;随…

基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)

一、前言 本项目设计一个大气气压检测装置&#xff0c;该装置以单片机为基础&#xff0c;采用STC89C52作为核心控制芯片&#xff0c;结合BMP180模块作为气压传感器。大气气压&#xff0c;也就是由气体重力在大气层中产生的压力&#xff0c;其变化与天气预报、气象观测以及高度…