计算机网络第五章——传输层(上)

news2024/12/27 2:18:58

早知如此绊人心,何如当初莫相识

文章目录

  • 前言


前言

请添加图片描述
虽然说是手机和手机之间的通信但是其实是手机之间的进程和进程之间的通信,所以这一章主要是研究进程之间通信的问题,在计算机网络中有一个重要的问题,在进行数据通信和资源共享的如何来保证数据是准确的,或者说如何在一个可能会数据丢失的数据媒体上如何可靠的来传输我们的数据,这个就是TCP协议发挥作用的地方,UDP协议会TCP协议相比较就是一个不太可靠的协议,那么可能在传输对数据准确性要求不那么高,在传输延迟方面要求比较高,通常会使用UDP协议,

请添加图片描述
请添加图片描述
复用是指发送方不同的用户进程它们都可以使用传输层的协议来传送数据,而这个分用是指接收方传输层在剥去报文的首部之后能够送给正确的进程,传输层的转送单元报文段。我们之前学过的网络层有一个首部校验和但是只是校验头部,但是没有校验数据部分,因此需要这个传输层来实现对数据的检错,因为网络层的数据部分就是传输层的报文段,如果传输层对这个报文段进行了差错检测那么网络层就不需再进行差错检测了,就是需要检测IP数据报的头部而不需要检测数据部分,那么可以看出传输层和网络层一起就可以实现一个可靠传输的过程,当然这个传输层不一定会实现一个可靠传输的,这是应为传输层有两个协议,一个叫做TCP一个叫做UDP,.

请添加图片描述

请添加图片描述
之前我们说过传输层有一个功能就是复用和分用,
请添加图片描述
根据IP地址找到他所在的网络,进入他所在的网络之后,就要靠他的MAC地址再定位到具体哪一个主机,找到了主机这个通信还不算结束,应该要找到这个主机中接收这个数据的进程,因此就涉及到传输层的问题,用一个端口指明一个具体的应用进程,
客户端使用的端口号只有再使用的时候才会给它分配一个,而且是主机中的操作系统给它随机分的,这个进程只要一结束,这个端口号就可以分给一个新的进程,所以这个端口号是可以循环利用,是可以动态选择的,
请添加图片描述
根据IP地址可以找到主机,根据端口号可以找到主机具体的进程。
请添加图片描述

请添加图片描述
网络层是不可靠交付,若是使用UDP也是不可靠的交付,那么就只有应用层来保证可靠,以及顺序的交付,
面向报文的意思就是,首先一个应用层的程序会产生一个引用层的报文,应用层报文就作为应用层的传输单元往下传输,根据不同的协议加上不同的首部,所谓面向报文就是对于这个报文的长度大小是不做改变的,也就是应用层给UDP多长的报文,UDP就照旧发送,即一次发一个完整报文,
无拥塞控制有时也是很有用的,比如视频通话,尽管丢失一些画面,也是无伤大雅,
请添加图片描述
注意这个数据字段是可以为零的,所以这个UDP的数据报最少是8B,源端口号是可有可无的,若是我发送的数据报我希望收到对方的回复,那么这个源端口号我就希望填上,目的端口号是一定要存在的,UDP长度是整个用户数据报的长度,检验和也就是包括首部字段和数据字段是否是发送错误了,若是发生错误了也就会把这个UDP用户数据报,那还有一种出错的情况就是我们在分用的时候,也就是网络层交给用户层的数据报,这些数据报去找各自所对应的用户进程,也就是根据端口号来找,若是找不到进程,就会把整个数据报丢弃

请添加图片描述
发送端和接收端在校验这个数据和首部有没有出错的时候,才会出现这个伪首部,在传输的过程中这个伪首部自始至终都是不会出现的,

请添加图片描述
第三步中,若是每一个横条都是可以满足4B的话,就不需要填充,
第四步也就是右边的这种方式,
请添加图片描述

请添加图片描述
所谓面向连接就是在传输数据之前要先建立好一个TCP连接,再传送完数据之后在释放这个已经建立的连接,
将这个数据报加上各个层次的首部之后,放在链路上传输,然后在接收端进行一步又一步的解封装,这个是一个完整的物理连接,但是TCP好像是建立了一种点对点的连接,因此我们说是一种虚连接,TCP是没有办法应用于广播或者多播的方式,
面向字节流的含义就是虽然应用进程和TCP的交互每一次都是发送一个数据块,这个数据块的大小可以是不一样的,但是TCP会把这个应用程序交下来的数据看作是一连串的无结构的字节流,
请添加图片描述
取123字节组成一个TCP的报文段,然后这个报文段加上TCP的头部,然后形成一个完整的报文段放在链路上进行传输,当然所携带的字节的个数是不定的,有很多的因素,
请添加图片描述
请添加图片描述
请添加图片描述
TCP报文段在首部除了有20B字节的固定首部之外,还有选项,一个长度可变的字段,TCP有强迫症想要这个首部是4字节的整数倍,也就是4N字节,所以需要一个填充字段来进行补齐,
就像上图中序号是1,而下图中就是11,
只有收到一个确认之后才会发送一个新的报文段,确认号字段上图就应该是4,
因为如果这个首部加了这个选项字段,这个数据部分就不知道从哪里开始的,所以就需要一个数据偏移字段来规定首部有多长

请添加图片描述
本来发送方发送的好好的,突然接受方说不能接收文件了,说你赶快停止,发送方收到这个一个信息之后,它就应该叫停,发送方的叫停一定是要输入一些命令,这些命令的体现就是新假如了一些数据,这些数据就会进入这个TCP缓存中,这个时候使得它的URG等于1,就说明这是一个紧急的数据,紧急的报文段,就应该赶紧发送,而不应该在缓存中排队,
请添加图片描述
PUSH主要是接受方进行的一个紧急处理,也就是若是TCP缓存中若是某一个报文段push==1需要赶紧的交付给应用层上面的进程,

请添加图片描述
这个窗口字段也就是可以容纳的最大的字节流,或者说数据量是多少,根据接收方的窗口大小来设置发送方的发送缓存。在UDP中协议字段是17而TCP中是6,
紧急指针就是告诉紧急数据的位置以及它总共占的字节数,
请添加图片描述

请添加图片描述

请添加图片描述
无应用层数据意思就是无数据部分,只是一个连接请求的作用,
这个seq就是序号位占32bit,这个时候的确定位是没有意义的,
两者都是可以发送或接收的话,那么每一方都是有两个缓存,发送和接收的缓存,接下来这个服务器端就要为接下来的数据通信做好准备,也就是分配好一个缓存以及相应的变量,并且向客户端发一个确认的报文段,就是告诉它,已经收到你的报文请求了,允许发送端发送数据了,注意确认报文段依然是没有数据部分的,注意有了大写的ACK就一定要有小写的ACK,
并且可以看到在第二步和第三步服务器端和客户端分别为TCP过程分配了缓存和变量,并且第三次的序号位是为x+1因为第一步的时候是发送了一个x,

请添加图片描述

请添加图片描述

请添加图片描述
连接释放的报文段中有哪些比较特别的字段,因为这个时候是要请求释放这个连接,FIN结束位这个FIN就应该标为1了,seq就是指这样一个报文段的第一个字节的序号,由于这样一个报文段都是没有数据的,所以这样一个序号也能标记这样一个报文段,
所谓的半关闭就是指客户停止了发送数据,而服务器依然是可以发送数据,
主机对第二步中的这个也不用给与回复,只需要等待服务器告诉他也结束就可以了,
注意第二步和第三步的确认号是一样的,因为客户并没有发送数据,
若是第三步的时候这个丢失了,客户就一直收不到第三个报文段,就会一直重发,B就没有办法进入关闭状态,所以需要一个AMSL时间,

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

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

相关文章

【分享】golang windows 运行报错 undefined: syscall.SIGUSR1

在跟着煎鱼大佬学习 Golang-gin的时候,"在优雅的重启服务篇" ,为了gin服务的热更新,采用了 endlessfresh的方案,安装endless后无法在windows本地调试,然后报错。 (优雅的重启服务-地鼠文档优雅的重启服务-我不怎么喜欢左写写&#…

linux内核模块编译方法之模块编程详解

文章目录 一、模块传参二、模块依赖三、内核空间和用户空间四、执行流五、模块编程与应用编程的比较六、内核接口头文件查询总结 本期和大家主要分享的是驱动开发内核编译过程中对于模块是如何设计的,进行了详细的分享,从模块传参、模块依赖一直到内核空…

楼顶空地适合建造气膜体育馆吗?

众所周知,传统建筑的荷载太大,出于安全考虑,是不适合继续在楼顶加盖传统结构体育馆的,但是,气膜体育馆作为一种装配式建筑,它是可以在城市高空上建造一个轻盈又新颖独特的全天候气膜馆。 气膜体育馆作为一种…

小黑自己在家尝试涮牛排,肚子又开始了新一轮的胀气,喝到了酱香拿铁并烫了纹理发型体验一把的leetcode之旅:123. 买卖股票的最佳时机 III

动态规划1 class Solution:def maxProfit(self, prices: List[int]) -> int:# 数组长度n len(prices)if n < 2:return 0# 动态规划变量# 第一次买的价格first_price prices[0]# 第一次卖的收益first_cell 0# 第二次买的价格second_price prices[0]# 第二次卖second_…

STM32H750 HAL CUBEMX 时钟失败及死机无法下载问题解决

芯片采样电压设置&#xff0c;否则 无法运行 解决死机问题 设置swd 模式 短接 boot0 —vcc 3.3v即可正常下载

驱动开发,stm32mp157a开发板的led灯控制实验

1.实验目的 编写LED灯的驱动&#xff0c;在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制&#xff1b; 2.LED灯相关寄存器分析 LED1->PE10 LED1亮灭&#xff1a; RCC寄存器[4]->1 0X50000A28 GPIOE_MODER[21:20]->01 (输出) 0X50006000 GPIOE_ODR[10]-&g…

5. HBase必知必会之理论进阶篇

HBase必知必会之理论进阶篇 1.1 集群搭建以及规模预测1.1.1 HBase集群搭建1.1.2 HBase集群规划 1.2 HBase重要的概念1.2.1 snapshot1.2.2 region 切分1.2.3 RIT1.2.4 HBase读优化1.2.4.1 客户端优化1.2.4.2 服务端优化1.2.4.3 hdfs 优化 1.2.5 HBase写优化1.2.5.1 客户端优化1.…

Linux centos7 bash编程训练__打印各类形状

利用for循环&#xff0c;打印各种不同的三角形、矩形和菱形。 主要是fort循环嵌套使用&#xff0c;及条件判断等。 因方法简单&#xff0c;不作更多解释&#xff0c;部分注释可以帮助初学者掌握代码。 下面列出代码&#xff0c;供参考。 #! /bin/bash ## 打印输出各种*型形…

中企出海,用火山引擎DataTester开启增长第一步

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 今年 Google 宣布其提供的A/B测试工具 Optimize 将在2023年9月30号停止服务。在全球化浪潮席卷下&#xff0c;越来越多的中国企业正在加速走向全球市场&#xff0c;…

使用 Webpack 从 0 到 1 构建 Vue3 项目 + ts

使用 Webpack 从 0 到 1 构建 Vue3 项目 1.初始化项目结构2.安装 webpack&#xff0c;补充智能提示3.初步编写 webpack.config.js3.1设置入口文件及出口文件3.2 指定 html 模板位置 4.配置 运行/打包 命令&#xff0c;首次打包项目5.添加 Vue 及相关配置5.1安装并引入 vue5.2 补…

一个详细且完整的公司局域网搭建案例,跟着操作!

局域网(Local Area Network&#xff0c;简称LAN)&#xff0c;用于将有限范围内&#xff08;例如一个实验室、一层办公楼或者校园&#xff09;的各种计算机、终端与外部设备互联成网。公司局域网怎么建立&#xff1f;首先来了解下不同规模企业网络组建方式。 10人以下企业网络组…

固定资产管理表怎么填写

在现代企业管理中&#xff0c;固定资产的管理是至关重要的环节。它不仅关系到企业运营的效率&#xff0c;也直接影响到企业的财务状况。因此&#xff0c;正确、有效地填写和管理固定资产管理表显得尤为重要。并提供一些创新的方法来优化这一过程。  让我们理解什么是固定资产…

Win10 cmd默认使用管理员身份运行的修改

一、在开始菜单搜索cmd&#xff0c;打开快捷方式文件位置 二、鼠标右键快捷方式&#xff0c;打开属性 三、选择高级&#xff0c;再勾选用管理员身份运行&#xff0c;点击确定即可

文心一言插件开发全流程,ERNIE-Bot-SDK可以调用文心一言的能力

文心一言插件开发 前言插件插件是什么工作原理申请开发权限 开始第一步&#xff1a;安装python第二步&#xff1a;搭建项目manifest 描述文件&#xff1a;ai-plugin.json插件服务描述文件&#xff1a;openapi.yaml开发自己的plugin-server 第三步&#xff1a;上传插件 SDK相关链…

记录一次开机内存分析的全过程

作者&#xff1a;zzy的学习笔记 记录一次开机内存分析的全过程&#xff0c;尽量详尽的介绍常用内存分析工具和命令行的使用&#xff0c;结合具体问题探讨开机内存分析的实践经验。通过这篇文章我会介绍开机内存的常用测试分析工具的基本使用方法&#xff0c;以及如何通过抓取出…

在UMG中播放图像序列,出现卡帧怎么办?

在虚幻引擎中播放图像序列 前期步骤可以参考上面链接中官方文档的步骤1-13 如果在媒体播放器中播放的时候&#xff0c;出现卡帧现象&#xff0c;说明你的图片序列的帧率与默认的不匹配 需要在lmg Media Source类型文件中&#xff0c;覆写你的帧率 比如&#xff0c;我的图片序…

VSCode错误整理

文章目录 一、zsh: command not found: python二、Python pip安装Django异常Could not find a version that satisfies the requirement pytz (from django)三、WARNING: You are using pip version 21.2.4, however version 23.2.1 is available.四、pip install django下载报…

Sui参会必备|Token 2049活动一览

TOKEN2049是在新加坡举办的一年一度首屈一指地加密货币活动&#xff0c;吸引了顶级的Web3公司和项目的创始人和高管&#xff0c;他们将在这里分享行业观点、聚焦全球发展&#xff0c;同时以独特且广泛的视角审视这个生态系统及其广阔的机会。 自5月份主网上线以来&#xff0c;S…

lv3 嵌入式开发-11 Linux下GDB调试工具

目录 1 GDB简介 2 GDB基本命令 3 GDB调试程序 1 GDB简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说&#xff0c;GDB主要帮助你完成下面四个方面的功能&#xff1a; 1、启动你的程序&#xff0c;可以按照你的自定义的要求随心所欲的运行程序&#…

七、MySql表的内置函数

文章目录 一、日期函数&#xff08;一&#xff09;常用日期函数1.获得年月日&#xff1a;2.获得时分秒&#xff1a;3.获得时间戳&#xff1a;4.在日期的基础上加日期&#xff1a;5.在日期的基础上减去时间&#xff1a;6.计算两个日期之间相差多少天 &#xff08;二&#xff09;…