深入解析网络协议:从OSI七层模型到HTTP与TCP/IP的关系

打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

在网络的世界里,理解不同协议如何协同工作以实现高效、可靠的通信至关紧张。无论是构建动态的Web应用,还是举行复杂的网络编程,对基础协议的理解都是不可或缺的。本文首先先容OSI七层模型,这是一个为网络系统计划提供通用参考框架的尺度模型。接着,我们将探讨当你在浏览器中输入一个网址后发生的一系列过程,包括DNS查询、建立TCP连接、发送HTTP哀求等关键步调。别的,我们还将详细讨论如何安全有用地实现跨域资源共享(CORS),以及HTTP协议从1.0版本到2.0版本的发展历程和它们之间的区别。最后,文章将深入分析HTTP协议与TCP/IP协议之间的关系,解释它们是如何共同作用来支持当代互联网的运作的。
通过阅读本文,读者不但能够获得关于网络通信底层原理的知识,还能理解这些原理如何应用于实际的Web开发和网络编程中。无论你是初学者还是有肯定经验的技术人员,都可以从中得到启发,并加深对网络架构的理解。让我们一起探索这个由协议构成的精彩世界吧!
1.OSI 的七层模型都有哪些?

OSI(开放系统互联模型)是一个定义了网络通信功能分层框架的尺度模型。它由国际尺度化构造(ISO)提出,旨在为不同的网络系统提供一个通用的参考框架。OSI模型分为七层,每一层都负责处置惩罚特定类型的网络功能,并与相邻的上下层举行交互。以下是OSI七层模型从高层到低层的概述:

  • 应用层(Application Layer)

    • 这是最靠近终极用户的条理,直接为应用程序提供网络服务。
    • 负责支持网络应用程序及实现用户希望实行的所有网络通信使命,比方电子邮件、文件传输等。
    • 相干协议包括HTTP、HTTPS、FTP、SMTP等。

  • 表现层(Presentation Layer)

    • 主要负责数据格式转换、加密解密以及压缩等操作。
    • 确保发送方的数据能够被接收方理解,办理不同系统间的数据表现差异题目。
    • 比方SSL/TLS加密就在此层处置惩罚。

  • 会话层(Session Layer)

    • 管理会话,即控制和管理不同机器上的应用程序之间的对话。
    • 负责建立、管理和终止会话,并维护会话状态。
    • 支持长途过程调用(RPC)、定名服务等功能。

  • 传输层(Transport Layer)

    • 提供端到端的错误检测和规复服务,确保数据可靠地从源地点传输到目的地点。
    • 包含TCP和UDP两种主要协议,前者提供可靠的连接导向服务,后者则提供较不稳固的无连接服务。

  • 网络层(Network Layer)

    • 处置惩罚数据包在网络中的传输路径选择题目。
    • 决定如何将数据从源地点路由到目的地点,涉及IP寻址和路由选择。
    • 焦点协议是IP(Internet Protocol),还包括ICMP、ARP等。

  • 数据链路层(Data Link Layer)

    • 关注物理连接上相邻节点间的可靠数据传输。
    • 分为两个子层:逻辑链路控制(LLC)和媒体访问控制(MAC)。负责帧同步、不对控制、流量控制等功能。
    • 常见协议如以太网、PPP等。

  • 物理层(Physical Layer)

    • 最底层,涉及到实际的物理连接介质,如电缆、光纤、无线电波等。
    • 定义了电信号或光信号的形式、电压水平、物理连接器规格等。
    • 负责比特流的传输。

每层都依靠于其下一层提供的服务,并向上一层提供服务。这种分层结构使得网络计划更加模块化,便于故障排查和技术更新。
2.浏览器中输入: “www.woaijava.com”之后都发生了什么? 请详细论述

当你在浏览器地点栏中输入www.woaijava.com并按下回车键后,一系列复杂的操作将在后台睁开,从DNS解析开始直到网页内容完全加载显示在屏幕上。以下是这一过程的详细步调:
1. URL解析与查抄



  • 浏览器首先会查抄你输入的内容是否是一个有用的URL,并实验补全协议(如http://或https://)。
2. DNS查询



  • 查找域名对应的IP地点:浏览器首先查抄本地缓存(包括浏览器缓存和操作系统缓存),假如找不到,则向设置的DNS服务器发送查询哀求。
  • 假如本地DNS服务器没有所需信息,它将递归地查询其他DNS服务器直至找到www.woaijava.com对应的IP地点。
3. 建立TCP连接



  • 使用第二步获取到的IP地点,浏览器试图通过TCP协议与目标Web服务器建立连接。这通常涉及到三次握手过程以确保双方都准备好举行数据交换。
4. SSL/TLS握手(假如是HTTPS)



  • 假如目标网站使用HTTPS协议,浏览器与服务器之间还需完成SSL/TLS握手过程,以协商加密算法、验证服务器身份并交换密钥,从而创建一个安全的通信通道。
5. 发送HTTP/HTTPS哀求



  • 连接成功后,浏览器构建并发送HTTP GET哀求(或其他类型的哀求,好比POST)到服务器,包含哀求行(方法、URI、版本)、头部字段以及大概的消息体(对于非GET哀求)。
6. 服务器处置惩罚哀求



  • Web服务器接收到哀求后,根据哀求路径确定要返回的资源。这大概涉及实行服务器端脚本(如PHP、Java等)来动态天生页面内容。
7. 返反响应



  • 服务器天生响应消息,包括状态行(如200 OK)、响应头部以及响应正文(HTML文档、图片等)。然后将此响应发送回客户端。
8. 渲染页面



  • 解析HTML:浏览器开始解析HTML文档,构建DOM树。
  • 加载资源:当碰到外部资源(如CSS、JavaScript文件、图片等)时,浏览器会发起新的HTTP或HTTPS哀求去下载这些资源。
  • 构建渲染树:结合DOM树和CSSOM(CSS对象模型),形成渲染树,决定哪些节点可见及它们的样式。
  • 布局与绘制:计算各元素简直切尺寸和位置(布局阶段),并将终极图像绘制到屏幕上(绘制阶段)。
9. 实行JavaScript



  • 假如页面中有嵌入的JavaScript代码,在适当时候会被实行。JavaScript可以修改DOM结构,改变页面的行为或外观。
10. 用户交互



  • 页面加载完成后,用户可以与页面举行交互,触发事件处置惩罚程序,进一步动态更新页面内容。
整个流程中,大概会有多个往返于客户端和服务器之间的通信,特别是对于动态内容大概必要加载大量外部资源的页面。别的,当代浏览器还采用各种优化技术,如预取、预加载、延迟加载等,来提高性能和用户体验。
3.如何实现跨域?

跨域资源共享(CORS,Cross-Origin Resource Sharing)是一个W3C尺度,它允许服务器声明哪些源可以访问其资源。当一个资源试图从不同的域名、协议或端口哀求另一个资源时,就会发生跨域哀求。为了安全地实现跨域,有几种方法可以采用:
1. CORS(跨域资源共享)

这是最常用的办理方案之一,通过设置HTTP响应头来允许特定的跨域哀求。


  • 简朴哀求:对于GET、HEAD或POST哀求(且没有自定义头部,除了被浏览器主动添加的),假如Content-Type是application/x-www-form-urlencoded, multipart/form-data, 大概 text/plain,则被视为简朴哀求。
    在这种情况下,只需在服务器端设置适当的响应头即可:
    1. Access-Control-Allow-Origin: http://example.com
    复制代码
  • 预检哀求:对于非简朴哀求(如PUT, DELETE哀求大概设置了自定义头部的哀求),浏览器会先发送一个OPTIONS哀求举行预检,扣问服务器是否允许实际哀求。
    必要在服务器端设置以下响应头:
    1. Access-Control-Allow-Origin: http://example.com
    2. Access-Control-Allow-Methods: POST, GET, OPTIONSAccess-Control-Allow-Headers: Content-Type, AuthorizationAccess-Control-Max-Age: 86400 // 缓存预检哀求的效果一天
    复制代码
2. JSONP(JSON with Padding)

一种较老的技术,主要用于支持旧版浏览器。它使用了<script>标签不受同源计谋限制的特点,通过动态创建<script>元素并指定src属性为必要跨域访问的URL来实现数据获取。
  1. <script src="http://otherdomain.com/data.json?callback=myCallback"></script>
复制代码
服务器返回的数据格式雷同如下:
  1. myCallback({"key": "value"});
复制代码
但是,JSONP仅支持GET哀求,并存在肯定的安全隐患。
3. 使用代理

假如无法直接修改服务器以支持CORS,可以在同一域名下部署一个代理服务器。前端向这个代理服务器发起哀求,代理服务器再向目标服务器转发哀求并将效果返回给前端。
比方,在Node.js中使用Express框架创建一个简朴的代理:
  1. const express = require('express');
  2. const request = require('request');
  3. const app = express();
  4. app.use('/proxy', (req, res) => {
  5.     const url = 'http://targetdomain.com' + req.url;
  6.     req.pipe(request(url)).pipe(res);
  7. });
  8. app.listen(3000, () => console.log('Proxy server running on port 3000'));
复制代码
4. WebSocket

WebSocket协议本身并不受同源计谋的限制,因此可以通过WebSocket实现跨域通信。
5. 设置文档.domain属性(仅限于子域之间)

假如两个页面属于同一个顶级域名下的不同子域名,可以通过设置document.domain为相同的顶级域名来解除跨域限制。
比方,假设有一个页面位于a.example.com,另一个页面位于b.example.com,两者都可以实行document.domain = "example.com"来共享脚本和资源。
总结



  • 对于当代Web应用,保举使用CORS作为办理跨域题目的主要本领。
  • JSONP由于其范围性和安全性题目,现在较少使用。
  • 当前端与后端不在同一域时,可以考虑使用代理服务器。
  • WebSocket适用于必要及时双向通信的场景。
选择哪种方法取决于具体的应用需求和技术栈。
4.HTTP1.0、 HTTP1.1、 HTTP2.0的关系和区别

HTTP/1.0、HTTP/1.1和HTTP/2是互联网协议HTTP的不同版本,它们各自代表了在不同时间点上对原始HTTP协议的改进和发展。下面详细先容这三个版本的关系和主要区别:
HTTP/1.0



  • 发布时间:1996年
  • 特点

    • 每个哀求都必要建立一个新的TCP连接,即所谓的“短连接”,这导致了较高的延迟,特别是在频繁哀求小文件时效率低下。
    • 不支持持久连接,默认情况下每次哀求完成后就会关闭连接。
    • 缺乏对管道化(pipelining)的支持,这意味着必须等待前一个响应返回才能发送下一个哀求。
    • 简朴直接,但性能有限。

HTTP/1.1



  • 发布时间:1999年
  • 改进点

    • 持久连接:默认启用了持久连接(Keep-Alive),允许在一个TCP连接上发送多个哀求和响应,减少了连接建立和断开的开销。
    • 管道化:固然理论上支持管道化(即可以不等待前一个响应就发送下一个哀求),但由于服务器端实现的题目以及大概导致的队头阻塞题目,实际应用中并未广泛采用。
    • 分块传输编码:允许服务器将响应体分割成多个部门逐个发送,适用于动态天生的内容。
    • 假造主机:通过Host头部字段支持在同一IP地点上托管多个域名。
    • 加强缓存机制:提供了更强盛的缓存控制选项。
    • 只管做了很多改进,HTTP/1.1仍然存在一些限制,好比无法充分使用网络带宽,尤其是在高延迟网络情况中表现不佳。

HTTP/2



  • 发布时间:2015年
  • 巨大改进

    • 二进制分帧层:不同于HTTP/1.x使用的文本协议,HTTP/2采用了二进制格式举行数据传输,提高了协议解析效率并减少了错误发生的大概性。
    • 多路复用:允许在同一个TCP连接上同时发起多个哀求和响应,办理了HTTP/1.x中的队头阻塞题目,极大地提高了页面加载速度。
    • 头部压缩:使用HPACK算法压缩HTTP头部,减少了不必要的重复传输,节流了带宽。
    • 服务器推送:服务器可以在客户端明白哀求之前主动向客户端推送资源,如CSS、JavaScript等,进一步加快页面加载速度。
    • 流优先级:允许客户端指定哪些资源更紧张,以便优先加载关键资源。
    • 安全性:固然HTTP/2尺度本身并不强制要求加密,但所有主流浏览器只支持基于TLS的HTTP/2(通常称为HTTPS),因此实际上大多数实现都是加密的。

总结



  • 从HTTP/1.0到HTTP/1.1:主要是为了办理HTTP/1.0的低效性,增长了持久连接、管道化等功能,明显提升了性能。
  • 从HTTP/1.1到HTTP/2:则是为了克服HTTP/1.1在当代Web应用中的范围性,引入了二进制分帧、多路复用、头部压缩等特性,使得网页加载更加高效和快速。
随着技术的发展,HTTP/3也已推出,它基于QUIC协议而非TCP,旨在进一步改善网络性能,特别是在移动和高丢包率的网络情况中。不外,HTTP/2依然是现在广泛部署和使用的主要HTTP版本之一。
5.说说HTTP协议与TCP/IP协议的关系

HTTP(超文本传输协议)和TCP/IP(传输控制协议/互联网协议)是互联网通信中不同条理的协议,它们各自在数据传输过程中扮演着不同的脚色。理解这两者之间的关系有助于更好地把握网络通信的基本原理。
TCP/IP协议栈

TCP/IP实际上是一个协议族,它定义了如何通过网络举行数据通信的一系列规则和尺度。TCP/IP模型通常分为四层:

  • 应用层:直接为应用程序提供服务,处置惩罚高层协议如HTTP、FTP、SMTP等。
  • 传输层:负责端到端的数据传输,主要包括TCP和UDP两种协议。
  • 网络层:负责路由选择和数据包转发,焦点协议是IP(Internet Protocol)。
  • 链路层:涉及物理连接上的数据传输,包括以太网、Wi-Fi等技术。
HTTP与TCP/IP的关系



  • HTTP位于应用层:HTTP是一种应用层协议,主要用于Web浏览器和Web服务器之间的通信。它定义了客户端如何向服务器发送哀求以及服务器如何响应这些哀求的尺度。
  • 依靠于TCP/IP:固然HTTP本身并不直接处置惩罚数据的实际传输细节,但它依靠于下层的TCP/IP协议来完成这一使命。具体来说:

    • HTTP使用TCP作为其传输层协议:这意味着每当一个HTTP哀求被发起时,首先必要建立一个TCP连接(对于HTTP/1.1及以上版本,默认情况下会实验复用现有的连接)。TCP提供了可靠的、面向连接的服务,确保数据能够按序到达且没有丢失或损坏。
    • IP负责路由选择:一旦建立了TCP连接,IP协议就会接管数据包在网络中的路由工作,决定如何从源地点到达目标地点。

具体流程

当你在浏览器中输入一个网址(比方http://www.example.com)并按下回车键时,以下步调会发生:

  • 浏览器解析URL,确定要访问的服务器地点。
  • 假如尚未建立TCP连接,则启动TCP三次握手过程与目标服务器建立连接。
  • 连接建立后,浏览器构建HTTP哀求并通过已建立的TCP连接发送给服务器。
  • 服务器接收到HTTP哀求后,处置惩罚哀求,并通过相同的TCP连接返回HTTP响应。
  • 浏览器接收HTTP响应,并根据响应内容渲染网页。
总结

简而言之,HTTP是基于TCP/IP之上的一种应用层协议,用于实现Web客户端与服务器之间的通信。而TCP/IP则提供了底层的网络通信基础设施,确保数据能够在复杂的网络情况中可靠地传输。HTTP使用TCP提供的可靠传输服务来包管哀求和响应的完备性,同时依靠IP来举行环球范围内的路由选择。因此,可以说HTTP是TCP/IP协议栈的一个用户,它使用了TCP/IP提供的功能来完成特定的应用层使命。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表