计算机网络————运输层
文章目录
- 概述
- UDP
- TCP
- 首部格式
- 连接管理
- 连接建立
- 连接释放
概述
从IP层看,通信双方是两个主机。
但真正进行通信的实体是在主机中的进程,是这个主机中的一个进程和另一个主机中的一个进程在交换数据。
所以严格的讲,两个主机进行通信就是两个主机中的应用进程互相通信。
IP协议能把分组送到主机,但分组还停留在主机的网络层而没有交付给主机中的应用进程。
从运输层看,通信的真正端点并不是主机而是主机中的进程。即,端到端的通信是应用进程之间的通信。在一个主机中经常有多个应用进程同时分别和另一个主机中的多个应用进程通信。
运输层的重要功能:
- 复用:在发送方不同的应用进程都有可以使用同一个运输层协议传送数据
- 分用:接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程
协议
两个主要协议:
- 用户数据报协议UDP(User Datagram Protocol) | RFC 768 | UDP用户数据报
- 传输控制协议TCP(Transmission Control Protocol) | RFC 793 | TCP报文段
UDP在传送数据之前不需要先建立连接,远程主机的运输层收到UDP报文后,不需要给出任何确认。
TCP提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。
一些应用和应用层协议主要使用的运输层协议:
运输层的端口
因特网上使用的计算机的操作系统种类很多,不同的操作系统又使用不同格式的进程标识符。为了使运行不同操作系统的计算机的应用进程能够互相通信,必须使用统一的方法对TCP/IP体系的应用进程进行标志,这种方法必须与特定操作系统无关。
但把一个特定机器上运行的特定进程指明为因特网上通信最后的终点还是不可行的。这是因为进程的创建和撤销都是动态的,通信的一方几乎无法识别对方机器上的进程。
另外,往往需要利用目的主机提供的功能来识别终点,而不需要知道具体实现这个功能的进程是哪一个。
解决方法是在运输层使用协议端口号,简称为端口(port)。也就是说,虽然通信的终点是应用进程,但只要把传送的报文交到目的主机的某一个合适的目的端口,剩下的工作就由TCP来完成。
TCP/IP的运输层用一个16位端口号来标志一个端口。端口号只具有本地意义,只是为了标志本计算机应用层中的各个进程在运输层交互时的层间接口。在因特网的不同计算机中,相同的端口号是没有关联的。16位的端口号可允许有65535个不同的端口号。
两个计算机中的进程互相通信,不仅需要对方的IP地址,还需要知道对方的端口号。
因特网上的计算机通信是采用客户-服务器方式,客户在发起通信请求时,必须知道对方服务器的IP地址和端口号。运输层的端口号分为两大类:
1、服务器端使用的端口号:又分为两类
- 熟知端口号或系统端口号,数值0~1023,可在www.iana.org查到,指派给TCP/IP最重要的应用程序,让所有的用户都知道。
- 登记端口号,数值1024~49151。 是为没有熟知端口号的应用程序使用的。这类必须在IANA登记,以防止重复。
2、客户端使用的端口号,数值1024~65535。这类端口号仅在客户进程运行时动态选择,又叫短暂端口号。通信结束就不存在了。
UDP
在IP之上增加很少的功能:
- 复用
- 分用
- 差错检测
主要特点:
- 无连接,减少了开销和发送数据之前的时延
- 尽最大努力交付,即不保证可靠交付
- 面向报文,发送发的UDP对应用程序交下来的报文,添加首部后就向下交付给IP层。既不合并,也不拆分,保留这些报文的边界。
- 无拥塞控制
- 支持一对一、一对多、多对一、多对多交互通信
- 首部开销小,只有8字节,TCP有20字节
首部格式
数据字段和首部字段
首部字段由四个字段组成,每个字段的长度都是两个字节:
1、源端口 : 在需要回信时选用,不需要可全用0
2、目的端口 : 终点交付报文
3、长度 : UDP用户数据报的长度,最小值是8
4、检验和 : 检测UDP用户数据报在传输时是否有错,有错就丢弃
如果接收方UDP发现收到的报文中的目的端口号不正确,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方
UDP的检验和是把首部和数据部分一起都检验,IP数据报的检验和只检验IP数据报的首部
TCP
主要特点:
1、面向连接
2、每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
3、提供可靠交付。无差错、不丢失、不重复、按序到达
-
停止等待协议
-
无差错情况,发送-确认-发送-确认······
-
出现差错
-
-
A超过一段时间仍没有收到确认,就认为刚才发送的分组丢失了,重传前面发送过的分组,这叫做超时重传。
-
要实现超时重传,要在发送完一个分组设置一个超时计时器,如果在超时计时器到期之前收到了对方的确认,就撤销以设置的超时计时器
-
-
确认丢失和确认迟到
- B发送的确认丢失,A重传数据,B又收到数据,会采取丢弃重复数据,向A发送确认 。
- B对分组的确认迟到,A会收到重复的确认,丢弃即可,B还会收到重复数据,同样丢弃,重传确认
-
-
连续ARQ协议
- 发送方维持发送窗口,位于发送窗口的分组都可以连续发送出去,不需要等待对方的确认,可提高信道利用率
- 连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置,然后可以继续发送新覆盖的分组。
- 接收方一般采用累计确认的方式,接收方不必逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,这样就表示,到这个分组为止的所有分组都正确收到了
- 优点:容易实现,确认丢失也不必重传
- 确定:不能向发送方反映出接收方已经正确收到的所有分组的信息
4、提供全双工通信。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据
5、面向字节流。“流”是指流入到进程或从进程流出的字节序列。TCP把应用程序交下来的数据堪称仅仅是一连串的无结构的字节流,不知道字节流的含义。
TCP连接的端点叫做套接字或插口
端口号拼接到IP地址即构成了套接字
套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开,例:192.3.4.5:80
套接字socket=(IP地址: 端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定,即:
TCP连接::={socket1, socket2} = {(IP1: port1), (IP2, port2)}
首部格式
TCP报文段首部的前20个字节是固定的,后面有4N字节是根据需要而增加的选项。最小20,最大60
1,2、源端口和目的端口:各占2字节。
3、序号:4字节。范围是 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,232−1]。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。序号字段值指的是本报文段所发送的数据的第一个字节的序号,也称作“报文段序号”
4、确认号:4字节。期望收到对方下一个报文段的第一个数据字节的序号。如B正确收到A发送的报文段,序号字段为501,数据长度为200,则数据序号分别为501~700,表明B正确收到A发送的到700为止的数据,因此B期望收到A的下一个数据序号为701。
确认号=N,就表明:到序号N-1为止的所有数据都已正确收到
5、数据偏移:4位。指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,即指出TCP报文段的首部长度。
6、保留,6位。保留为今后使用,目前置为0
7、紧急URG,当URG=1,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不按原先排队顺序来传送。
8、确认ACK,仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,连接建立后的所有传送报文段都必须把ACK置1。
9、10、复位RST,当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用了拒绝一个非法的报文段或拒绝打开一个连接。
11、同步SYN,连接建立时用来同步序号。SYN=1而ACK=0时,表明是一个连接请求报文段。如果对方同意建立连接,响应报文段中使SYN=1和ACK=1。所以,SYN置1表示这是一个连接请求或连接接受报文。
12、终止FIN,用来释放一个连接。FIN=1,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。
13、窗口,2字节。是 [ 0 , 2 16 − 1 ] [0,2^{16}-1] [0,216−1]的整数。指发送本报文段的以方的接收窗口。窗口值告诉对方:从本报问段首部中的确认号算起,接收方目前运行对方发送的数据量。
14、检验和,2字节。检验和字段检验的范围包括首部和数据两部分。
15、紧急指针,2字节。仅在URG=1时才有意义,指出本报文段中的紧急数据的字节数。即使窗口为0也可以发送紧急数据。
16、选项,长度可变,最大40字节。
连接管理
三个阶段:连接建立、数据传送、连接释放
连接建立
B的TCP服务器进程先创建传输控制块TCB,准备接受客户端进程的连接请求,然后就处于listen的状态。
A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发送连接请求报文。
TCB(Transmission Control Block)存储了每一个连接中的一些重要信息,如:TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号等等。
1、A发送连接请求:SYN=1,选择一个初始序号seq=x
2、B收到连接请求,如同意建立连接,向A发送确认:
SYN=1,ACK=1,seq=y,确认号ack=x+1
3、A收到B的确认,向B给出确认。ACK=1,确认号ack=y+1,主机的序号seq=x+1
连接释放
1、A的应用进程先向其TCP发出连接释放报文段,并停止发送数据,主动关闭TCP连接。连接释放报文段首部:FIN=1,seq=u,序号等于前面已传送过的数据的最后一个字节的序号加1。
2、B收到连接释放报文段后即发出确认,确认号ack=u+1,seq=v,等于B前面已传送过的数据的最后一个字节的序号加1。
从A到B方向的连接就释放了
3、A收到B的确认后,等待B发出连接释放报文段
B连接释放报文段FIN=1,ack=u+1
4、A收到连接释放报文段,A确认,ACK=1,ack=w+1,seq=u+1
相关文章:

计算机网络————运输层
文章目录 概述UDPTCP首部格式 连接管理连接建立连接释放 概述 从IP层看,通信双方是两个主机。 但真正进行通信的实体是在主机中的进程,是这个主机中的一个进程和另一个主机中的一个进程在交换数据。 所以严格的讲,两个主机进行通信就是两个…...

【雕爷学编程】Arduino动手做(154)---AFMotor电机扩展板模块
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…...

【RPC】—Protobuf入门
Protobuf入门 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏👉https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专栏&a…...

【⑩MySQL】:表管理,让数据管理不再困难
前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL表/数据库创建和管理的讲解✨ 目录 前言1. 基础知识2. 创建和管理数据库3.创建表4. 修改表5. 删除表6.总结 1. 基础知识 ✨1.1 表的基本概念 在MySQL数据库中,表是一种很重要的数据库对象…...

Springboot项目使用原生Websocket
目录 1.启用Websocket功能2.封装操作websocket session的工具3.保存websocket session的接口4.保存websocket session的类5.定义websocket 端点6.创建定时任务 ping websocket 客户端 1.启用Websocket功能 package com.xxx.robot.config;import org.springframework.context.a…...

在Vue 3中如何实现服务端渲染(SSR)
今天我要给你们介绍一个很酷的功能——在Vue 3中实现服务端渲染(SSR) 首先,我们来聊聊SSR是什么。它就像是一个魔术师,能让你的网页在服务器上就预先渲染好,然后发送到客户端。想象一下,你在浏览一个网页&…...

【计算机组成原理期末课设作业】16位微型计算机实现——MOVS串传送扩展指令设计
16位微型计算机实现——MOVS串传送扩展指令设计😎 前言🙌教学目的:1、数据**加粗样式**通路分析2、微程序控制器分析3、指令系统分析4、微程序控制器指令周期流程图5、微指令编码6、测试程序和运行结果(1)首先先在内存…...

CodeMirror 对 XML 文档熟悉及元素控制自定义
CodeMirror 是一个网络代码编辑器组件。它可以在网站中用于实现支持多种编辑功能的文本输入字段,并具有丰富的编程接口以允许进一步扩展。 本文为 xml 格式的代码提示约束格式规范的自定义示例内容。 先看效果,如下: 官方 Demo 的完整代码如…...

Jetpack - ViewModel
一、概念 二、使用 2.1 创建ViewModel //无参 class MainViewModel : ViewModel() {} //有参 class MainViewModel(mainRepository: MainRepository) : ViewModel() {} class MainViewModelFactory(private val mainRepository: MainRepository) : ViewModelProvider.Factor…...

【新版系统架构】第十三章-层次式架构设计理论与实践
软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 第一章-绪论第二章-计算机系统基础知识(一)第二章-计算机系统基础知识(二)第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…...

剖析Linux文件系统
Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统。例如,read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型ÿ…...

简介Maven结构与配置方法
一、Maven是什么 Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 它有什么用呢? 比如我以前要IOUtils这个包,那要到网站下去下载下来,再导入。 当jar包多的时候,一个一个导出,…...

好用的网址6
PPT课件网:http://www.pptkj.net/ ImgUpscaler:AI Image Upscaler - Upscale Photo, Cartoons in Batch Free 加强图片 AI Draw:AI Draw | Convert Images to One-Line Drawings with AI ZToDoList:https://www.ztodolis…...

MySQL数据库---笔记5
MySQL数据库---笔记5 一、锁1.1、介绍1.2、全局锁1.2.1、全局锁介绍1.2.2、一致性数据备份 1.3、表级锁1.3.1、表锁1.3.2、元数据锁(meta data lock , MDL)1.3.3、意向锁 1.4、行级锁1.4.1、介绍1.4.2、行锁1.4.3、间隙锁/临建锁 二、InnoDB引擎2.1、逻辑…...

Yocto:初始
1.构建Yocto项目前,需要先安装其所依赖的一些组件及工具 1 System Requirements — The Yocto Project 4.2.999 documentation 需要依次安装: $ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python…...

autodl算力租用平台应用于pycharm
一、GPU租用选择 1、创建实例 首先进入算力市场 博客以2080为例,选择计费方式,选择合适的主机,选择要创建实例中的GPU数量,选择镜像(内置了不同的深度学习框架),最后创建即可 2、SSH远程连…...

高德地图的使用
JS API 结合 Vue 使用 高德地图 jsapi 下载、引入 npm add amap/amap-jsapi-loaderimport AMapLoader from amap/amap-jsapi-loader 使用2.0版本的loader需要在window对象下先配置 securityJsCode JS API 安全密钥使用 JS API 使用 script 标签同步加载增加代理服务器设置…...

<List<Map<String,String>>> 删除元素常见的误区以及删除方法
看到这么标题可能觉得这个真是太easy了,不就remove吗,分分钟搞定。 但结果却出乎意料,下面我们来j简单说说list删除数据可能遇到的坑: 先说明我们可能会遇到的两个问题: 1.java.lang.IndexOutOfBoundsException(索引越…...

Linux下的编辑器——vim的简单上手指南
文章目录 一.概念1. 什么是 vim2. Vim 的模式①命令模式② 插入模式③底线命令模式 二.vim的基本操作1.如何启动vim?2. [命令模式」切换至 「插入模式」3.「插入模式」 切换至 「命令模式」4.「命令模式」切换至 「底行模式」5. 如何退出 vim? 三.vim指令…...

C++多线程学习(二、多线程的几种创造方式【有返回值的之后讲】)
目录 创建多线程 1.普通函数充当线程处理函数创造线程 2.Lambda表达式充当线程处理函数 3.带参函数创建线程 3.1普通参数 3.2传入引用 3.3智能指针充当函数参数 4.通过类中的成员函数创建 4.1仿函数方式创建:类名的方式调用 4.2普通类中的成员函数 创建多…...

前端开发框架生命周期详解:Vue、React和Angular
引言 作为前端开发者,掌握前端开发框架的生命周期是非常重要的。在现代Web应用开发中,Vue.js、React和Angular是三个最流行的前端开发框架。本篇博客将详细解读这三个框架的生命周期,包括每个阶段的含义、用途以及如何最大限度地利用它们。通…...

【Java从入门到大牛】程序流程控制
🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Java从入门到大牛 🌠 首发时间:2023年7月7日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾…...

UML学习统一建模语言
unified modeling language 统一建模语言 面向对象软件分析与设计建模的事实标准 类命名:帕斯卡特命名 类之间的关系 关联关系:班级和学生,一个类的对象作为另一个类的成员变量; 通过非构造和setter注入的方式建立联系…...

【C++学习笔记】RAII思想——智能指针
智能指针 1 内存泄漏问题2 RAII(Resource Acquisition Is Initialization)2.1 使用RAII思想设计的SmartPtr类2.2 智能指针的原理2.3 小总结智能指针原理 3 智能指针的拷贝问题3.1 std::auto_ptr3.2 std::unique_ptr3.3 std::shared_ptr3.3.1 拷贝构造函数…...

ubantu配置python环境
安装python 参考博客 安装pycharm 博客 创建Pycharm快捷方式 博客 ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compiled with File “/home/r00t/IdeaProjects/data/venv/lib/python3.9/site-packages/urllib3/init.py”…...

单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法(matlab代码)
目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第五章《单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法》…...

dockerfile常用指令
Dockerfile常用指令 视频学习资料来源这里,点击本行文字即可跳转,讲的比较详细,不过比较老,跟最新的肯定是有一些差异的 Dockerfile官网文档的话点击这里 中文文档可以看看这个,不过没有详细的代码demo 或者是看这个 或…...

Matlab/simulink与dsp28335联合开发教程
一.入门篇(开发环境搭建) 1.1 Code Composer Studio 软件安装1.2 MATLAB 软件安装1.3 Control_SUIT3.4 软件安装1.4 C2000 Simulink 开发工具箱安装1.5 Visual_Studio_Professional 二. 基础篇(片内外设使用) 2.1 G…...

新项目搞完啦!!!
大家好,我是鱼皮。 经过了 7 场直播,总时长近 20 小时,我在 自己的编程导航 的第 5 个 全程直播开发 的项目 —— 智能 BI 项目,完结啦! 我在这里对该项目做一个简单的总结,希望让更多需要它的同学看到&am…...

分享一个可交互的小场景(二)
先看效果: 可互动的小场景 再看代码: JS部分 <script>var rotateDiv document.getElementById(rot);var rotateIcons document.getElementById(rot-icons);var clickRotateDiv document.getElementById(click-rot);var angle 0;clickRotateDi…...