文章目录
前言
本期内容重点复习一下以下三层:网络层,运输层,应用层
参考教材:计算机网络(博客中部分图片来自本书)
参考: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的应用程序需要自己处理这些问题。