计算机网络-笔记-第五章-运输层

news2024/11/17 11:42:47

目录

五、第五章——运输层

1、运输层概述

2、运输层端口号、复用、分用

(1)熟知端口号、登记端口号、短暂端口号

(2)熟知端口号

(3)发送方复用、接收方分用

3、UDP与TCP对比

(1)UDP

(2)为什么TCP面向字节流、UDP面向报文?

4、TCP各种机制

(1)TCP——流量控制

(2)拥塞控制

(2)拥塞控制 ——慢开始 & 拥塞避免

(2)拥塞控制 ——快重传 & 快恢复

(2)拥塞控制 ——总结

(3)TCP——超时重传

(4)TCP——可靠传输

(5)TCP——连接建立(※)

(6)TCP——连接释放(※)

(7)TCP——首部格式

(8)TCP——首部格式——端口、序号、确认号

(9)TCP——首部格式——数据偏移、保留、窗口

(10)TCP——首部格式——标志位、紧急指针

(11)TCP——首部格式——校验和、填充、选项


五、第五章——运输层

1、运输层概述

网络层实现了主机与主机

运输层实现端口到端口(进程与进程)

运输层协议 = 端到端协议

 

 

 

2、运输层端口号、复用、分用

(1)熟知端口号、登记端口号、短暂端口号

注意:端口号的范围——0~65535

 

端口号是用于标识应用程序或服务的通信端口。它是一个16位的数字,范围从0到65535。

0到1023是熟知端口号(Well-known Ports),

1024到49151是登记端口号(Registered Ports),

49152到65535是短暂端口号(Dynamic or Private Ports)。

熟知端口号是广泛使用和标准化的一些常用端口号,由IANA指定。

登记端口号是由IANA进行登记但没有被广泛使用或标准化的一些端口号,范围在1024到49151之间。

短暂端口号是临时分配给客户端的端口号,范围在49152到65535之间。

(2)熟知端口号

 

(3)发送方复用、接收方分用

发送方复用(Sender Multiplexing)和接收方分用(Receiver Demultiplexing)是指通过端口号来将多个应用程序的数据进行区分和传输的过程。

发送方复用是指发送方的运输层将来自不同应用程序的数据进行合并,并使用源端口号将这些数据分配给不同的传输连接。每个传输连接都与一个唯一的目标端口号相关联,这样在接收端可以根据目标端口号将数据正确地交付给对应的应用程序。

接收方分用是指接收方的运输层根据目标端口号将到达的数据进行分发,确保这些数据被正确地交付给相应的应用程序。接收方依靠目标端口号来识别传输连接,并将数据传递给相应的应用程序,从而实现数据的分发和传输。

通过发送方复用和接收方分用,不同应用程序的数据可以共享同一个网络连接,并通过运输层使用端口号进行区分和传输。

这种复用和分用的机制有效地提高了网络资源的利用率和通信效率。

 

3、UDP与TCP对比

注意:TCP面向字节流、UDP面向报文

 

特性

TCP

UDP

连接性

面向连接

无连接

可靠性

提供可靠的数据传输

不保证可靠性

传输顺序

保证数据按照发送顺序进行传输

不保证数据按照发送顺序进行传输

消息边界

无消息边界,数据流进行分段和重组

有消息边界,保持消息的完整性

开销

较大的开销,提供错误检测、重传和流量控制机制

较小的开销,不提供错误检测和重传机制

(1)UDP

UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(2)为什么TCP面向字节流、UDP面向报文?

TCP 面向字节流:

TCP 将数据视为字节流,发送端将连续的字节流分成合适的大小(根据网络状况动态调整)进行发送,接收端再将其按照相同的字节顺序重组成原始数据。

发送的字节流被切割成多个 TCP 分段(Segment),每个分段都有序号,以便接收端可以按正确的顺序重组。TCP 在传输过程中会提供流量控制、拥塞控制和丢失重传等机制,确保数据可靠地到达。由于 TCP 的可靠性保证,它能够提供一个高层次的抽象,将应用程序的数据传输看作一个连续的字节流。

UDP 面向报文:

UDP 则将数据视为报文,每个 UDP 分组(Datagram)都是一个独立的消息单元,具有自己的头部和标识信息。

UDP 不对数据进行切割或重新组装,发送方的每个报文都作为一个独立的实体发送给接收方。每个报文都有自己的标识信息,接收方根据报文的边界来区分不同的报文。

由于 UDP 不提供可靠性保证,发送的报文可能会丢失、重复或乱序到达。应用程序需要自己处理这些问题,因此 UDP 提供了一个更加轻量级和低开销的传输机制。

总结:

TCP 是面向字节流的协议,它提供可靠的、有序的、基于连接的数据传输。

UDP 是面向报文的协议,它提供简单的、无连接的、不可靠的数据传输。

TCP 的面向字节流特性使其适合于需要可靠性和顺序性的应用,

 UDP 的面向报文特性使其适合于快速传输和对实时性要求较高的应用。

报文:就是独立的数据单元(所以丢了也问题不大)

字节流:就是连续的数据,相互是需要拼接的(所以要保障可靠性)

4、TCP各种机制

(1)TCP——流量控制

不太发送太快,速度要一致!!!

 

1、建立连接:主机告诉服务器,自己的窗口大小(服务器就会调整自己的流量窗口,和目的主机同步)

2、当窗口中的数据包发送后,就开始计时,如果一直到超时,都没有得到ACK确认,就重发!

3、服务器当得到ACK确认后,就可以根据相关信息,移动和调整窗口,继续发数据

 

1、当主机窗口为0时,服务器会开启(0窗口计时器)

2、持续发送探测报文,以此等待主机有空闲窗口,进行接收信息

3、期间,如果报文如果有丢失,就会进入死锁局面

4、在TCP中,当出现网络丢包或连接中断情况时,并不会直接导致死锁局面。TCP具有超时重传机制和连接恢复机制,可以通过重发数据、重新建立连接等措施来处理异常情况。

 

习题

 

(2)拥塞控制

 

慢开始、拥塞避免、快重传、快恢复

 

(2)拥塞控制 ——慢开始 & 拥塞避免

通过(慢开始 & 拥塞避免)算法,让发送数据的量维持在一定的值!!!

 

cwnd:可发送一次性报文段的个数

swnd:发送窗口

ssthresh:慢开始门限阈值

 

这两个算法——容易让传输效率降低!!(具体原因看下图)

 

(2)拥塞控制 ——快重传 & 快恢复

快重传:报文段丢失了,就让对方快速告诉我(连续喊我3次,那么我就信了,就重传)

不会因为报文段的丢失,傻傻的等着超时再重传,而导致后面传输的数据都失效!

(其实,就是两者约定好,当发生了这种情况该怎么做)协议就是这样滴~

 

快恢复:不是像拥塞避免那样,直接把发送窗口的值置为1(太der了)

 

(2)拥塞控制 ——总结

慢开始:发送数据的段数,从1开始,当段数小于【门限阈值】时,段数为指数上升

拥塞避免:当段数大于【门限阈值】时,段数逐步+1

注意:当发生了【超时重传】时,将会把发送窗口大小设为1

快重传:当发生【个别报文段】丢失时(不是通道拥塞,超时造成的),由接受方喊3次,然后重传

快恢复:当出现【个别掉点】时,就让【发送窗口大小】和【门限阈值】设置为【当前发送窗口大小的一半】——以此实现快恢复(与超时重传情况下不同哟!)

 

习题:

 慢开始(Slow Start):

  • 在 TCP 建立连接后,发送方会将发送窗口大小初始化为一个较小的值。
  • 发送方起初以指数级别递增发送段的数量,即每次窗口大小翻倍,因此称为慢开始。
  • 当达到一个门限阈值(通常由拥塞窗口大小决定)时,发送方会进入拥塞避免阶段。

拥塞避免(Congestion Avoidance):

  • 在拥塞避免阶段,发送方每经过一个往返时间就将拥塞窗口(发送窗口大小)加1,使得发送段的数量逐渐增加
  • 通过逐渐增加发送段的数量来控制发送速率,以避免网络拥塞。

超时重传(Timeout Retransmission):

  • 如果发送方在一定时间内未收到接收方的确认 ACK,就会认为有段丢失或网络状况不佳,触发超时重传机制。
  • 在超时重传时,将发送窗口大小设置为1,重新发送丢失的数据段。

快重传(Fast Retransmit):

  • 当接收方接收到乱序的报文段,但后续的报文段已经到达时,会立即向发送方发送重复的 ACK 确认。
  • 当发送方连续收到3个相同的确认 ACK 时,会立即重传下一个未收到确认的报文段,而无需等待超时。

快恢复(Fast Recovery):

  • 当发送方收到快重传的确认 ACK 后,会将拥塞窗口大小设置为当前发送窗口大小的一半,并进行拥塞避免。
  • 这样可以快速恢复发送方的发送速率,而不需要执行慢开始的过程。

流量控制(Flow Control):

  • TCP 使用滑动窗口机制来进行流量控制,确保发送方不会淹没接收方。
  • 接收方通过发送窗口大小告知发送方自己的可接收能力,发送方会根据接收窗口大小来控制发送速率。

(3)TCP——超时重传

超时重传时间的选择是TCP最复杂的问题之一

超时阈值太小(容易超时)、太大(空闲时间较大,传输效率降低)

超时重传时间(计算公式采用——加权平均)——在每一次成功传输后

 

但是!难以正确计算【超时重传时间】(具体情况,看下图)

 

Karn算法:

既然你重传后,无法正确计算【往返时间】,那么我就不管【重传这一情况】。

弊端:如果网络环境一直保持拥塞,就会一直导致重传(因为你没有考虑重传的计算,就不会修改超时时间阈值)

修正:重传后,把RTO增大一些

 

模拟练习 (这个公式有点难记,忘记了,可以再去看看视频结尾)

5.6 TCP超时重传时间的选择_哔哩哔哩_bilibili

 

公式

 

(4)TCP——可靠传输

字节为单位——滑动窗口

利用三个指针——我们可以确认很多东西(窗口大小,已发送数据,未发送数据)

 

注意事项!!!

双方窗口可能不一样大、全双工、数据如何处理、如何确认收到?

 

习题

 

 

(5)TCP——连接建立(※)

 

不能用两报文握手(毕竟,相当于你主机发送一个建立连接,服务器就会进入连接状态)

这是非常不好滴(对服务器来说,太容易被恶搞了)

虽然对于这个三报文握手,仍有SYN洪水和ACK洪水,但是总比两报文要好一点点

 

seq:随机的值

 

通过三次握手的过程,双方确认了对方的能力与意愿建立连接,并确保了初始序列号的一致性。这有助于避免恶意主机的滥用和预防网络中的重复连接。

尽管三次握手不能完全消除洪水攻击的风险,但它是确保连接可靠性和安全性的基本机制。

在实际应用中,还可以采取其他安全措施,如防火墙、入侵检测系统(IDS)、反洪水限制等来进一步增强网络的安全性和可靠性。

(6)TCP——连接释放(※)

四次挥手

 

当主机故障后,服务器如何判别?

每隔一段时间,就发送一个【探测报文】,如果连续10次无响应,就自动断开连接!

 

(7)TCP——首部格式

 

 

这里可以和IP数据报、数据帧;进行对比记忆(源IP/MAC地址和目的IP/MAC地址)

源端口、目的端口

 

序号、确认号、确认标志位ACK

 

重点!!!(千万别被搞混了)

认真看看下面的图!(客户和服务器发送的信息)

我已经写上了每一个数据的意义!(这两个是在相互交流的哟!!!)

 

(8)TCP——首部格式——端口、序号、确认号

 

(9)TCP——首部格式——数据偏移、保留、窗口

 

注意:偏移量(重点!!!)窗口(用来流量控制的!) 

(10)TCP——首部格式——标志位、紧急指针

 

(11)TCP——首部格式——校验和、填充、选项

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

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

相关文章

十二、集合(2)

本章概要 添加元素组集合的打印列表 List 添加元素组 在 java.util 包中的 Arrays 和 Collections 类中都有很多实用的方法,可以在一个 Collection 中添加一组元素。 Arrays.asList() 方法接受一个数组或是逗号分隔的元素列表(使用可变参数&#xff…

8.react18并发模式与startTransition(搜索高亮思路)

React 18 之前,渲染是一个单一的,不间断的,同步的事务,一旦渲染开始,就不能被中断 React 18引入并发模式,它允许你将标记更新作为一个transitions,这会告诉React他们可以被中断执行.这样可以将紧急任务先更新,不紧急任务后更新. 将任务给紧急任务先执行, 优先级低的任务后执行…

avue实现用户本地保存自定义配置字段属性及注意事项

avue实现用户本地保存自定义配置字段属性及注意事项 先看一段基于vue-nuxt2的page代码&#xff1a; 代码文件AvueSaveOption.vue <template><div><p>用户保存自定义表格项</p><avue-crudref"crud":defaults.sync"defaults":opt…

华为云服务器前后端分离项目打包上传及nginx配置

目录 1、Spring Boot项目打包 2、后端上传到云服务器 3、前端打包 1&#xff09;前端请求路径修改 2&#xff09;打包上传 4、下载nginx 1&#xff09;添加源 2&#xff09;安装Nginx 3&#xff09;查看nginx安装目录和版本 4&#xff09;启动 重启nginx命令 5&#…

接口测试与功能测试的区别~

今天为大家分享的是我们在日常测试工作中, 一定会接触并且目前在企业中是主要测试内容的 功能测试与接口测试 一.功能测试与接口测试的基本概念。 1.1 什么是功能测试呢? 功能测试: 是黑盒测试的一方面, 检查实际软件的功能是否符合用户的需求 功能测试测试的内容包括以下…

工程制造领域:企业IT架构

一、500强IT部门的组织规划架构图 1.1 IT服务保证梯队与指导思想 二、工程制造领域&#xff0c;整体业务规划架构图 三、工程制造领域&#xff0c;数据化项目规划架构图 四、工程制造领域&#xff0c;IT应用系统集成架构图

15. 实现业务功能--帖子操作

1. 集成编译器 editor.md 支持 MarkDown 语法编辑&#xff0c;在需要用户输⼊内容的页面按以下代码嵌入编辑器 1.1 编写 HTML <!-- 引⼊编辑器的CSS --> <link rel"stylesheet" href"./dist/editor.md/css/editormd.min.css"> <!-- 引⼊编…

学习pytorch6 torchvision中的数据集使用

torchvision中的数据集使用 1. torchvision中的数据集使用官网文档注意点1 totensor实例化不要忘记加括号注意点2 download可以一直保持为True代码执行结果 2. DataLoader的使用 1. torchvision中的数据集使用 官网文档 注意左上角的版本 https://pytorch.org/vision/0.9/ 注…

行业趋势和新兴领域分析:分析当前网络安全行业的发展趋势,如IoT安全、AI安全、区块链安全等。

第一章&#xff1a;引言 随着数字化时代的迅速发展&#xff0c;网络安全已经成为各行各业不可忽视的重要领域。恶意攻击、数据泄露以及黑客入侵等威胁逐渐增多&#xff0c;推动着网络安全行业不断创新与进步。本文将深入探讨当前网络安全领域的发展趋势&#xff0c;聚焦于新兴…

肿瘤科医师狂喜,15分RNA修饰数据挖掘文章

Biomamba荐语 与这个系列的前面一些论文类似&#xff0c;这次给大家推荐的是一篇纯生物信息学数据挖掘的文章&#xff0c;换句话说&#xff0c;这又是一篇不需要支出科研经费&#xff08;白嫖&#xff09;的论文(当然&#xff0c;生信分析用的服务器还是得掏点费用的)。一般来…

springboot第37集:kafka,mqtt,Netty,nginx,CentOS,Webpack

image.png binzookeeper-server-start.shconfigzookeeper.properties.png image.png image.png 消费 image.png image.png image.png image.png image.png image.png image.png image.png image.png Netty的优点有很多&#xff1a; API使用简单&#xff0c;学习成本低。功能强大…

【操作系统】聊聊文件传输的零拷贝、PageCache、异步IO机制

在目前主流的系统中&#xff0c;其实大多数都是数据密集型系统&#xff0c;所以设计数据密集型应用一书非常经典&#xff0c;推荐一读。而大多数遇到的问题都是存储问题。CPU、内存 因为本身的读写速度比较快&#xff0c;所以磁盘就成为了一个性能瓶颈。 针对磁盘优化的技术层…

对class文件进行base64编码

使用以下代码 package org.springframework.cloud.gateway.sample;import org.springframework.util.Base64Utils;import java.io.*; import java.nio.charset.StandardCharsets;public class EncodeShell {public static void main(String[] args){byte[] data null;try {In…

大数据之linux入门

一、linux是什么 linux操作系统 开发者是林纳斯-托瓦兹&#xff0c;出于个人爱好编写。linux是一个基于posix和unix的多用户、多任务、支持多线程和多CPU的操作系统。 Unix是20世纪70年代初出现的一个操作系统&#xff0c;除了作为网络操作系统之外&#xff0c;还可以作为单…

6路液体水位检测芯片VK36W6D SOP16 抗电源干扰及手机干扰特性好

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK36W6D 封装形式&#xff1a;SOP16/QFN16L 详细资料&#xff1a;13.5/5.474/4.703 概述 VK36W6D具有6个触摸检测通道&#xff0c;可用来检测6个点的水位。该芯片具有较高的集成度&#xff0c;仅需极少的外部组件便…

vscode GDB 调试linux内核 head.S

遇到的问题 此前参考如下文章 https://zhuanlan.zhihu.com/p/510289859 已经完成了在ubuntu 虚拟机用vscode 调试linux 内核。但是美中不足的是&#xff0c;断点最早只能加在__primary_switched() 函数。无法停在更早的断点上&#xff0c;比如ENTRY(stext) 位置。参考《奔跑吧…

C语言_初识C语言指针

文章目录 前言一、指针 ... 一个内存单元多大比较合适&#xff1f;二、地址或者编号如何产生&#xff1f;三、指针变量的大小 前言 内存是电脑上特别重要的存储器&#xff0c;计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存&#xff0c;就把内存划分成一个个…

记1次前端性能优化之CPU使用率

碰到这样的一个问题&#xff0c;用户反馈页面的图表一直加载不出来&#xff0c;页面还卡死 打开链接页面&#xff0c;打开控制台 Network 看到有个请求一直pending&#xff0c;结合用户描述&#xff0c;页面一直loading,似乎验证了我的怀疑&#xff1a;后端迟迟没有相应。 但是…

【工作笔记-0038】mongodb mongorestore 命令行导入 bson.gz数据

1. 导出的集合文件格式如下&#xff08;也就是导出的表文件&#xff09;&#xff1a; 例如&#xff1a; D:\Files\xxxx集合名称.bson.gz 怎样导出&#xff0c;这里不做介绍&#xff0c;用 mongodb compass 或者 studio 3t 都可以 2. 下载命令行导入工具&#xff1a; 官方…

webpack(一)模块化

模块化演变过程 阶段一&#xff1a;基于文件的划分模块方式 概念&#xff1a;将每个功能和相关数据状态分别放在单独的文件里 约定每一个文件就是一个单独的模块&#xff0c;使用每个模块&#xff0c;直接调用这个模块的成员 缺点&#xff1a;所有的成员都可以在模块外被访问和…