接之前的应用层的部分继续。
它是连接网络层和应用层的层,将从网络层传输来的内容发送到相关的应用程序中。如果打比方来说,传输层就像是邮局的功能,飞机和火车(网络层)将信息从一个大的点跨越式的传过来后,就需要邮局一样的传输层,将消息交给应用程序。
它是OSI(Open Systems Interconnection)模型中的第四层,是TCP/IP构架的第二层。负责在网络中的不同主机之间提供可靠的数据传输服务。传输层位于网络层之上,其主要功能包括数据传输、错误检测和纠正、流量控制和拥塞控制等。传输层及其协议驻留在终端系统上。
传输协议:
TCP(Transmission Control Protocol):TCP是一种面向连接的、可靠的传输协议,提供了可靠的数据传输、流量控制、拥塞控制和错误恢复等功能。TCP适用于对数据传输可靠性要求较高的应用场景,如网页浏览、文件传输等。
UDP(User Datagram Protocol):UDP是一种无连接的、不可靠的传输协议,提供了简单的数据传输服务,但不保证数据的可靠性。UDP适用于对数据传输时延要求较低、对数据传输可靠性要求不高的应用场景,如音视频传输、实时通信等。DNS服务器使用的也是UDP协议。
复用(Multiplexing)和解复用(Demultiplexing):
数据通信中的两个重要概念,用于在网络中传输多个信号或数据流。
复用和解复用是数据通信中常用的技术,用于在通信链路上实现多个信号或数据流的共享传输。复用将多个信号或数据流合并成一个信号或数据流以实现传输,而解复用则将复用后的信号或数据流分离成多个独立的信号或数据流以便接收端进行处理或者传输。复用和解复用技术能够有效提高通信资源的利用率,提高了数据通信的效率和可靠性。
在你的计算机上,传输来的信息要知道去哪个应用程序,就是为了解决这个问题。邮局将一堆包裹送到的大楼门前,然后拆开包裹,开始按照房间号分发包裹。
在UDP(User Datagram Protocol)中,复用(Multiplexing)和解复用(Demultiplexing)也是重要的概念,用于在网络中传输多个数据报。
在UDP中,复用是将多个数据报合并成一个数据流的过程,以便在通信链路上传输。UDP使用端口号来区分不同的数据流,因此复用的主要方式是基于端口号的复用。这就好像快递员准备把发给同一个屋子的人的邮件打成一个包一次扔到房间里。
UDP复用的过程如下:
在UDP中,不同的应用程序可以同时使用同一个IP地址,但是必须使用不同的端口号(房间号)来区分彼此的数据流。因此,UDP的复用主要是基于端口号的复用。
解复用是将复用后的数据流分离成多个独立的数据报的过程,以便在接收端进行处理。UDP使用目的端口号来进行解复用,以将接收到的数据流分配给正确的应用程序。
UDP解复用的过程如下:
UDP通过目的端口号进行解复用,确保每个数据报都能够被正确地分配给相应的接收端应用程序进行处理。
这和交通拥堵很像,我们发了大量的邮件,导致邮局一下子发送了太多的邮件给他的下一层,然后大型飞机和火车由导致了拥堵,传输层和网络层都需要解决这类问题。这里专注于传输层,网络层的问题在网络层继续学习。
网络的拥塞控制(Congestion Control)是一种网络管理机制,用于避免或减轻网络拥塞的发生,以确保网络的正常运行和高效性能。拥塞指的是网络中的流量超过了网络资源的处理能力,导致数据包丢失、延迟增加、吞吐量下降等问题。为了公平地分配网络资源,以确保所有用户都能获得合理的网络服务质量,必须进行网络拥堵控制。
Power=TransmissionRate/Delay
这个公式描述了网络中传输数据的能量与传输速率和传输延迟之间的关系。具体解释如下:
根据这个公式,可以得出以下结论:
在网络带宽分配中,如果将带宽全部分配给某些高优先级的用户,那么虽然可以提高这些用户的效率,但会降低其他用户的公平性。相反,如果将带宽平均分配给所有用户,可以确保公平性,但可能会降低整体的效率。在这种情况下,公平和效率之间的收敛意味着找到一种合适的带宽分配策略,既能够保证系统的效率,又能够保持一定程度的公平性。
实现公平和效率的收敛需要综合考虑各种因素,包括系统的特点、用户的需求、资源的分配方式等,并采取适当的策略和方法来平衡这两个目标。
是确保数据在发送方和接收方之间可靠地传输的一组基本准则。以下是可靠数据传输的几个基本原则:
确认和重传(Acknowledgment and Retransmission):发送方在发送数据后等待接收方的确认,如果超过一定时间没有收到确认,则会重新发送数据。接收方在接收到数据后发送确认消息,以确保发送方知道数据已经正确接收。
序号(Sequence Numbering):在数据包中包含序列号,以确保接收方可以按照正确的顺序重组数据。序号可以帮助接收方识别并消除重复数据包,并按照正确的顺序重组数据。
定时器(Timer):发送方使用定时器来检测确认消息是否超时,如果确认消息未在规定时间内到达,则发送方会重新发送数据包。定时器的设置通常与网络延迟和丢包率等因素有关。
流量控制(Flow Control):通过控制发送方发送数据的速率,以防止接收方被过多的数据包淹没。流量控制可以确保接收方可以处理来自发送方的数据,并避免因为过多的数据导致网络拥塞。
拥塞控制(Congestion Control):通过监测网络的拥塞程度并相应地调整发送速率,以避免网络拥塞和丢包。拥塞控制可以确保在网络高负载情况下仍能够保持数据传输的可靠性和效率。
检验和(Checksum):在数据包中包含检验和,以便接收方可以检测数据包在传输过程中是否发生了错误。接收方可以根据检验和验证数据包的完整性,如果检验和不匹配,则说明数据包可能已经损坏,需要重新发送。
这些原则通常被应用于各种可靠数据传输协议中,例如TCP(Transmission Control Protocol),以确保数据在网络中的可靠传输。通过遵循这些原则,可以有效地提高数据传输的可靠性和稳定性。
继续打比方,邮局发信也会有期限设置,也会有邮政编码,也会检查邮戳地址校验结果,同时还会在邮件没有到达的情况下根据情况进行重新发送。
UDP(User Datagram Protocol)是一种无连接的传输层协议,用于在计算机网络上以数据包的形式传输数据。与TCP(Transmission Control Protocol)相比,UDP更加简单,并且不提供像TCP那样的可靠性、流量控制和拥塞控制等功能。UDP适用于需要较低延迟和较少控制开销的应用场景,如音频、视频、实时游戏等。
UDP是一种无连接的协议,通信双方在传输数据之前不需要建立连接。每个UDP数据包(也称为数据报)都是独立的,相互之间没有关联。UDP不保证数据的可靠传输。它不提供数据包的重传、确认、序号和重组等机制,因此数据包可能会丢失、重复或无序到达。
当我们看视频的时候,偶尔会发生视频卡顿的情况,这种时候我们都是手动加载,刷新页面,也就是一种主动请求重新发送的过程。也相当于我们自己对传输过来的内容进行校验,而不是像TCP那样,系统会帮我们校验是否正确。
相对于TCP,UDP协议更加简单,没有像TCP那样的连接管理和流量控制等复杂机制,因此具有更低的开销和延迟。由于UDP没有像TCP那样的控制机制,因此在数据传输时的开销较小,适用于对实时性要求较高的应用场景。
UDP数据包的格式比较简单,通常包含源端口号、目标端口号、数据长度和校验和等字段。由于UDP不提供数据的可靠性和流量控制等功能,因此在应用中需要由开发者自行处理丢包、重传和数据完整性等问题。
在DNS中,UDP协议用于域名解析的查询和响应过程。当客户端需要解析域名时,它会向DNS服务器发送一个UDP数据包(称为DNS查询请求),该请求包含要解析的域名。DNS服务器收到查询请求后,会查找相应的域名与IP地址的映射关系,并将结果封装在UDP数据包中作为响应发送回客户端。
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。它负责在网络上可靠地传输数据,并提供了数据传输的流控制、拥塞控制等功能。TCP是互联网中最常用的传输层协议之一,它在应用层和网络层之间提供了可靠的数据传输服务。
以下是TCP的一些特点和相关的应用程序:
面向连接:TCP在通信之前需要先建立连接,通信结束后再关闭连接。这种面向连接的特性确保了数据的可靠传输,但也增加了一定的开销和延迟。
可靠的数据传输:TCP使用序号和确认机制来保证数据的可靠传输。发送方将数据分割成适当大小的数据段,并对每个数据段进行编号,接收方收到数据后发送确认消息,以确保数据的正确接收。
流控制:TCP使用滑动窗口机制来进行流控制,即发送方和接收方通过窗口大小来控制数据的发送和接收速率,以适应网络的实际情况,防止数据的丢失和拥塞。
拥塞控制:TCP使用拥塞避免和拥塞控制算法来控制网络的拥塞情况,通过动态调整窗口大小和重传超时时间等参数来避免网络拥塞和数据丢失。
应用程序:TCP广泛应用于各种网络应用程序中,包括但不限于:
总之,TCP是一种可靠的传输层协议,提供了面向连接的、可靠的数据传输服务,广泛应用于各种网络应用程序中,为用户提供了稳定和高效的网络通信体验。
继续打比方,比如你和朋友打手机的例子,你们不是鸡同鸭讲,必须要确保电话接通,并且双方说的话都传达到了,然后才会继续,如果你没听清,你会让你的朋友再说一次,然后你会用嗯嗯嗯,来表达自己听到了,这和TCP很像,我很喜欢这个例子。
TCP 段头Segment Header:
TCP段头是TCP协议中用于控制和管理数据传输的头部部分。它包含了一系列字段,用于描述TCP段的各种属性和控制信息。下面是TCP段头中的一些重要字段:
源端口号(Source Port):占用2个字节,用于标识发送方的端口号。
目标端口号(Destination Port):占用2个字节,用于标识接收方的端口号。
序号(Sequence Number):占用4个字节,用于标识TCP数据段中第一个字节的序号。序号字段用于实现TCP的序列号机制,确保数据的顺序传输和可靠接收。
确认号(Acknowledgment Number):占用4个字节,用于标识接收方期望从发送方接收到的下一个数据段的序号。确认号字段用于实现TCP的确认机制,确保数据的可靠传输。
数据偏移(Data Offset):占用4个位,用于指示TCP段头的长度,以4字节为单位。因为TCP选项字段的长度可变,所以需要通过数据偏移字段来确定TCP段头的实际长度。
标志位(Flags):占用6个位,包括URG、ACK、PSH、RST、SYN、FIN等标志位,用于控制TCP连接的建立、终止和数据传输等操作。
窗口大小(Window Size):占用2个字节,用于指示发送方可以接收的数据量,以字节为单位。窗口大小字段用于实现TCP的流量控制机制,避免数据的过度发送和拥塞。
校验和(Checksum):占用2个字节,用于对TCP段头和数据部分进行校验,以确保数据的完整性和准确性。
紧急指针(Urgent Pointer):占用2个字节,用于指示紧急数据的结束位置。紧急指针字段用于实现TCP的紧急数据传输机制,确保紧急数据的及时传输。
选项(Options):占用可变长度,用于传输一些额外的控制信息,如最大段长度(MSS)、窗口缩放因子(Window Scale Factor)等。选项字段通常用于优化TCP连接的性能和可靠性。
TCP段头包含了一系列字段,相对于UDP很复杂,他们用于控制和管理TCP数据传输过程中的各种参数和属性,确保数据的可靠传输和有效处理。TCP段头的各个字段之间相互配合,共同实现了TCP协议的各项功能。
TCP的三次握手:
客户端发送SYN(同步)报文:客户端首先向服务器发送一个SYN报文(同步请求),其中包含客户端的初始序列号(ISN)作为客户端的起始序列号,并将SYN标志位设置为1,表示请求建立连接。
服务器发送ACK(确认)报文:服务器接收到客户端的SYN报文后,如果同意建立连接,就会向客户端发送一个ACK报文(确认请求),其中包含服务器的初始序列号(ISN)作为服务器的起始序列号,并将ACK标志位设置为1,表示接收到客户端的请求。
客户端发送ACK(确认)报文:客户端接收到服务器的ACK报文后,也会向服务器发送一个ACK报文(确认响应),其中将ACK标志位设置为1,表示接收到服务器的确认。
经过这三次握手,客户端和服务器就建立了TCP连接,并可以开始进行数据的传输。这个过程的目的是确保通信双方都能够正确地建立连接,并且互相认可对方的身份和状态。三次握手过程中,每个报文都包含了必要的信息,如起始序列号、确认号等,用于在连接建立后进行数据的可靠传输和处理。
当我们讨论网络安全时,这些术语经常被提及:
总的来说,TLS 是一种用于保护网络通信的协议,PFS 确保即使主密钥泄露也能保持通信的机密性,而 Server Order Preference 允许服务器指定首选的密钥交换顺序以增强连接的安全性。
看起来似乎传输层是讲解中最少的一篇,但是却很重要,下一篇使用Python实现的套接字编程。