2024/03/06 每日3题

浅谈网络知识

1. TCP vs UDP

什么是TCP?

TCP是传输控制协议(Transmission Control Protocol)的缩写。它是一种在计算机网络中常用的协议,用于在两台计算机之间建立可靠的数据传输连接。
TCP是一种面向连接的协议,它通过三次握手来建立连接,并通过流量控制、拥塞控制和错误恢复机制来确保数据的可靠传输。
TCP提供了可靠的、面向字节流的通信,它将应用层传输的数据划分为以报文段为单位的数据块,并通过序号和确认机制来保证数据的正确传输和接收。
TCP协议是互联网的核心协议之一,常用于传输HTTP、FTP、SMTP等应用层协议等的数据。它在网络中扮演着重要的角色,确保了数据的可靠传输和网络的稳定性。

下面来介绍它的面向连接,可靠性,流量控制,拥塞控制,面向字节流等特点功能
1. 面向连接: TCP在进行数据传输之前,需要在发送端和接受端之间建立连接,然后进行数据传输,最后释放连接。这种面向连接的机制确保了数据传输的可靠性和有序性。
2. 可靠性/有序: TCP提供了可靠的传输数据服务,通过序列号、确认应答、超时重传等机制,可以确保数据包的可靠传输,同时保证数据的有序性。
3. 流量控制: TCP通过滑动窗口机制进行流量控制,他可以动态调整发送端的发送速率,以适应网路的拥塞情况,避免数据丢失和网络拥塞。
4. 拥塞控制: TCP用过拥塞避免算法和拥塞控制机制来避免网络拥塞并提高网络性能,他可以根据网络的拥塞程度调整发送速率,避免网路拥塞和数据丢失。
5. 面向字节流: TCP是一种面向字节流的协议,发送端和接受端之间传输的是一个无结构的字节流,而不是固定长度的消息。
6. 应用场景: 被广泛应用于web浏览、电子邮件、文件传输、远程登录等各种网路片应用中。

三次握手的过程

1. 第一次握手 (SYN):
· 客户端向服务器端发送一个 TCP 报文段,其中设置 SYN (同步序列编号) 标志位为 1,表示发起连接请求。
· 客户端选择一个初始的序列号 (sequence number) 并将其包含在报文段中。
· 这个报文段没有携带应用层数据,只有 TCP 头部。

2. 第二次握手 (SYN-ACK):
· 服务器端接收到客户端发送的 SYN 报文段后,会回复一个 TCP 报文段,其中设置 SYN 和 ACK 标志位均为 1,表示确认收到客户端的连接请求。
· 服务器端也会选择一个自己的初始序列号,并将其包含在报文段中。
· 与客户端一样,这个报文段也没有携带应用层数据,只有 TCP 头部。

3. 第三次握手 (ACK):
· 客户端接收到服务器端发送的 SYN-ACK 报文段后,会向服务器端发送一个确认报文段,其中设置 ACK 标志位为 1,表示确认收到服务器端的确认。
· 这个确认报文段也会包含客户端自己选择的初始序列号。
· 此时,客户端与服务器端之间的连接已经建立,双方都可以开始发送数据。
完成了这三次握手过程之后,TCP 连接就建立起来了。这个过程确保了通信双方都能够正确地识别对方,并且同步初始序列号,从而建立了一个可靠的双向通信通道。

4次挥手

1. 第一次挥手 (FIN):
  当一方的应用程序完成数据传输后,它会发送一个 TCP 报文段给对方,其中设置 FIN (结束) 标志位为 1,表示它已经完成数据的发送,希望关闭连接。
在这个报文段中,通常还会包含最后一次数据传输的序列号。
2. 第二次挥手 (ACK):

接收到第一次挥手的一方,会发送一个确认报文段作为响应,其中设置 ACK 标志位为 1,表示确认收到对方的关闭请求。
这个确认报文段还会包含一个序列号,指示接收方期望接收的下一个序列号。
3. 第三次挥手 (FIN):

当另一方也完成了数据的传输,它也会发送一个 TCP 报文段给对方,其中设置 FIN 标志位为 1,表示它也希望关闭连接。
这个报文段同样包含最后一次数据传输的序列号。
4. 第四次挥手 (ACK):

接收到第三次挥手的一方,会发送一个确认报文段作为响应,其中设置 ACK 标志位为 1,表示确认收到对方的关闭请求。
类似于第二次挥手,这个确认报文段还会包含一个序列号,指示接收方期望接收的下一个序列号。
完成了这四次挥手过程之后,TCP 连接就可以安全地关闭了。这个过程确保了双方都能够正确地完成数据传输并关闭连接,从而释放资源并结束通信。

什么是UDP?

UDP是用户数据报协议(User Datagram Protocol)的缩写。它是一种在计算机网络中常用的协议,与TCP类似,用于在两台计算机之间进行数据传输。
UDP是一种无连接的协议,与TCP不同,它不会在发送数据之前建立连接或进行握手。UDP将数据划分为以用户数据报为单位的数据包,通过网络传输,接收方可以直接从数据包中提取数据。
UDP协议更加轻量级,传输速度较快,但无法保证数据的可靠性和顺序性。
下面来介绍它的无连接,不可靠,无序性,应用场景等特点功能
1. 无连接性:UDP 是无连接的,即发送数据前不需要建立连接,也不会维护连接状态。每个数据包都是相互独立的,因此在发送和接收数据时并不需要维护复杂的连接状态信息。
2. 不可靠性:UDP 不提供数据传输的可靠性保证。它没有像 TCP 那样的重传、拥塞控制、顺序传输等机制,因此在网络传输过程中可能会出现丢包、乱序等情况。
3. 低延迟:由于 UDP 没有建立连接的开销,且不需要进行可靠性保证的处理,因此其传输延迟较低。这使得 UDP 在实时性要求较高的应用场景(如音频、视频传输)中得到广泛应用。
4. 适用于广播和多播:UDP 支持向多个目的地发送数据包,这使得它适用于广播和多播等场景。
5. 应用场景:UDP 在实时音视频传输、网络游戏、DNS 解析、SNMP 管理等领域得到广泛应用,特别是对于一些实时性要求高、能够容忍数据丢失的应用场景。

当用户在浏览器中输入一个网址并按下回车键时,浏览器会启动一个请求-响应的过程,以加载并显示所请求的网页。以下是从浏览器发送请求的整个链路过程的详细讲解

1. DNS 解析:

浏览器首先会对输入的域名进行 DNS 解析,将域名转换成对应的 IP 地址。如果浏览器的缓存中已经存在该域名的解析结果,则可以直接使用;否则会向本地 DNS 服务器发送 DNS 请求,如果本地 DNS 服务器也没有缓存该域名的解析结果,则会向根域名服务器发起请求。
2. 建立 TCP 连接:

浏览器通过操作系统的网络协议栈,向目标服务器的 IP 地址发起 TCP 连接。这个过程会经历 TCP 的三次握手,确保客户端和服务器之间建立可靠的双向通信通道。
3. 发送 HTTP 请求:

一旦 TCP 连接建立成功,浏览器就会构建一个 HTTP 请求报文,其中包含了请求的方法 (GET、POST 等)、URL、请求头部信息等,然后通过 TCP 连接将这个请求报文发送给服务器。
4. 服务器处理请求:

服务器接收到浏览器发送的 HTTP 请求报文后,会根据请求的内容进行相应的处理。这可能包括读取请求的资源、执行动态页面的逻辑处理、查询数据库等操作。
5. 服务器发送 HTTP 响应:

服务器处理完请求后,会构建一个 HTTP 响应报文,其中包含了状态码、响应头部信息、响应的内容等。然后通过 TCP 连接将这个响应报文发送给浏览器。
6. 浏览器接收响应:

浏览器接收到来自服务器的 HTTP 响应报文后,会解析其中的内容,并根据响应头部的信息进行相应的处理。如果是 HTML 页面,浏览器会解析并渲染页面内容;如果是其他资源 (如图片、样式表、脚本等),浏览器会根据响应的内容类型进行相应的处理和显示。
7. 关闭 TCP 连接:

一旦页面中的所有资源都加载完成,或者连接超时,浏览器会关闭 TCP 连接,释放资源。
这个整个过程描述了从用户在浏览器中输入网址开始,到页面内容在浏览器中呈现完成的整个链路过程。在这个过程中,涉及到了 DNS 解析、建立 TCP 连接、发送 HTTP 请求、服务器处理请求、服务器发送 HTTP 响应以及浏览器渲染页面等多个环节。

2. HTTP vs TCP

HTTP (Hypertext Transfer Protocol) 和 TCP (Transmission Control Protocol) 是计算机网络中的两个重要的协议,它们分别属于不同的 OSI 模型层次,承担着不同的功能。下面是它们的主要区别和联系:

定义和功能:

1. TCP 是传输层协议,负责在网络上可靠地传输数据。它提供了可靠的、面向连接的、全双工的数据传输服务,包括连接的建立、数据的可靠传输、连接的终止等功能。
HTTP 是应用层协议,用于在网络上传输超文本文档。它建立在 TCP 协议之上,定义了客户端和服务器之间进行通信的规则,包括请求-响应模式、请求方法、状态码、消息头部等内容。
关系:

2. HTTP 使用 TCP 作为其传输层协议,利用 TCP 提供的可靠的数据传输服务来传输 HTTP 报文。因此,HTTP 报文是封装在 TCP 报文中进行传输的。
由于 TCP 提供了可靠的连接和数据传输服务,因此 HTTP 可以借助 TCP 实现可靠的数据传输。在建立连接、传输数据和关闭连接的过程中,HTTP 借助了 TCP 提供的各种功能。
特点:

3. TCP 是一种面向连接的、可靠的传输协议,它提供了数据的可靠传输、流量控制、拥塞控制等功能。这使得 TCP 适用于要求数据完整性和可靠性的应用场景。
HTTP 是一种无状态的、应用层协议,它主要用于在客户端和服务器之间传输超文本文档。HTTP 本身并不提供数据的可靠性保证,因为它依赖于 TCP 提供的可靠传输服务。
总之,TCP 和 HTTP 是计算机网络中两个不同层次的协议,它们之间存在着协同工作的关系。TCP 提供了可靠的数据传输服务,而 HTTP 则利用 TCP 提供的传输服务来进行超文本文档的传输。

3. HTTP vs HTTPS

HTTP (Hypertext Transfer Protocol) 和 HTTPS (Hypertext Transfer Protocol Secure) 是用于在客户端和服务器之间传输数据的两种协议,它们之间有以下几个主要区别:

1. 安全性:

HTTP 是一种明文传输协议,它的数据传输是明文的,容易被窃听和篡改。因此,对于一些敏感信息的传输,如用户登录信息、信用卡信息等,使用 HTTP 存在较大的安全风险。
HTTPS 则是在 HTTP 的基础上加入了 SSL/TLS 加密传输层,通过在传输层加密数据,使得传输的数据更加安全,能够抵御窃听和篡改等攻击。
2. 端口:

HTTP 默认使用端口80进行通信,而 HTTPS 默认使用端口443进行通信。
3. 证书:

在使用 HTTPS 进行通信时,服务器需要使用数字证书来证明自己的身份。数字证书通常由经认证的证书颁发机构(CA)颁发,证明了服务器的身份,以确保通信的安全性。
4. 访问方式:

从用户的角度看,用户在浏览器中输入的 URL 中,使用 HTTP 的网站的 URL 以 "http://" 开头,而使用 HTTPS 的网站的 URL 以 "https://" 开头。
总的来说,HTTPS 是在 HTTP 的基础上加入了加密传输层的安全传输协议,适用于对数据传输安全性要求较高的场景,如在线支付、用户登录等。在使用 HTTPS 的情况下,客户端和服务器之间的通信会通过 SSL/TLS 进行加密,从而保障了传输数据的安全性。

4. HTTP1.0 vs 2.0

差异:通信方式,性能优化,头部压缩,服务器推送
HTTP/1.0:

1. 单个连接处理单个请求:每个请求需要建立一个独立的连接来进行处理,这导致了连接的开销较大。
2. 不支持请求的管线化:客户端不能在一个连接上发送多个请求而不等待响应,这导致了部分的阻塞效应。
3. 不支持头部压缩:每个请求和响应的头部信息都需要重复传输,导致了不必要的数据开销。
HTTP/1.1:

1. 支持持久连接 (Persistent Connection):允许多个请求和响应复用同一个TCP连接,减少了连接的建立和关闭开销。(虽然使用了持久连接,但每个请求/响应仍然需要按照顺序依次进行处理,一个请求的响应必须等待前面请求的响应完成后才能进行。这可能导致效率低下,尤其在高延迟网络环境下。)
2. 支持请求的管线化 (Pipelining):允许客户端在不等待响应的情况下发送多个请求,提高了请求响应的效率。
3. 引入了头部信息压缩:通过压缩重复的头部信息,减少了不必要的数据传输开销。
HTTP/2.0:

1. 多路复用 (Multiplexing):允许在同一个连接上并行发送多个请求和响应,避免了头部阻塞,提高了并发性能。
2. 二进制分帧传输:将请求和响应分割为更小的二进制帧进行传输,提高了传输效率。(HTTP/1.1使用文本格式来传输请求和响应,这样虽然易于阅读和调试,但在数据传输时会增加解析和处理的开销。)
3. 头部压缩:引入了头部压缩机制,减少了头部信息的传输开销。
4. 服务器推送 (Server Push):服务器可以在客户端请求之前主动推送资源,减少了客户端请求的延迟。
总的来说,HTTP/1.1相对于HTTP/1.0引入了持久连接、请求的管线化和头部信息压缩等功能,显著改善了HTTP/1.0存在的性能问题。而HTTP/2.0则在HTTP/1.1的基础上引入了多路复用、二进制分帧传输、头部压缩和服务器推送等功能,进一步提高了性能和效率。
 
posted @   君临天下之徐少  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示