计算机网络基础
网络分层模型
网络分层模型为OSI七层模型,是国际标准化组织提出的一个网络分层模型,其大体结构以及每一层提供的功能如下图所示
OSI七层模型
应用层--->表示层--->会话层--->传输层--->网络层--->数据链路层--->物理层

OSI模型中的每一层都专注做自己的一件事情,并且是顺序传递,相辅相成的,因为每一层都需要使用下一层所提供的功能来完成自己这一层全部的任务,比如传输输层就需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里去

TCP/IP 四层模型以及每一层的作用
TCP/IP模型可以看作是OSI七层模型的精简版本,
它由4层组成:1,应用层 2,传输层 3,网络层 4,网络接口层
但是并不能将TCP/IP四层模型 与 OSI七层模型完全精准的对应起来,不过可以对两者进行一个简单的对应,如图所示:

那么为什么网络要分层呢?
复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。
常见网络协议
应用层的常见协议:

**HTTP(Hypertext Transfer Protocol,超文不传输协议):**基于TCP 协议,是一种用于传输超文本和多媒体内容的协议,主要是为 Web浏览器与 Web服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP请求进行加载的。
**SMTP(Simple MailTransfer Protocol,简单邮件发送协议):**基于TCP 协议,是一种用于发送电子邮件的协议。注意:SMTP协议只负责邮件的发送,而不是接收。要从邮件服务器接收邮件,需要使用POP3 或IMAP 协议。
**POP3/IMAP(邮件接收协议):**基于TCP协议,两者都是负责邮件接收的协议。IMAP协议是比POP;史新的协议,它在功能和性能上都更加强大。IMAP 支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎所有现代电子邮件客户端和服务器都支IMAP。
**FTP(File Transfer Protocol,文件传输协议):**基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。注意上:FTP是一种不安全的协议,因为它在传输过程中不会对数据进行加密。建议在传输敏感数据时使用更安全的协议,如SFTP。
Telnet(远程登陆协议):基于 TCP协议,用于通过一个终端登陆到其他服务器。Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用Telnet,而是使用一种称为 SSH 的非常安全的网络传输协议的主要原因。
SSH(Secure Shell Protocol、安全的网络传输协议):基于TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务
RTP(Real-time Transport Protocol,实时传输协议):通常基于UDP协议,但也支持TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能出 WebRTC实现。
DNS(Domain Name System,域名管理系统):基于 UDP 协议,用于解决域名和 IP 地址的映射问题
传输层常见协议:

**TCP(Transmission Control Protocol,传输控制协议 ):**提供 面向连接 的,可靠的数据传输服务。
**UDP(User Datagram Protocol,用户数据协议):**提供无连接的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。
网络层常见协议:

IP(Intermet Protocol,网际协议): TCP/IP 协议中最重要的协议之一,属于网络层的协议,主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。目前IP 协议主要分为两种,一种是过去的IPv4,另一种是较新的IPv6,目前这两种协议都在使用,但后者已经被提议来取代前者。
**ARP(Address Resolution Protocol,地址解析协议):**ARP 协议解决的是网络层地址和链路层地址之间的转换问题。因为一个正 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但IP地址属于逻辑地址,而MAC地址才是物理地址,ARP协议解决了IP地址转MAC地址的一些问题。
**ICMP(Internet ControlMessageProtocol,五联网控制报文协议):**一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。例如,Ping工具就使用了ICMP协议来测试网络连通性。
NAT(NetworkAddress Translation,网络地址转换协议): NAT 协议的应用场景如同它的名称--网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个LAN下的IP地址,但在该LAN 以外,在广域网(WAN)中,需要一个统一的IP 地址来标识该 LAN 在整个 Internet 上的位置。
OSPF(Open Shortest Path First,开放式最短路径优先): 一种内部网关协议(Interior GatewayProtocol,IGP),也是广泛使用的一种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。
RIP(Routing Information Protocol,路出信息协议): 一种内部网关协议(Interior GatewayProtocol,IGP),也是一种动态路出协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。
**BGP(Border GatewayProtocol,边界网关协议):**一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路出选择协议,具有高度的灵活性和可扩展性。
URI 和 URL 的区别
**URI(Uniform Resource Identfer)**是统一资源标志符,可以唯一标识一个资源。
**URL(Uniform Resource Locator)**是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即URL 可以用来标识一个资源,而且还指明了如何locate 这个资源。
URI的作用像身份证号一样,URL的作用更像家庭住址一样。
URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
HTTP
从输入URL到页面展示出来中间发生了什么?(重要考点)
上图有一个错误需要注意:是 OSPF 不是 OPSF。ospf)开放最短路径优先OSPF(Open Shortest Path First,协议,是由 Internet 工程任务组开发的路由选择协议
总体来说输入URL后发生过程分为以下几个步骤:
1.在浏览器中输入指定网页的 URL.
2.浏览器通过 DNS 协议,获取域名对应的 IP 地址。
3.浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。
4.浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
5.服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
6.浏览器收到 HTTP 响应报文后,解析响应体中的 HTML,代码,渲染网页的结构和样式,同时根据 HTML中的其他资源的 URL(如图片、CSS、JS等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
7.浏览器在不需要和服务器通信时,可以主动关闭 TCP连接,或者等待服务器的关闭请求。
总结:输入URL--->DNS协议--->获取域名对应IP地址--->TCP--->HTTP请求报文,请求获取网页内容----->服务器收到请求报文,处理请求,返回HTTP相应报文----->浏览器收到HTTP响应报文,解析其中代码,同时根据html中的其他资源的URL如图片等内容再次发起HTTP请求,获取这些资源的内容,直到完全加载完网页内容
HTTP的状态码有哪些?
HTTP状态码作用:描述HTTP请求的结果,比如2XX就代表请求被成功处理

HTTP Header 中常见的字段


HTTP 和 HTTPS 有什么区别
有以下四个方面的区别,如下图:

具体区别:
端口号: HTTP 默认是 80,HTTPS 默认是 443。
URL前缀: HTTP的URL前缀是http://,HTTPS的URL前缀是https://。
安全性和资源消耗: HTTP 协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTE安全性没有 HTTPS 高,但是 HTTPS 比HTTP耗费更多服务器资源。**SEO(搜索引擎优化):**搜索引擎通常会更青睐使用 HTTPS 协议的网站,因为 HTTPS 能够提供更高的安全性和用户隐私保护。使用 HTTPS协议的网站在搜索结果中可能会被优先显示,从而对SEO产生影响。
HTTP 是不保存状态的协议,如何保存用户状态?
HTTP协议本身是无状态的(stateless)。 这意味着服务器默认情况下无法区分两个连续的请求是否来自同一个用户,或者同一个用户之前的操作是什么。这就像一个"健忘"的服务员,每次你跟他说话,他都不知道你是谁,也不知道你之前点过什么菜。
但在实际的 Web应用中,比如网上购物、用户登录等场景,我们显然需要记住用户的状态(例如购物车里的商品、用户的登录信息)。为了解决这个问题,主要有以下几种常用机制:


总结来说,虽然HTTP不身是无状态的,但通过Cookie+Session、URL重写或 Token 等机制,我们能够有效地在 Web 应用中跟踪和管理用户状态。其中,Cookie+Session 是最传统也最广泛使用的方式,而 Token-
based 认证则在现代Web应用中越来越受欢迎。