计算机网络——传输层

news/2024/5/17 11:09:59

文章目录

    • **1 传输层提供的服务**
      • **1.1 传输层的功能**
      • **1.2 传输层的寻址与端口**
    • **2 UDP协议**
      • **2.1 UDP数据报**
      • **2.2 UDP校验**
    • **3 TCP协议**
      • **3.1 TCP协议的特点**
      • **3.2 TCP报文段**
      • **3.3 TCP连接管理**
      • **3.4 TCP可靠传输**
      • **3.5 TCP流量控制**
      • **3.6 TCP拥塞控制**

1 传输层提供的服务

1.1 传输层的功能

向应用层提供通信服务,属于面向通信部分的最高层,也是用户功能中的最低层

(1)提供应用进程之间的逻辑通信,即端到端的通信

(2)复用和分用,复用:发送方不同的应用进程都可使用同一个传输层协议传送数据;分用:指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程

网络也有复用和分用,效果类似

(3)对收到的报文进行差错检测(首部和数据部分);网络层只检查IP数据报的首部

(4)提供两种不同的传输协议,即UDP和TCP

在这里插入图片描述

1.2 传输层的寻址与端口

端口的作用

应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程

端口是传输层服务访问点TSAP,标识的是主机中的应用进程

端口号

长度16比特,只具有本地意义,根据端口号的范围分为两类:

(1)服务器端使用的端口号

熟知端口号:数值为0~1023,这些端口号指派给TCP/IP最重要的一些应用程序

登记端口号:数值1024~49151,供没有熟知端口号的应用程序使用,必须在IANA登记,防止重复

在这里插入图片描述

(2)客户端会用的端口号

数值为49152~65535,仅在客户进程运行时才动态选择,又称短暂端口号,通信结束,用过的客户端口号就不复存在

套接字

端口号拼接到IP地址即构成套接字Socket,采用发送方和接收方的套接字来识别端点,套接字,实际上是一个通信端点,即套接字Socket=(IP地址:端口号)

唯一的表示网络中一台主机和其上的一个应用进程

TCP:文件传输协议FTP,超文本传输协议HTTP,远程登录TELNET等

UDP:小文件传送协议TFTP,DNS,SNMP和实时传输协议RTP

IP数据报在网络层要经过路由的存储转发;而UDP数据报会封装成IP数据报在网络中传输,UDP数据报的信息对路由不可见

网络层采用虚电路无法提供无连接服务,传输层采用TCP不影响网络层提供无连接服务

2 UDP协议

2.1 UDP数据报

UDP概述

UDP仅在IP数据报服务增加了:复用和分用,以及差错检测

优点:

(1)无须建立连接,没有这方面的时延

(2)无连接状态,某些专用应用服务器使用UDP时, 一般都能支持更多的活动客户机

(3)分组首部开销小,只有8B

(4)应用层能更好的控制发送的数据和发送时间;某些实时应用要求稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,UDP正好满足

(5)UDP支持一对一,一对多,多对一和多对多的交互通信

常用于一次性传输较少数据的网络应用;UDP面向报文,应用层的报文直接添加首部后交付给IP层,一次发送一个报文,既不合并,也不拆分,因此应用程序必须选择合适大小的报文

UDP的首部格式

(1)源端口

(2)目的端口

(3)长度:数据报的长度(包括首部和数据),最小值是8

(4)检验和

在这里插入图片描述

在这里插入图片描述

如果接收方发现目的端口号不正确,丢弃报文,ICMP发送端口不可达的差错报文给发送方

2.2 UDP校验

计算校验和时要在UDP数据报之前增加12B伪首部,仅供计算校验和使用

在这里插入图片描述

IP数据报校验和检验只首部,UDP校验和检验首部和数据

发送方把全0放入校验和字段并添加伪首部,然后以16位作为子串拼接;若UDP不是偶数字节,则需要添加一个全0字节,但是不发送,仅供计算;然后按反码计算出这些16位字的和,将和的反码写入校验和字段,发送;接收方收到后加上伪首部,再按反码求和,无差错时结果全1,否则就是有错,丢弃UDP

在这里插入图片描述

校验出数据报是错误的,可以丢弃,也可以交付给上层,但是需要附上错误报告

这种校验方法校错能力不强,但简单,处理速度快

3 TCP协议

3.1 TCP协议的特点

(1)面向连接,是一条逻辑连接

(2)每一条只能有两个断点,一对一

(3)提供全双工通信,两端设有发送缓存和接收缓存

(4)面向字节流,应用程序和TCP的交互是一个数据块,但TCP会视为一连串无结构的字节流

(5)提供可靠交付的服务,保证传送的数据无差错,不丢失,不重复且有序

且UDP报文的长度由程序决定, 但TCP会根据窗口值和网络拥塞程度来决定,过长会划分短一些,过短会积累足够再发

3.2 TCP报文段

TCP报文段可以运载数据,可以用来建立连接,释放连接和应答;首部20B固定,最短为20,增加的部分必须是4B的整数倍

在这里插入图片描述

(1)序号,TCP是面向字节流,所有字节按顺序编号;例如一个报文段的序号字段为301,携带的数据共有100B,表明最后一个字节的序号是400,因此下一个报文段的序号从401开始

(2)确认号,期望收到对方下一个报文段的第一个数据字节的序号,若确认号为N,表明序号N-1之前的数据都正确接收

(3)数据偏移,表示首部的长度,4B为计算单位,因此首部最长60B

(4)紧急位URG,URG=1,表明紧急位有效,告诉系统此报文段中有紧急数据,应尽快传送,要和紧急指针字段配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据

(5)确认位ACK,ACK=1时确认号字段有效,TCP规定,连接建立后所有发送的报文ACK置1

(6)推送位PSH,收到PSH=1的报文段,尽快交付,不用等缓存满

(7)复位位RST,RST=1表明TCP连接出现严重差错,必须释放连接

(8)同步位SYN,SYN=1,ACK=0,表明这是一个连接请求报文,对方若同意连接,则应在响应报文中使用SYN=1,ACK=1

(9)终止位FIN,FIN=1,表明此报文段的发送方的数据已发送完毕,要求释放连接

(10)窗口:指出现在允许对方发送的数据量,接收方的数据缓存空间有限,因此窗口值作为接收方让发送方设置发送窗口的依据

如,确认号701,窗口值1000,表明从701算起,发送此报文段的一方还有1000B的接收缓存空间

(11)校验和,与UDP类似,只是协议字段17改为6

(12)紧急指针:指出本报文段中紧急数据共有多少字节

3.3 TCP连接管理

TCP连接的端口即为套接字或插口,每条TCP连接唯一的被通信的两个端点(即两个套接字)确定

TCP连接的建立擦爱用客户/服务器模式,主动发起连接的称为客户,被动等待的称为服务器

TCP连接的建立

在这里插入图片描述

常称为三次握手

第一步:客户发TCP连接请求报文,SYN=1,选一个初始序号seq=x,SYN报文段不能携带数据,但要消耗序号,然后客户进入SYN-SENT同步已发送状态

第二步:服务器若同意,发回Queen,并分配好缓存和变量,SYN=1,ACK=1,确认号ack=x+1,且自己选一个初始序号seq=y;服务器进入SYN-RCVD同步收到状态

第三步:客户收到确认后还要发送确认,并分配缓存和变量,确认报文段ACK=1,确认号ack=y+1,序号seq=x+1,该报文段可以携带数据,客户进入ESTABLISHED已建立连接状态

服务器的资源时第二次握手时分配的,客户的资源是完成第三次握手时分配的,因此服务器易于收到SYN洪泛攻击

TCP连接的释放

在这里插入图片描述

常称为四次握手

第一步:客户机发送连接释放报文段,并停止发送数据,主动关闭TCP连接,FIN=1,序号seq=u,TCP是全双工,发送FIN的一方不能发数据,但对方还能发

第二步:服务器收到后发出确认,然后服务器进入CLOSE-WAIT关闭等待状态,此时从客户机到服务器的连接就释放了,但服务器到客户机的连接还未关闭

第三步:若服务器没有要发送的数据,就通知TCP释放连接,此时发出FIN=1的连接释放报文段,服务器进入LAST-ACK最后确认状态

第四步:客户机收到后发出确认,ACK=1,此时TCP连接还没有释放,必须经过时间等待计时器设置的时间2MSL(最长报文段寿命后),客户机才进入CLOSED连接关闭状态

3.4 TCP可靠传输

TCP使用校验,序号,确认和重传来达到可靠传输

序号

即每个字节的序号,首部的序号字段用来保证数据有序提交给应用层

确认

TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号

TCP默认使用累积确认,即TCP只确认数据流中至第一个丢失字节为止的字节,例如接收方B收到了A发送的包含字节0~2,6~7的报文段,没有收到3~5,那么B的下一个报文段确认号置为3

重传

(1)超时

TCP每发送一个报文段,就设置一次计时器,重传时间到期还没收到确认,就重传报文段

为了计算超时计时器的重传时间,TCP采用一种自适应算法,记录一个报文发出的时间到收到相应确认的时间,两个时间之差称为往返时间RTT,TCP保留了RTT的一个加权平均往返时间RTTs,会随着RTT样本值的变化而变化

超时计时器的时间略大于RTTs

(2)冗余ACK(冗余确认)

超时重传的超时周期往往太长,因此可以通过冗余ACK来检测丢包情况

如发送1,2,3,4,5,其中2号丢失,3,4,5就是失序报文段,TCP规定每当比期望序号大的失序报文段到达时,就发送一个冗余ACK,指明下一个期待字节的序号,即发送三个对1号报文段的冗余ACK,表示自己期望接收2号,TCP规定当发送方收到对同一个报文段的3个冗余ACK时,就可以认为跟在这个被确认报文段之后的报文段已经丢失,那么进行重传,这种技术通常称为快速重传

3.5 TCP流量控制

消除发送方发送速率过快使接收方缓存溢出的可能性

调整TCP报文段首部的窗口的值,来限制发送方向网络注入报文的速率;接收方动态调整发送方的发送窗口大小称为接收窗口rwnd;发送方根据网络拥塞程度估计而确定的窗口值,称为拥塞窗口cwnd

实际发送窗口的大小取rwnd和cwnd中的最小值

在这里插入图片描述

数据链路层的窗口不能动态变化,传输层的可以动态变化

3.6 TCP拥塞控制

拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有主机,路由器和其他因素;流量控制仅仅只是端到端的速率问题

拥塞控制的算法:慢开始,拥塞避免,快重传,快恢复

假设接收方有足够大的缓存空间,即发送窗口由拥塞窗口决定

(1)慢开始算法

先令拥塞窗口=1,即一个最大报文段长度MSS;每经过一个传输轮次RTT,cwnd就会加倍

慢不是指增长速率慢,而是指初始值为1;当cwnd增大到一个慢开始门限ssthresh(阈值),然后该用拥塞避免算法

(2)拥塞避免算法

每经过一个RTT就把cwnd加1,而不是加倍;并不能完全避免拥塞

cwnd<ssthresh,慢开始

cwnd=ssthresh,慢开始和拥塞避免都可以

cwnd>ssthresh,拥塞避免算法

(3)网络拥塞的处理

无论在慢开始还是拥塞避免,只要出现拥塞,就把门限ssthresh设为出现拥塞时发送方的cwnd值的一半(但不能小于2),然后把cwnd置为1,重新开始执行慢开始算法

在这里插入图片描述

慢开始阶段,当2cwnd>ssthresh时,则下一个cwnd=ssthresh,因为cwnd不能越过ssthresh

慢开始和拥塞避免使用了乘法减小和加法增大方法

(1)快重传

快重传技术使用冗余ACK来检测丢包的发送,同样冗余ACK也用于网络拥塞的检测

发送方收到连续三个重复的ACK报文,直接重传对方未收到的报文段,不必等待计时器超时

(2)快恢复

原理:当收到三个冗余ACK,执行乘法减小,把ssthresh设置为cwnd的一半

但发送方现在认为网络没有那么拥塞,否则就不会有报文连续到达接收方,因此与慢开始不同的是它把cwnd设置为门限ssthresh改变后的数值,然后执行拥塞避免

在这里插入图片描述

TCP连接建立和网络超时时,采用慢开始和拥塞避免;发送方收到冗余ACK,采用快重传和快恢复

存中…(img-1mClfeER-1690297536034)]

TCP连接建立和网络超时时,采用慢开始和拥塞避免;发送方收到冗余ACK,采用快重传和快恢复


http://www.mrgr.cn/p/07113538

相关文章

Verilog语法学习——LV4_移位运算与乘法

LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述&#xff1a; 已知d为一个8位数&#xff0c;请在每个时钟周期分别输出该数乘1/…

Spring Security 构建基于 JWT 的登录认证

一言以蔽之&#xff0c;JWT 可以携带非敏感信息&#xff0c;并具有不可篡改性。可以通过验证是否被篡改&#xff0c;以及读取信息内容&#xff0c;完成网络认证的三个问题&#xff1a;“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全&#xff0c;使用它需要采用 …

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后&#xff0c;浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法&#xff1a;get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…

2023 蓝桥杯真题B组 C/C++

https://www.dotcpp.com/oj/train/1089/ 题目 3150: 蓝桥杯2023年第十四届省赛真题-冶炼金属 题目描述 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 V&#xff0c;V 是一个正整数&#xff0c;这意味着消耗 V 个普通金 属 O…

react-native 输入框 被软键盘遮挡 (KeyboardAvoidingView)

本组件用于解决一个常见的尴尬问题&#xff1a;手机上弹出的键盘常常会挡住当前的视图。本组件可以自动根据键盘的高度&#xff0c;调整自身的 height 或底部的 padding&#xff0c;以避免被遮挡。 <KeyboardAvoidingViewbehavior{Platform.OS ios ? padding : height}key…

【点云处理教程】02从 Python 中的深度图像估计点云

一、说明 这是“点云处理”教程的第二篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。在本教程中&#xff0c;我们将学习如何在不使用 Open3D 库的情况下从深度图像计算点云。我们还将展示如何优化代码以获…

【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

1 问题描述 在 Vue3 项目中&#xff0c;有时候会出现图片视频加载缓慢、首屏加载白屏的问题 2 原因分析 通常是由以下原因导致的&#xff1a; 图片或视频格式不当&#xff1a;如果图片或视频格式选择不当&#xff0c;比如选择了无损压缩格式&#xff0c;可能会导致文件大小过大…

微信小程序交易体验分常见问题指引

小程序交易体验分是为保障小程序用户的交易体验&#xff0c;促进开发者向用户提供更好的服务&#xff0c;帮助开发者更好的评估自身服务水平的机制。平台将对开发者在其小程序的违规行为进行判定&#xff0c;根据违规行为的严重程度对该小程序扣减不同分值的交易体验分&#xf…

风靡朋友圈的妙鸭相机,到底用了哪些底层技术?

不知道大家近期的朋友圈有没有被和海马体、天真蓝如出一辙的AI写真刷屏&#xff01; 这些面若桃花、精致到头发丝、光影充满氛围感的写真都是一款叫“妙鸭相机”的小程序生成的&#xff01;只要9.9&#xff0c;就能体验999写真&#xff01; 虽然只要9.9&#xff0c;但生成的照片…

opencv-24 图像几何变换03-仿射-cv2.warpAffine()

什么是仿射&#xff1f; 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够 保持图像的平直性和平行性。平直性是指图像经过仿射变换后&#xff0c;直线仍然是直线&#xff1b;平行性是指 图像在完成仿射变换后&#xff0c;平行线仍然是平行线。…

海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131679108 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

服务器 Docker Alist挂载到本地磁盘(Mac版)夸克网盘

1.服务器下载alist 默认有docker环境 docker pull xhofe/alist2.生成容器 -v /home/alist:/opt/alist/data 这段意思是alist中的数据映射到docker 主机的文件夹&#xff0c;/home/alist就是我主机的文件夹&#xff0c;这个文件夹必须先创建 docker run -d --restartalways…

【Python】数据分析+数据挖掘——探索Pandas中的数据筛选

1. 前言 当涉及数据处理和分析时&#xff0c;Pandas是Python编程语言中最强大、灵活且广泛使用的工具之一。Pandas提供了丰富的功能和方法&#xff0c;使得数据的选择、筛选和处理变得简单而高效。在本博客中&#xff0c;我们将重点介绍Pandas中数据筛选的关键知识点&#xff…

ChatGPT结合知识图谱构建医疗问答应用 (一) - 构建知识图谱

一、ChatGPT结合知识图谱 在本专栏的前面文章中构建 ChatGPT 本地知识库问答应用&#xff0c;都是基于词向量检索 Embedding 嵌入的方式实现的&#xff0c;在传统的问答领域中&#xff0c;一般知识源采用知识图谱来进行构建&#xff0c;但基于知识图谱的问答对于自然语言的处理…

Nginx配置WebSocket反向代理

1、WebSocket协议 ​ WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯&#xff0c;直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容&#xff0c;它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的…

深度学习——LSTM解决分类问题

RNN基本介绍 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如文本、语音、时间序列等具有时序关系的数据。 核心思想 RNN的关键思想是引入了循环结构&#xff0c;允许…

记一次安装nvm切换node.js版本实例详解

最后效果如下&#xff1a; 背景&#xff1a;由于我以前安装过node.js&#xff0c;后续想安装nvm将node.js管理起来。 问题&#xff1a;nvm-use命令行运行成功&#xff0c;但是nvm-list显示并没有成功。 原因&#xff1a;因为安装过node.js&#xff0c;所以原先的node.js不收n…

CloudStudio搭建Next框架博客_抛开电脑性能在云端编程(沉浸式体验)

文章目录 ⭐前言⭐进入cloud studio工作区指引&#x1f496; 注册coding账号&#x1f496; 选择cloud studio&#x1f496; cloud studio选择next.js&#x1f496; 安装react的ui框架&#xff08;tDesign&#xff09;&#x1f496; 安装axios&#x1f496; 代理请求跨域&#x…

2.获取DOM元素

获取DOM元素就是利用JS选择页面中的标签元素 2.1 根据CSS选择器来获取DOM元素(重点) 2.1.1选择匹配的第一个元素 语法: document.querySelector( css选择器 )参数: 包含一个或多个有效的CSS选择器 字符串 返回值: CSS选择器匹配的第一个元素&#xff0c;一个HTMLElement对象…

Data Structure, Algorithm,and Applications in C++

在学习这本书进阶内容之前&#xff0c;我们可以跟着它的第一章部分再巩固和复习。本书由Sartaj Sahni撰写&#xff0c;由王立柱和刘志红翻译。全书通俗易懂&#xff0c;内容丰富&#xff0c;是巩固C内容的不二选择。希望本文对各位有所帮助。 目录 1.函数与参数 1.1.传值参数…