计算机网络体系结构 是指计算机网络 层次结构 和 各层协议 的集合。
①物理层:在物理媒体上为数据端设备透明的传输原始比特流,为数据链路层提供数据传输服务。
②数据链路层:采用 差错控制 与 流量控制 方法,使有差错的物理线路变成无差错的数据链路。(帧同步、寻址)
③网络层:对分组进行 路由选择 ,并实现流量控制、拥塞控制、差错控制和网际互联等。
④传输层:为端到端连接 提供可靠的传输服务 ,并提供流量控制、差错控制、数据传输管理等服务。
⑤会话层:负责维护两个对话主机之间连接的建立、管理和终止,以及数据的交换。
⑥表示层:负责通信系统之间的数据格式变换、数据加密与解密、数据压缩与恢复。
⑦应用层:实现协同工作的应用程序之间的通信过程,通过不同应用软件提供多种服务。
HTTP协议:Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议;(万维网服务器 --> 本地浏览器)
HTTP是 基于TCP的可靠通信,应用层,基于客户端与服务端的通信。协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传。
TCP协议:Transmission Control Protocol(传输控制协议),是一种面向连接的、可靠的传输层协议,并且支持全双工通信;传输速度慢。
UDP协议:User Datagram Protocol(用户数据报协议),一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务;传输速度快。
① ARP
地址解析协议,即ARP(Address Resolution Protocol),是 根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
我们在浏览器输入百度网址后,①首先使用DNS域名解析解析输入域名,将其转换为对应的IP地址(首先会查找DNS缓存中是否存在搜索网址对应的IP地址,存在直接返回,反之继续解析);②浏览器获取到IP地址后,使用一个随机端口向服务器端口发起TCP连接请求,通过TCP 3次握手,建立TCP连接;③连接建立后,浏览器发送HTTP GET 请求(请求HTML文件);④服务器收到请求后,返回一个HTTP响应报文;⑤浏览器接收到服务器发送的HTTP响应报文后(实际为一个HTML文件),开始显示HTML;⑥TCP 4次挥手断开连接。
前端经典面试题:从输入URL到页面加载发生了什么?
浏览器从输入网址到页面展示的过程
假设你要查询 www.baidu.com 的 IP 地址:
HTTP,HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
①基于 TCP协议:面向连接,安全。
②基于 请求-响应 模型:一次请求对应一次响应。
③HTTP协议是 无状态 的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
RPC,全称Remote Procedure Call, 即远程过程调用。
主要作用是 屏蔽网络编程细节 ,实现调用远程方法就像调用本地方法(同一个进程中的方法)一样的体验。同时屏蔽底层网络通信的复杂性,让我们更加专注业务逻辑的开发。
RPC只是一种概念,一种设计,为了解决不同服务之间的调用问题,它一般会包括 传输协议 和 序列化协议 。
但是,HTTP是一种协议,RPC框架可以使用HTTP协议作为传输协议或者直接使用TCP作为传输协议,使用不同的协议一般也是为了适应不同的场景。
RPC框架功能更齐全。
请求数据分为3部分:
①请求行: 请求数据的第一行。其中GET表示请求方式,/ 表示请求资源路径,HTTP/1.1表示协议版本。
②请求头: 第二行开始,格式为key: value形式。
③请求体: POST请求的最后一部分,存放请求参数。(GET没有请求体)
响应数据分为3部分:
①响应行: 响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述。
②响应头: 第二行开始,格式为key: value形式。
③响应体: 最后一部分。存放响应数据。
状态码大全链接: https://cloud.tencent.com/developer/chapter/13553
Post和Get的共同点:
①都是HTTP协议中的两个发送请求的方法,底层都是 基于TCP/IP协议。
Post和Get的区别:
①post传递数据,不需要在url中显式出来,而get方法需要在 url中显式 。
②post传输的 数据量大,可以达到2M ,而get传参受url长度限制,最多传递1024字节。
③post请求是 将数据传输到服务器端 ,而get请求是为了 从服务器端取数据(为什么get也能传参?为了告诉服务端需要什么数据)
④post在真正接受数据之前会 先将请求头发送给服务器进行确认,然后才真正发送数据。
Get和Post的区别:
①get传递的参数在页面可以看见,安全性低。(post更安全,不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
②GET请求请求 参数在请求行中,没有请求体 。POST请求请求 参数在请求体中 。
③get传参 速度更快 。
④get不能 传递中文,会乱码 ,而post不会出现乱码问题。
GET(对服务器获取资源的简单请求)、POST(向服务器提交数据请求)、PUT(修改指定资源)、DELETE(删除URL标记的指定资源)、CONNECT(用于代理服务器)、TRANCE(主要用于回环测试)、OPTIONS(返回所有可用的方法)、HEAD(获取url标记资源的首部)。
短连接: 客户端和服务端通信一次,建立一次连接,用完就断开;
长连接: 客户端和服务端通信完不断开,继续使用建立的连接。
HTTP/3主要有两大变化,传输层基于UDP、使用QUIC保证UDP可靠性。
HTTP/2存在的一些问题,比如重传等等,都是由于TCP本身的特性导致的,所以HTTP/3在QUIC的基础上进行发展而来,QUIC(Quick UDP Connections)直译为快速UDP网络连接,底层使用UDP进行数据传输。
HTTP/3主要有这些特点:
URI: 人的身份证号,唯一标识一个人;
URL: 人的家庭住址,通过URL可以找到这个人。
可以使用Cookie记录Session的标识(SessionId)。
分布式环境下,客户端请求经过负载均衡,可能会分配到不同的服务器上,假如一个用户的请求两次没有落到同一台服务器上,那么在新的服务器上就没有记录用户状态的Session。
这时候怎么办呢?
可以使用Redis等 分布式缓存来存储Session,在多台服务器之间共享。
有可能客户端无法使用Cookie,比如浏览器禁用Cookie,或者客户端是安卓、IOS等等。
这时候怎么办?SessionID怎么存?怎么传给服务端呢?
首先是SessionID的存储,可以使用客户端的本地存储,比如浏览器的 sessionStorage。
接下来怎么传呢?
三次握手目的: 通信双方确认自己与对方的发送与接收是正常的。
TCP是面向流,没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
UDP在传输数据之前不需要先建立连接,远程主机的运输层在接收到UDP报文后,不需要确认,提供不可靠交付。总结就以下4点:
更准确地说,DNS既使用TCP又使用UDP。
当进行区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多,而TCP 允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的TCP。
当 客户端想DNS服务器查询域名(域名解析)的时候,一般返回的内容不会超过UDP报文的最大长度,即512字节,用UDP传输时,不需要创建连接,从而大大提高了响应速度 ,但这要求域名解析服务器和域名服务器都必须自己处理超时和重传从而保证可靠性。(①及时的传递数据;②无需建立连接;③无连接状态;④分组头部开销小。)
ip协议的定义
IP协议(Internet Protocol)又被称为 互联网协议 ,是支持网间互联的数据包协议,工作在 网际层 ,主要目的就是 为了提高网络的可扩展性。
通过网际协议IP,可以把参与互联的,性能各异的网络看作一个统一的网络。
和传输层TCP相比,IP协议是一种无连接/不可靠、尽力而为的数据包传输服务,和TCP协议一起构成了TCP/IP协议的核心。
ip协议的作用?
网络层协议负责提供主机间的逻辑通信;传输层协议负责提供进程间的逻辑通信。
一个IP地址在这个互联网范围内是惟一的,一般可以这么认为,IP地址 = {<网络号>,<主机号>}。
IP地址分为A,B,C,D,E五大类:
A类地址(1~126):以0开头,网络号占前8位,主机号占后面24位。
B类地址(128~191):以10开头,网络号占前16位,主机号占后面16位。
C类地址(192~223):以110开头,网络号占前24位,主机号占后面8位。
D类地址(224~239):以1110开头,保留为多播地址。
E类地址(240~255):以1111开头,保留位为将来使用。
我们知道,IP地址有32位,可以标记2的32次方个地址,听起来很多,但是全球的网络设备数量已经远远超过这个数字,所以IPV4地址已经不够用了,那怎么解决呢?
ARP协议,Address Resolution Protocol,地址解析协议,它是用于 实现IP地址到MAC地址的映射 。
MAC地址是数据链路层和物理层使用的地址,是写在网卡上的物理地址,用来定义网络设备的位置,不可变更。
IP地址是网络层和以上各层使用的地址,是一种逻辑地址。IP地址用来区别网络上的计算机。
节省内存。
如果我们只使用MAC地址进行寻址的话,我们需要路由器记住每个MAC地址属于哪个子网,不然一次路由器收到数据包都要满世界寻找目的MAC地址。而我们知道MAC地址的长度为48位,也就是最多共有2的48次方个MAC地址,这就意味着每个路由器需要256T的内存,显然是不现实的。
和MAC地址不同,IP地址是和地域相关的,在一个子网中的设备,我们给其分配的IP地址前缀都是一样的,这样路由器就能根据IP地址的前缀知道这个设备属于哪个子网,剩下的寻址就交给子网内部实现,从而大大减少了路由器所需要的内存。
只有当设备连入网络时,才能根据他进入了哪个子网来为其分配IP地址,在设备还没有IP地址的时候,或者在分配IP的过程中。我们需要MAC地址来区分不同的设备。
IP地址可以比作为地址,MAC地址为收件人,在一次通信过程中,两者是缺一不可的。
ICMP(Internet Control Message Protocol),网际控制报文协议。
ping,Packet Internet Groper,是一种 因特网包探索器,用于测试网络连接量的程序。Ping是工作在TCP/IP网络体系结构中 应用层 的一个服务命令,主要是向特定的目的主机发送ICMP(Internet Control Message Protocol 因特网报文控制协议)请求报文,测试目的站是否可达及了解其有关状态。
一般来说,ping可以用来检测网络通不通。它是基于ICMP协议(网际控制报文协议)工作的。假设机器A ping 机器B,工作过程如下:
网络安全攻击主要分为两种类型,被动攻击和主动攻击:
被动攻击:是指 攻击者从网络上窃听他人的通信内容 ,通常把这类攻击称为截获,被动攻击主要有两种形式:消息内容泄露攻击和流量分析攻击。由于攻击者没有修改数据,使得这种攻击很难被检测到。
主动攻击:直接 对现有的数据和服务造成影响 ,常见的主动攻击类型有:
①篡改:攻击者故意篡改网络上送的报文,甚至把完全伪造的报文传送给接收方。
②恶意程序:恶意程序种类繁多,包括计算机病毒、计算机蠕虫、特洛伊木马、后门入侵、流氓软件等等。
③拒绝服务Dos:攻击者向服务器不停地发送分组,使服务器无法提供正常服务。
DNS劫持即域名劫持,是通过 将原域名对应的IP地址进行替换,从而使用户访问到错误的网站,或者使用户无法正常访问网站 的一种攻击方式。
对称加密: 指加密和解密使用同一密钥,优点是运算速度较快,缺点是如何安全将密钥传输给另一方。常见的对称加密算法有:DES、AES等。
非对称加密: 指的是加密和解密使用不同的密钥(即公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。常见的非对称加密算法有:RSA。
RSA
采用非对称加密的方式,采用公钥进行加密,私钥解密的形式。其私钥长度一般较长,由于需要大数的乘幂求模等运算,其运算速度较慢,不合适大量数据文件加密。
AES
采用对称加密的方式,其 秘钥长度最长只有256个比特 ,加密和解密速度较快,易于硬件实现。由于是对称加密,通信双方在进行数据传输前需要获知加密密钥。