计算机网络

ISO七层模型

  1. 物理层(Physical Layer)

    • 主要任务是传输比特流,负责管理硬件设备之间的物理连接和电信号传输。
    • 定义了传输媒介的特性,如电压、频率、数据速率和传输距离。
    • 物理层规定了如何在媒介上传输比特流,但不涉及数据的意义或格式。
  2. 数据链路层(Data Link Layer)

    • 主要任务是确保数据在相邻节点之间可靠传输,处理帧(Frame)的传输。
    • 负责错误检测和纠正,以及帧的流量控制。
    • MAC地址(Media Access Control)用于设备在物理媒介上寻址和识别。
    • 常见的数据链路协议包括以太网(Ethernet)和Wi-Fi。
  3. 网络层(Network Layer)

    • 提供端到端的数据传输,跨越不同网络之间的通信。
    • 负责路由选择,确定数据包从源到目的地的路径。
    • 典型的网络层协议是IP(Internet Protocol),它使用IP地址标识设备和网络。
  4. 传输层(Transport Layer)

    • 负责端到端的通信,确保数据可靠传输。
    • 数据被分成较小的段,进行传输,并在目标处重新组装。
    • 提供流量控制和差错检测,以保证数据的完整性。常见协议包括TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。
  5. 会话层(Session Layer)

    • 负责建立、管理和终止用户会话。
    • 处理不同应用程序之间的通信,并支持同步和检查点功能。
    • 在通信会话之间维护状态和连接信息。
  6. 表示层(Presentation Layer)

    • 负责数据的表示、编码和加密,以确保数据能够被正确解释。
    • 处理数据的格式转换,如将数据从不同编码转换为可识别的格式。
    • 也可进行数据压缩和加密以提高安全性。
  7. 应用层(Application Layer)

    • 最顶层,直接为最终用户提供网络服务。
    • 包括各种应用程序,如文件传输(FTP)、电子邮件(SMTP)、远程登录(SSH)等。
    • 这些应用层协议决定了用户能够使用的网络功能和服务。

TCP和UDP的区别

TCP(传输控制协议)和UDP(用户数据报协议)是两种常用的网络传输协议,它们有许多重要的区别:

  1. 连接性

    • TCP是面向连接的协议,它在通信开始之前需要建立连接,然后在通信结束后释放连接。这确保了数据的可靠性和顺序传输。
    • UDP是无连接的协议,它不需要建立连接,数据包可以直接发送到目标,因此通信更加轻量级。但这也意味着UDP不提供数据包的可靠性或顺序性。
  2. 可靠性

    • TCP提供可靠性的数据传输。它使用确认机制,确保数据包的可靠交付,并会重新传输丢失的数据包。
    • UDP不提供可靠性。它不会等待丢失的数据包的确认,因此数据包可能会丢失或以不同的顺序到达。
  3. 流量控制

    • TCP具有流量控制机制,可以防止数据的过度拥塞,并确保发送方不会压倒接收方。
    • UDP不具有流量控制,因此发送方可以以任何速度发送数据,这可能导致网络拥塞。
  4. 速度

    • UDP通常比TCP更快,因为它没有建立连接或确认数据的开销。这使得UDP适用于需要快速传输数据的应用,如实时音频和视频传输。
  5. 应用

    • TCP常用于需要可靠数据传输的应用,如网页浏览、电子邮件、文件传输和数据库访问。
    • UDP常用于实时应用,如语音通话、视频流媒体、在线游戏和DNS查询,这些应用更注重低延迟和快速传输而不是数据的可靠性。
  6. 头部开销

    • UDP的头部开销较小,仅包含源端口、目标端口、长度和校验和字段。
    • TCP的头部开销较大,包含了许多额外的控制信息,如序列号、确认号、窗口大小等,以支持可靠性和流量控制。

简述从浏览器地址栏输入url到显示主页的过程

  1. 解析URL: 当用户在浏览器地址栏中输入URL(统一资源定位符)时,首先浏览器会进行URL解析。这意味着它会将URL拆分成几个部分,包括协议(例如,http://或https://)、域名(例如,www.example.com)、端口号(如果有)、路径和查询参数等。

  2. DNS解析: 浏览器需要将域名解析为IP地址,以便知道要请求的服务器的位置。它会首先检查浏览器缓存,如果找到对应的IP地址,则跳过DNS解析步骤。否则,它会向本地DNS服务器发送DNS查询请求,该服务器将尝试查找域名的IP地址。如果本地DNS服务器没有缓存或找不到该信息,它将向根DNS服务器发出请求,并逐级查询,直到找到IP地址并将其返回给浏览器。

  3. 建立TCP连接: 一旦浏览器知道了服务器的IP地址,它会尝试建立与服务器的TCP连接。如果URL使用了安全的HTTPS协议,连接将是加密的。这个过程通常涉及“三次握手”,其中浏览器和服务器之间交换一系列控制消息,以确保双方已经建立连接。

  4. 发送HTTP请求: 一旦TCP连接建立,浏览器会构建一个HTTP请求,其中包含了要请求的资源的详细信息,例如主页、图像、CSS文件等。这个请求会发送给服务器。

  5. 服务器处理请求: 服务器接收到浏览器发送的HTTP请求后,会根据请求的内容来执行相应的操作。这可能包括访问数据库、执行应用程序逻辑等。服务器然后会构建HTTP响应,其中包含了请求的资源以及响应的状态码等信息。

  6. 返回HTTP响应: 服务器将HTTP响应通过TCP连接发送回浏览器。

  7. 浏览器渲染页面: 浏览器接收到HTTP响应后,会解析响应内容,这可能包括HTML、CSS、JavaScript和其他资源。浏览器使用HTML来构建文档对象模型(DOM),使用CSS来构建渲染树,然后通过JavaScript来处理页面上的交互和动态内容。一旦浏览器完成页面的构建和渲染,用户将看到网页的主页。

HTTP/1.0,1.1,2.0 的区别

HTTP/1.0:

  1. 持久连接:HTTP/1.0默认使用短连接,每个请求都需要建立一个新的TCP连接,请求完成后立即关闭连接,这会导致高延迟,因为每个请求都需要建立新连接。

  2. 请求头:HTTP/1.0请求头较简单,不包括主机信息,这导致了在一台服务器上托管多个虚拟主机时的问题。

  3. 管道化:HTTP/1.0不支持管道化,即不能同时发送多个请求,必须等待一个请求的响应才能发送下一个请求。

  4. 缓存:HTTP/1.0的缓存控制有限,主要依赖于ExpiresLast-Modified头。

  5. 错误处理:HTTP/1.0使用状态码来表示错误,但没有提供丰富的状态码。

HTTP/1.1:

  1. 持久连接:HTTP/1.1引入了持久连接,可以在一个TCP连接上发送多个请求和响应,减少了连接的开销,提高了性能。

  2. 请求头:HTTP/1.1要求请求头包含Host字段,解决了虚拟主机问题。

  3. 管道化:HTTP/1.1支持管道化,允许同时发送多个请求,但响应必须按照请求的顺序返回,这仍然存在"队头阻塞"问题。

  4. 缓存:HTTP/1.1引入了更强大的缓存控制,包括Cache-Control头,可以更精确地控制缓存行为。

  5. 错误处理:HTTP/1.1引入了更多的状态码,提供了更详细的错误信息。

HTTP/2.0:

  1. 多路复用:HTTP/2.0引入了多路复用,允许多个请求和响应在同一个连接上并行传输,避免了队头阻塞问题,显著提高了性能。

  2. 头部压缩:HTTP/2.0使用HPACK算法对头部信息进行压缩,减少了带宽消耗。

  3. 优化的二进制协议:HTTP/2.0采用了二进制协议,替代了文本协议,减少了解析的复杂性。

  4. 服务器推送:HTTP/2.0允许服务器在没有明确请求的情况下主动向客户端推送资源,提高了页面加载速度。

  5. 流控制:HTTP/2.0支持流控制,允许根据需要取消请求或响应的传输。

  6. 安全性:HTTP/2.0更鼓励使用TLS/SSL加密,以提供更好的安全性。

HTTPS的工作流程

HTTPS(Hypertext Transfer Protocol Secure)是一种用于安全传输数据的协议,它建立在HTTP之上,通过加密通信来保护数据的完整性和隐私。以下是HTTPS的工作流程:

  1. 客户端发起连接请求

    • 用户在浏览器中输入HTTPS的URL或点击链接。
    • 浏览器通过DNS解析获取服务器的IP地址。
  2. 客户端与服务器建立TLS握手

    • 客户端向服务器发送一个"ClientHello"消息,其中包含支持的加密算法和其他相关信息。
    • 服务器收到"ClientHello"后,会选择一个加密算法,并生成一个数字证书(通常由证书颁发机构(CA)签发)。
    • 服务器将数字证书、服务器的公钥以及其他信息封装在"ServerHello"消息中,发送给客户端。
  3. 客户端验证服务器证书

    • 客户端收到服务器的"ServerHello"消息后,会验证服务器的数字证书是否有效、是否由受信任的CA签发,以及是否与客户端期望的域名匹配。
    • 如果验证成功,客户端生成一个随机的对称加密密钥(称为会话密钥),并使用服务器的公钥加密该密钥。
    • 客户端将加密后的会话密钥发送给服务器。
  4. 服务器解密会话密钥

    • 服务器使用自己的私钥解密客户端发送的会话密钥。
  5. 客户端和服务器开始加密通信

    • 现在,客户端和服务器都有了相同的会话密钥,它们用于加密和解密后续的通信。
    • 所有的数据传输都会使用这个会话密钥进行加密和解密,以确保数据的隐私和完整性。
  6. 数据传输

    • 客户端和服务器之间的所有数据在传输过程中都会被加密,包括HTTP请求和响应,以及任何其他的应用层数据。
    • 任何窃听通信的第三方都只能看到加密后的数据,无法理解其内容。
  7. 连接关闭

    • 一旦数据传输完成,客户端和服务器可以选择关闭连接,通常会保持连接以供后续请求使用。 

SOCKET

Socket是计算机网络编程中的一个重要概念,它允许计算机之间通过网络进行通信。Socket是套接字的缩写,它是一种抽象的通信端点,用于在不同计算机之间传输数据。下面是关于Socket的一些基本信息:

  1. 套接字类型

    • 套接字可以分为两种主要类型:流套接字(Socket Type SOCK_STREAM)和数据报套接字(Socket Type SOCK_DGRAM)。
      • 流套接字提供面向连接的、可靠的、基于流的数据传输,如TCP套接字。
      • 数据报套接字提供不可靠的、无连接的数据传输,如UDP套接字。
  2. 套接字通信模型

    • 套接字通信可以基于两种主要模型:客户端-服务器模型和对等通信模型。
      • 客户端-服务器模型涉及一个服务器和多个客户端之间的通信,客户端向服务器发送请求,服务器响应请求。
      • 对等通信模型中,通信的两端是对等的,它们可以互相发送和接收数据。
  3. 套接字地址

    • 套接字通信涉及两个重要的地址:IP地址和端口号。
      • IP地址标识了计算机在网络上的位置。
      • 端口号用于标识计算机上的不同应用程序或服务。
  4. 套接字编程

    • 套接字编程是通过编程语言的套接字库(例如,Python的socket库)来创建、配置和管理套接字的过程。
    • 套接字编程允许开发者创建服务器和客户端应用程序,以便它们能够通过网络进行通信。
  5. 套接字通信过程

    • 在套接字通信中,通常有一个监听套接字(服务器套接字)和一个连接套接字(客户端套接字)。
    • 服务器套接字等待客户端连接请求,一旦请求到来,它会创建一个新的连接套接字来处理客户端与服务器之间的通信。
    • 数据在连接套接字之间通过读和写操作进行传输。
  6. 套接字安全性

    • 套接字通信在互联网上广泛使用,但需要谨慎处理安全性问题,特别是在公共网络上。
    • 对于安全通信,可以使用加密套接字(例如,使用TLS/SSL协议)来保护数据的机密性和完整性。

套接字是网络编程中的基础构建块,它允许计算机之间进行数据交换,支持各种应用程序,包括Web浏览器、电子邮件客户端、在线游戏和实时聊天应用程序等。套接字编程使开发者能够创建复杂的网络应用程序,实现计算机之间的通信和数据传输。

TCP 的三次握手机制

TCP(传输控制协议)的三次握手(Three-Way Handshake)是在建立TCP连接时使用的一种协议,用于确保通信双方都愿意建立连接并同步初始序列号。这个过程包括三个步骤,每个步骤都需要一次通信。

下面是TCP的三次握手过程:

  1. 第一步 - 客户端请求连接

    • 客户端首先向服务器发送一个特殊的TCP报文,这个报文称为SYN(同步)。
    • 这个报文包含一个初始序列号(ISN,Initial Sequence Number),用于标识客户端将要发送的数据的起始点。
    • 客户端将SYN标志位设置为1,表明这是一个连接请求。
  2. 第二步 - 服务器确认请求

    • 一旦服务器收到客户端的SYN报文,它会回复一个SYN+ACK报文。
    • 这个报文中,服务器会确认客户端的连接请求,并选择自己的初始序列号(ISN)。
    • 服务器同时将SYN和ACK标志位都设置为1,表明它愿意建立连接,并同意客户端的ISN值。
  3. 第三步 - 客户端确认连接

    • 最后,客户端收到服务器的SYN+ACK报文后,会发送一个确认报文给服务器。
    • 这个报文中,客户端将ACK标志位设置为1,同时确认服务器的ISN。
    • 这一步确认报文的目的是告诉服务器,客户端已经准备好开始传输数据了。

一旦这个三次握手过程完成,TCP连接就建立起来了,双方可以开始安全地进行数据传输。此后,数据传输完成后,连接可以通过四次握手来正常关闭。

这个三次握手机制的目的是确保连接的双方都能够互相通信,并且他们都已准备好开始传输数据。这种机制有助于防止旧的或意外的连接请求导致不必要的数据传输或连接建立。

TCP的四次挥手机制

TCP(传输控制协议)的四次挥手(Four-Way Handshake)是用于正常关闭一个已建立的TCP连接的过程。与建立连接时的三次握手相反,关闭连接需要四个步骤,以确保双方都能够正确终止连接。以下是TCP四次挥手的步骤:

  1. 第一步 - 客户端发送连接终止请求

    • 客户端希望关闭连接时,首先向服务器发送一个带有FIN(结束)标志位的TCP报文。
    • 这个报文表明客户端已经完成了数据的发送,并请求关闭连接。
    • 客户端进入FIN_WAIT_1状态,等待服务器的确认。
  2. 第二步 - 服务器确认客户端的连接终止请求

    • 一旦服务器收到客户端的带有FIN标志位的报文,它会发送一个带有ACK(确认)标志位的报文作为确认。
    • 服务器进入CLOSE_WAIT状态,此时服务器可以继续发送数据给客户端,但不能再接收来自客户端的新数据。
  3. 第三步 - 服务器发送连接终止请求

    • 当服务器也准备好关闭连接时,它会向客户端发送一个带有FIN标志位的TCP报文。
    • 这个报文表明服务器已经完成了数据的发送,并请求关闭连接。
    • 服务器进入LAST_ACK状态,等待客户端的确认。
  4. 第四步 - 客户端确认服务器的连接终止请求

    • 客户端收到服务器的带有FIN标志位的报文后,会发送一个带有ACK标志位的报文作为确认。
    • 一旦服务器收到这个确认报文,它就进入CLOSED状态,连接正式关闭。
    • 客户端进入TIME_WAIT状态,等待一段时间以确保可能在网络中延迟的ACK报文都被接收,然后才进入CLOSED状态。

在TIME_WAIT状态结束后,客户端和服务器都完成了连接的关闭。这个四次挥手的过程确保了数据的完整性和可靠性,因为它们允许任何尚未在网络中传输的数据包被正确处理。这也有助于防止连接的双方在关闭后重新使用相同的连接参数,从而避免混淆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值