【网络编程】计算机网络基础知识总结 | 运输层 |TCP协议

news2025/6/22 15:07:23

文章目录

  • 前言
  • 一、计算机网络层次结构
  • 二、网络层
  • 三、运输层
    • 3.1、TCP/IP协议介绍
    • 3.2、端口(协议端口号)
    • 3.3、套接字
    • 3.4、TCP实现原理
      • 3.4.1、TCP的特点
      • 3.4.2、停止等待协议
      • 3.4.3、滑动窗口协议
      • 3.4.4、拥塞控制
      • 3.4.5、TCP连接的三个阶段
    • 3.5、UDP实现原理


前言

本期内容重点复习一下以下三层:网络层,运输层,应用层
参考教材:计算机网络(博客中部分图片来自本书)
参考:chatgpt4

一、计算机网络层次结构

计算机网络的层次结构通常根据OSI(开放系统互联)模型或TCP/IP模型来进行划分。

OSI(开放系统互联)模型:该模型将计算机网络分为七层,自下而上依次是

物理层:负责传输比特流(即电压的高低、光的闪烁等)。

数据链路层:负责在网络设备之间传输数据帧(也就是数据包),并能够检测和纠正数据传输的错误。

网络层:负责处理数据包的发送和接收,包括包的路由选择。

传输层:负责处理端到端的数据传输。

会话层:负责在数据传输中设置和维护网络连接。

表示层:负责处理操作系统中数据的表示、安全和压缩问题。

应用层:负责处理特定应用程序的协议。

TCP/IP模型:该模型将计算机网络分为四层,自下而上依次是:

网络接口层:相当于OSI模型中的物理层和数据链路层,负责处理和网络媒体的硬件接口相关的所有事务。

网络层:相当于OSI模型中的网络层,负责处理IP地址和路由。

传输层:相当于OSI模型中的传输层,负责处理TCP和UDP协议。

应用层:相当于OSI模型中的会话层、表示层和应用层,负责处理所有特定的应用程序细节。

实际应用中,我们经常使用一个简化的五层网络模型,这个模型把OSI的七层模型进行了合并简化。五层模型自下而上依次是:

物理层:负责将比特流(即电压的高低、光的闪烁等)在物理媒介(如电缆、光纤)上进行传输。

数据链路层:负责在网络设备之间传输数据帧(也就是数据包),并能够检测和纠正数据传输的错误。

网络层:负责处理数据包的发送和接收,包括包的路由选择。

传输层:负责处理端到端的数据传输,例如TCP协议和UDP协议都工作在这一层。

应用层:这一层包含了OSI模型中的会话层、表示层和应用层,负责处理所有特定的应用程序细节。例如HTTP、FTP等协议都工作在这一层。

在这里插入图片描述

二、网络层

三、运输层

3.1、TCP/IP协议介绍

TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是网络传输层的两种重要协议,它们都是用来发送数据包的,但是各自的特性和使用场景有很大的不同。

TCP(传输控制协议):

TCP是一种面向连接的协议,这意味着在数据传输前,发送方和接收方需要先建立连接,然后才能进行数据的发送和接收。这种方式可以确保数据的完整性和准确性。

TCP提供了数据包的顺序控制、流量控制、拥塞控制和错误检查等功能。这些控制机制确保了数据包能够正确、有序地到达目的地。

TCP的这些特性使它非常适合于对数据传输质量要求高的应用,例如网页浏览、文件传输、电子邮件等。

UDP(用户数据报协议):

UDP是一种无连接的协议,这意味着发送方发送数据时,不需要先建立连接。这种方式虽然不能保证数据包的到达和顺序,但是由于省去了建立连接的过程,使得数据传输的延迟更低。

UDP不提供数据包的顺序控制、流量控制、拥塞控制和错误检查等功能。这些特性使得UDP非常适合于实时性要求高,但对数据丢失可以容忍的应用,例如语音和视频通话、实时游戏等。

UDP的另一个特性是它支持广播和多播,这使得UDP非常适合于多点通信。

总的来说,TCP和UDP各有优劣,具体使用哪种协议取决于应用的具体需求。
在这里插入图片描述

3.2、端口(协议端口号)

在网络通信中,端口是一种抽象的软件结构,用来区分不同的进程或服务。端口是与IP地址配合使用的,一起构成了网络通信中的"地址和端口"的概念。在TCP/IP协议中,端口被标识为一个16位的数字,范围从0到65535。
通常,端口可以分为三个范围:

已知端口(Well Known Ports):这些是最常用的端口,范围是0-1023。许多常见的协议都在这个范围内,例如HTTP的端口80,HTTPS的端口443,FTP的端口21,SMTP的端口25等。

注册端口(Registered Ports):这些端口的范围是1024-49151。它们不是预留给特定服务的,但通常用于某些已知的应用。例如,MySQL默认的端口就是3306。

动态或私有端口(Dynamic or Private Ports):这些端口的范围是49152-65535。它们通常被用于动态端口分配,当一个客户端应用程序需要与服务器建立连接时,操作系统通常会从这个范围内选择一个可用的端口号。

当我们说一个服务器在监听某个端口,实际上就是说服务器上的某个服务正在等待从那个端口号上到来的连接请求。同样,当一个客户端程序连接到服务器的某个端口时,实际上是在请求使用服务器上绑定到那个端口的服务。
使用不同的端口号,我们可以在同一台计算机上运行多个网络服务,每个服务可以独立地接收和处理连接请求。这就是端口的主要作用。

另外,你也需要确保你的程序在运行时具有足够的权限来监听你选择的端口。在许多操作系统中,监听1024以下的端口需要管理员或root权限,但1024以上的端口通常可以由任何用户监听。

3.3、套接字

套接字(Socket)是计算机网络中用于描述IP地址和端口,以便能够进行网络通信的一种抽象概念。它是网络应用程序进行数据发送和接收的接口。简单来说,套接字就像是一个电话插孔,你可以通过它来接通电话线(网络连接),并进行通话(数据传输)。
套接字最初由伯克利(Berkeley)UNIX操作系统开发并引入,现在已经被所有主流的操作系统所采用。在编程中,我们通常通过套接字API(应用程序接口)来进行网络编程。套接字API提供了一组函数,使得程序员能够在他们的程序中创建套接字、连接到远程套接字、发送和接收数据等。
套接字可以支持不同的通信协议,最常见的有TCP(传输控制协议)和UDP(用户数据报协议)。TCP套接字提供了一种面向连接的、可靠的数据传输服务,而UDP套接字则提供了一种无连接的、不可靠的数据传输服务。
一个套接字被定义为一个IP地址和一个端口号的组合 例如,如果你的计算机的IP地址是192.168.1.100,你的Web服务器程序正在监听端口80,那么你可以说你的Web服务器的套接字是192.168.1.100:80。当一个客户端程序想要连接到你的服务器时,它需要知道这个套接字,以便能够正确地向你的服务器发送请求。

3.4、TCP实现原理

3.4.1、TCP的特点

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。以下是TCP的一些主要特点和工作原理:

面向连接 在数据传输开始之前,TCP需要在发送端和接收端之间建立一个连接。这个过程通常被称为"三次握手"。一旦连接建立,所有的数据传输都在这个连接上进行,直到连接被关闭。

可靠传输 TCP通过使用确认(ACK)机制、序列号、重传机制和错误检查来确保数据的可靠传输。如果发送端没有收到数据包的确认,那么它会重新发送数据包。

流量控制 TCP使用窗口机制来进行流量控制,防止接收端被发送端发送的数据淹没。窗口的大小表明了接收端当前能接受的数据量。

拥塞控制 当网络出现拥塞时,TCP会减少数据的发送速率,避免无效的重传和网络资源的浪费。当网络恢复正常时,TCP会逐渐增加数据的发送速率。

全双工通信 TCP连接的两端都能发送和接收数据。这意味着在一个TCP连接中,数据可以在两个方向上同时传输。

字节流 TCP不关心应用层的消息边界,把应用层传下来的数据看作仅仅是一个连续的字节流。

这些特点使得TCP非常适合那些需要高可靠性的应用,例如Web浏览、电子邮件、文件传输等。然而,这些特性也使得TCP比一些其他的传输协议(如UDP)更复杂,有时候也更慢。


3.4.2、停止等待协议

停止等待协议是一种基本的流量控制协议,它也是TCP中可靠数据传输的基础。在停止等待协议中,发送端每次只发送一个数据包,然后停止发送并等待接收端的确认。在收到确认后,发送端再发送下一个数据包。
以下是停止等待协议的基本步骤:

发送端发送一个数据包到接收端。

发送端启动一个定时器,等待接收端的确认。这个定时器的时间通常比数据包在网络中传输的平均时间要长一些,以便给接收端处理数据包和发送确认的时间。

如果在定时器超时之前,发送端收到了接收端的确认,那么它会发送下一个数据包。

如果定时器超时,但发送端还没有收到确认,那么发送端会认为数据包已经丢失,然后重新发送这个数据包。

停止等待协议的优点是它简单易懂,实现也相对简单。它能够确保数据包不会因为网络的问题而丢失,并且能够防止发送端发送数据的速度过快,导致接收端无法处理。
然而,停止等待协议的效率不高,特别是在网络延迟大的情况下。发送端每次只发送一个数据包,然后就停下来等待确认,这意味着网络的利用率很低,尤其是当网络的带宽很大,而数据包的大小相对较小的时候。为了解决这个问题,人们开发了一些更高效的流量控制协议,例如滑动窗口协议。

3.4.3、滑动窗口协议

滑动窗口协议是一种流量控制协议,它可以提高网络的利用率,并且还能保证数据的可靠传输。这种协议在TCP(传输控制协议)中被广泛使用。
滑动窗口协议的基本思想是,发送端和接收端各自维护一个窗口。发送窗口包含了可以发送的数据段,接收窗口包含了可以接收的数据段。窗口的大小可以动态调整,以适应网络的条件。
以下是滑动窗口协议的基本步骤:

在开始时,发送端的窗口包含了一些数据段,这些数据段可以立即发送。发送端发送窗口中的数据段后,将这些数据段标记为已发送但未确认。

当接收端收到一个数据段,它会发送一个确认回去。确认中包含了接收端期望接收的下一个数据段的序列号,以及接收窗口的剩余大小。

当发送端收到一个确认,它会更新它的窗口。已被确认的数据段会从窗口中移除,窗口会向前滑动,以包含新的可以发送的数据段。窗口的大小可能会根据接收端的反馈(即接收窗口的剩余大小)进行调整。

如果一个数据段的确认在一定时间内没有收到,那么发送端会重新发送这个数据段。这是通过超时重传机制来实现的。

滑动窗口协议不仅可以保证数据的可靠传输(通过确认和重传机制),而且还可以有效地控制数据的发送速度(通过窗口大小的调整),以防止发送端发送数据过快,导致接收端无法处理。这使得滑动窗口协议在各种网络条件下都能提供高效的数据传输。


流量控制是计算机网络中的一个关键概念,它指的是一种技术或一组机制,用于防止发送端发送数据的速度超过接收端处理数据的能力。
如果没有流量控制,发送端可能会以接收端无法处理的速度发送数据,这将导致接收端的缓冲区溢出,进而丢失数据。因此,流量控制是网络通信中保证数据可靠传输的重要手段之一。
流量控制可以在不同的网络层次实现,例如在数据链路层(如X.25协议)或者传输层(如TCP协议)。
在TCP中,流量控制是通过滑动窗口协议来实现的。每个TCP连接都有一个关联的接收窗口,该窗口的大小表示接收端当前还能接收多少数据。当接收端处理完一部分数据并释放了缓冲区空间后,它会通过确认信息告诉发送端,从而增大发送端的发送窗口。通过动态调整窗口大小,TCP可以根据接收端的处理能力和网络的拥塞程度来控制数据的发送速度。
总的来说,流量控制是一个非常重要的网络功能,它可以保护网络资源,防止网络拥塞,以及保证数据的可靠传输。

3.4.4、拥塞控制

拥塞控制是TCP(传输控制协议)的一种机制,用于防止网络拥塞。当网络中的数据包数量过多,超过网络的承载能力时,就会出现网络拥塞。网络拥塞可能导致数据包的延迟增加,甚至丢失。因此,拥塞控制的目标是避免过多的数据进入网络,以保持网络的质量。
TCP的拥塞控制主要有四种算法:慢启动、拥塞避免、快重传和快恢复。这些算法共同工作,以动态地调整每个TCP连接的拥塞窗口大小。拥塞窗口决定了发送端可以在没有收到确认的情况下发送多少数据。
以下是这四种算法的基本工作原理:

慢启动:当一个TCP连接开始时,拥塞窗口的大小被设置为一个很小的值。然后,每当发送端接收到一个确认,它就会将拥塞窗口大小加倍。这样,拥塞窗口的大小就会以指数方式增长,直到达到一个阈值,或者发生了数据包丢失。

拥塞避免:当拥塞窗口达到阈值后,发送端就会进入拥塞避免阶段。在这个阶段,每当接收到一个确认,拥塞窗口的大小就会线性地增加。这样,拥塞窗口的增长速度就会减慢,以避免过快地增加网络的负载。

快重传:当发送端连续收到三个重复的确认(这通常表示有一个数据包丢失)时,它不会等待超时重传定时器,而是立即重新发送丢失的数据包。这样,就可以更快地恢复丢失的数据包。

快恢复:当发送端重新发送了丢失的数据包后,它会将阈值减半,然后立即进入拥塞避免阶段,而不是慢启动阶段。这样,就可以更快地恢复传输速度。

这四种算法共同工作,以适应网络的条件,保持高效的数据传输,同时避免网络拥塞。

3.4.5、TCP连接的三个阶段

一个TCP(传输控制协议)连接的生命周期主要包括以下几个阶段:

连接建立(Connection Establishment):这个阶段通常被称为“三次握手”(Three-Way Handshake)。首先,客户端发送一个带有SYN(Synchronize)标志的数据包给服务器,请求建立连接。然后,服务器回应一个带有SYN和ACK(Acknowledgement)标志的数据包,确认收到请求并同意建立连接。最后,客户端再发送一个带有ACK标志的数据包,确认收到服务器的回应。此时,TCP连接就被成功建立,可以开始传输数据。

数据传输(Data Transfer):在这个阶段,客户端和服务器可以互相发送数据。TCP保证了数据的可靠传输,通过序列号和确认机制保证数据按照正确的顺序到达,并通过流量控制和拥塞控制机制来适应网络的条件。

连接终止(Connection Termination):这个阶段通常被称为“四次挥手”(Four-Way Handshake)。首先,一方(通常是客户端)发送一个带有FIN(Finish)标志的数据包,请求关闭连接。然后,另一方(通常是服务器)回应一个带有ACK标志的数据包,确认收到请求。然后,另一方也发送一个带有FIN标志的数据包,请求关闭连接。最后,第一方再回应一个带有ACK标志的数据包,确认收到请求。此时,TCP连接就被成功关闭。

在这些阶段中,TCP通过复杂的算法和机制,保证了数据的可靠传输,使得应用程序可以像使用可靠的字节流一样使用网络。

3.5、UDP实现原理

UDP(用户数据报协议,User Datagram Protocol)是一个简单的无连接的传输层协议。与TCP相比,UDP更简单,开销更小,但是它不提供数据的可靠传输,也不提供流量控制或拥塞控制。因此,UDP通常用于那些对实时性要求高,但对数据丢失容忍度较高的应用,例如VoIP(语音通话)和在线游戏。
以下是UDP的基本实现原理:

封装数据:UDP将应用程序发送的数据封装在UDP数据报中。每个UDP数据报包括一个头部和一个数据部分。头部包含了源端口号、目标端口号、长度和校验和,这些信息用于数据的传输和接收。数据部分就是应用程序发送的数据。

发送数据:UDP数据报被封装在IP数据包中,然后通过IP网络发送给接收端。由于UDP是无连接的,所以发送数据时不需要建立和终止连接。UDP只是简单地将数据报发送出去,而不关心数据报是否能成功到达。

接收数据:当UDP数据报到达接收端时,接收端会根据头部的端口号将数据报传递给相应的应用程序。如果数据报的校验和错误,或者应用程序的接收缓冲区满了,那么数据报可能会被丢弃。

处理数据:应用程序接收到数据报后,可以立即处理数据。由于UDP不提供数据的顺序保证,所以应用程序需要自己处理数据的顺序问题。

总的来说,UDP提供了一种简单快速的数据传输方式,但是它不提供数据的可靠传输,也不提供流量控制或拥塞控制。因此,使用UDP的应用程序需要自己处理这些问题。

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

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

相关文章

day50_mybatis

今日内容 0 复习昨日 一、分页插件 二、ORM映射【重点】 三、多表联查 【重点】 四、动态SQL 【重点】 五、$和# 零、复习昨日 mybatis orm框架,作用于持久层,高效开发,只关注sql,其他不用关心 思考MyBatis到底帮你省了哪些事情? jdbc第四步sql自己编写之外,其他mybatis都做了…

C++标准库模板(STL)-输入/输出库

C 包含两个输入/输出库:现代的、基于流的 I/O 库和 C 风格 I/O 函数的标准集合。 基于流的 I/O 基于流的输入/输出库围绕抽象的输入/输出设备组织。这些抽象设备允许相同代码处理对文件、内存流或随即进行任意操作(例如压缩)的自定义适配器…

编译原理 | 课程设计 — PL/0编译程序语法分析

1、任务描述 基于第二章的词法分析程序,使用C/C语言编写PL/0编译程序的语法分析程序。 2、编程要求 完成上述编程任务,将C/C语言源程序复制粘贴到右侧代码编辑器,点击“评测”按钮,运行程序,系统会自动进行结果对比。 …

CoreDX DDS应用开发指南(4)DDS实体h和主题

6 DDS实体 DDS标准定义了一个体系结构,该体系结构表示构成DDS API实体的面向对象模型。这些实体充当中间件和应用软件之间的接口。为了开发支持DDS的应用程序,开发人员必须创建、交互并销毁这些DDS实体。 本章概述了DDS实体和相关概念。 6.1 DDS实体层次结构 构成DDS API的主…

马斯克最大的挑战是什么?

“硅谷钢铁侠”马斯克,最大的挑战是什么? 有纠错反馈循环,并保持这个循环 我们常说的“迭代”,就是打造“反馈系统” 趣讲大白话:需要一面不扭曲的镜子 【趣讲信息科技192期】 **************************** 2017年&a…

通过浏览器,将webp格式图片转jpg格式

概述 我们网络上下载的图片,很多的是webp格式的图片,而目前支持这种图片格式的软件较少,比如Windows 照片查看器,是不能直接打开图片的。安装其他专业图像软件又麻烦。 因此,本文介绍利用电脑常用的软件,…

运营-20.产品社区化和内容化

产品社区化和内容化 为什么现在很多产品都在往社区化、内容化发展? 1.拓展产品线,满足用户的多元需求 分享、交流、炫耀、虚荣,这些是人类永恒的情感需求,社区是一个能很好的满足这些需求的工具; 2.打造归属感&…

TiDB亿级数据亚秒响应查询Dashboard使用

目录 1 集群概况1.1 QPS1.1.1 延迟1.1.2 Top SQL 语句1.1.3 最近的慢查询 2 集群信息2.1 实例列表2.1.1 表格列解释2.1.2 实例状态解释 2.2 主机列表2.2.1 表格列解释 2.3 SQL语句分析2.3.1 执行列表页2.3.2 执行详情页面 2.4 慢查询2.4.1 慢查询列表页2.4.2 查看执行详情 2.5 …

2023-06-10 Untiy进阶 C#知识补充1——.Net介绍

文章目录 一、.Net 介绍二、.Net 跨语言的实现三、.Net 跨平台的实现(一).Net Framework(二).Net Core(三)Mono 四、总结 一、.Net 介绍 ​ 微软的 .Net 既不是编程语言也不是框架,是类似于互联…

Tomcat部署和优化

文章目录 Tomcat概述Tomcat的核心组件Tomcat的功能组件结构Container 结构分析Tomcat 请求过程: Tomcat 服务部署Tomcat 虚拟主机配置HTTP 请求过程 Tomcat优化常用的优化相关参数如下 Tomcat概述 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的…

Spring高手之路4——深度解析Spring内置作用域及其在实践中的应用

文章目录 1. Spring的内置作用域2. singleton作用域2.1 singleton作用域的定义和用途2.2 singleton作用域线程安全问题 3. prototype作用域3.1 prototype作用域的定义和用途3.2 prototype作用域在开发中的例子 4. request作用域(了解)5. session作用域&a…

002docker 安装

官网安装https://docs.docker.com/engine/install/ 系统要求 Centos7 Linux 内核:官方建议 3.10 以上查看Linux内核版本 用于打印当前系统的相关信息(内核版本号,硬件架构,主机名称和操作系统类型等 cat /proc/version uname -a 更新YUM源 生产环境中此步操作…

Spring Cloud Feign实战

概述 Feign是一种声明式、模板化的HTTP Client,目标是使编写Java HTTP Client变得更简单。Feign通过使用Jersey和CXF等工具实现一个HTTP Client,用于构建REST或SOAP的服务。Feign还支持用户基于常用的HTTP工具包(OkHTTP、HTTPComponents&…

2023网安面试题170道,轻松应对面试

最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备? 工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享两份网络安全工…

仙境传说ro:如何在地图上刷怪教程

仙境传说ro:如何在地图上刷怪教程 大家好我是艾西,在仙境传说这个游戏中我们知道了怎么创建NPC添加商品售卖后,那么对于游戏的怪肯定也得有自己的想法以及对游戏的设定以及理解,今天我跟大家分享的是怎么在地图中刷怪教程。 我们…

STL——string、vector、deque容器

初识STL **STL的基本概念****vector容器存放内置数据类型****vector容器中存放自定义数据类型****vector容器嵌套vector容器****string容器——构造函数****string容器——赋值操作****string容器——字符串拼接****string容器——字符串的查找和替换****string容器——字符串比…

人工智能该如何学习?详细的AI学习

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 1.TomChat 地址:https://www.ridderchat.com/ 该网站非常简介好看,界面看着很舒服,可以帮助你快速编写、编辑和讨论代码。 2.强大的AI辅助 链接…

模拟实现strstr函数,通俗易懂!!!

函数介绍 函数声明 函数声明&#xff1a;char *strstr(const char *str1, const char *str2) 头 文 件&#xff1a;#include <string.h> 返 回 值&#xff1a; 返回值为char * 类型&#xff08; 返回指向 str1 中第一次出现的 str2 的指针&#xff09;&#xff1b…

Webots R2021a教程

文章目录 Windows安装设置中文打开世界添加贴图 为外部控制器配置Anaconda解决报错&#xff1a;CondaSSLError: Encountered an SSL error. Most likely a certificate verification issue.调用Python API Windows 安装 进入下载页面 https://github.com/cyberbotics/webots/r…

CSS实现几种常见布局

CSS实现几种常见布局 两列左窄右宽型布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" co…