web基础和面试题

基础知识

socket网络通信\TCP \HTTP协议

ARP地址解析协议:是根据IP地址获取物理地址的一个TCP/IP协议。

http协议和TCP协议的区别:

1、http协议是应用层的协议,TCP协议是传输层的协议,http协议是建立是TCP协议之上的,http是无状态的的短链接,而TCP是有状态的长链接。

2、HTTP规定了数据传输的格式,以及能够处理请求响应,而TCP仅仅负责传送数据包。

3纯裸TCP是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界,于是就有了各种协议如HTTP

RPC远程过程调用协议:它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。。

ICMP互联网控制消息协议:主要用于在主机与路由器之间传递控制信息,包括报告错误、状态信息等。

DNS域名系统:主要负责记录互联网中主机名和该主机IP地址之间的映射关系。

FIN(finish结束)

物数网传会表应

应用层

SYN(synchronous建立联机) ACK(acknowledgement 确认) seq序列号 socket套接字

传输控制层

65535个端口号

两端(服务端与客户端)利用四元组(ip+port ip+port)进行通讯

负载均衡:

网络层

ICMP(互联网控制消息协议)是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息,包括报告错误、状态信息等。

ICMP封装在IP数据报的数据部分。ICMP是IP协议的必需的一个部分。ICMP可用来进行拥塞控制。

例:Ann和BilI从他们的兄弟姐妹那里收集邮件并将邮件递送给他们。

网络层协议=邮递服务(包括邮递员)

传输层协议=Ann和Bill

RPC(Remote Procedure Call)

效率高、消耗低、负载均衡。ID映射、序列化、网络传输协议。

Q:RPC是什么?

RPC(Remote Procedure Call)远程过程调用。它本身并不是一个具体的协议,而是一种调用方式。RPC可以像调用本地方法那样调用远端方法。

RPC它假定某些协议的存在,例如TCP/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。

工作原理

1、函数映射ID。维护一个 {函数 <--> ID} 对应表,相同的函数对应的ID相同。

2、序列化和反序列化。客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。

3、网络传输协议。客户端和服务端是通过网络连接的,需要有一个网络传输层。gRPC用了HTTP2。

Q:为什么要使用RPC?

在双端交互中,我们当然可以使用RPC,但浏览器不仅要能访问自家公司的服务器,还需要访问其他公司的网站服务器,因此它们需要有个统一的标准去交流。那个标准就是HTTP。

所以正常来说,都用HTTP就可以了。探究具体原因,还得看到rpc和http的区别。

http协议和rpc协议比较

总结:RPC主要用于公司内部服务调用,传输效率高(TCP/HTTP2),性能消耗低(二进制传输),服务治理方便。

服务发现:类似于DNS。RPC有专门的中间服务(如etcd和redis)去保存服务名和IP信息。

GRPC:

grpc使用的是http2协议,可以实现多路复用的长连接,效率更高。

grpc使用的protobuf编解码更高效。

gRPC 四种服务类型:一元 RPC、服务端流式 RPC、客户端流式 RPC、双向流式 RPC

传入一个/多个请求对象,返回一个/多个返回对象

http协议和https协议区别

由来:https解决了http的安全问题

HTTPS是在HTTP的基础上增加了SSL层,服务器和客户端传输数据前先采用非对称加密算法生产一个秘钥,再用这个秘钥使用对称加密算法加密要传输的数据,这样做即保证了秘钥的安全,有提高了数据加密效率。

http get跟head

head只请求页面的首部。多用来判断网页是否被修改和超链接的有效性。

get请求页面信息,并返回实例的主体。

head头:

Genaral Headers(常规头):

Request URL:请求的URL

Request Method:请求方法(get、post、head、options(预检请求))

Status Code: 状态码

Remote Address: 远程地址

Referrer Policy: 来源管制(unsafe-url)

Request Headers(请求头):

Response Headers(响应头):

TCP

纯裸TCP是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界,于是就有了各种协议如HTTP

TCP的几种常见状态:

LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。

ESTABLISHED :表示TCP连接已经成功建立。

CLOSE_WAIT :表示正在等待关闭。

TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。

主动发送fin关闭的一方,在4次挥手最后一次要等待一段时间,我们称这段时间为2MSL。TIME_WAIT状态的存在有两个理由:

1、保证当最后一个ack丢失后,能收到对端重传的fin包.

2、保证ack包消失,不会影响下一个连接.

TCP协议可靠的原因:

有反馈机制:客户端往服务端发送请求,服务端必须返回响应。

HTTP

HTTP1.0,HTTP1.1,HTTP2.0对比

无状态:就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。

HTTP1.0:无状态、无连接

HTTP1.1: 1.字符串传输 2.持久连接,支持长链接 3.请求管道化 4.增加缓存处理 5.增加Host字段、支持断点传输等


http2:多路复用、二进制编码、首部(报头)压缩、服务推送。

多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。

二进制编码减少了传输量。新的压缩算法,减小首部大小。

客户端请求一个资源,服务端把客户端可能需要请求的其他资源一起主动发给它,减少了交互次数。另外服务端还能缓存这样的资源,提升效率。

http长连接keep-alive:后续的Http消息可以复用这个连接继续传输消息。减少短连接的消耗。

timout时间值意味着:一个http产生的tcp连接在传输完最后一个响应后,还需要hold住timeout秒后,才开始关闭这个连接。

TCP 的 Keepalive?

HTTP 长连接是由「应用程序」实现的,TCP 保活机制是由「内核」实现的。

TCP 的 Keepalive是TCP 的保活机制,和长连接不一样。如果两端的TCP 连接一直没有数据交互,触发机制,那么内核里的 TCP 协议栈就会发送探测报文。

长连接一次只能一个请求/应答消息,但可以多个http请求排队请求。

I/O 多路复用:只使用一个进程来维护多个 Socket.,就是多个http请求/应答同时使用一个链接。

面试题

服务器如何找到唯一的客户端(程序之间进行数据传输的协议?)

网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程)。这样利用四元组(ip+port ip+port)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

socket:网络套接字是IP地址与端口的组合。套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。

前后端是使用什么协议进行交互的?

osi七层网络协议(物数网传会表应),tcp,udp

tcp与udp区别,udp优点,适用场景

TCP是有三个特点,面向连接、可靠、基于字节流

服务对象:

TCP 是一对一的两点服务,即一条连接只有两个端点。

UDP 支持一对一、一对多、多对多的交互通信

使用场景:

TCP常用于:FTP 文件传输;HTTP / HTTPS;

UDP常用于:包总量较少的通信,如 DNS 、视频、音频等多媒体通信;广播通信;

那你知道TCP协议的过程吗?

三次握手,四次挥手。TCP协议的运行可划分为三个阶段:连接创建、数据传送和连接终止

第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位数据段给主机B,向主机B 请求建立连接。

第二次握手:主机B 收到主机A的请求后,用一个带有确认应答和同步序列号标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应我

第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段。这样3次握手就完成了,主机A和主机B 就可以传输数据了。

第一次:当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 ;

第二次:主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;

第三次:由B 端再提出反方向的关闭请求,将FIN置1 ;

第四次:主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.。

请求方法知道多少?GET 和 POST

GET 和 POST 方法没有本质区别,仅报文格式不同。

GET 和 POST 只是 HTTP 协议中两种请求方式,本质都是TCP连接。

报文格式上,不带参数时,区别仅仅是方法名不同。带参数时,我们约定好GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中。我们也可以反过来写,但需要服务端支持。

他们都是不安全的,因为 HTTP 在网络上是明文传输,只要抓包,就能获取数据报文。要想安全传输,就只有加密,使用 HTTPS。

GET 方法参数长度有限制,是因为服务器处理长 URL 要消耗比较多的资源,为了性能和安全而做出限制。

POST 方法部分情况下会产生两个TCP数据包。Header 和 Body 分开发送是部分浏览器或框架的请求方法,不属于 Post的必然行为。

相关推荐
excel4 分钟前
webpack 核心编译器 十四 节
前端
excel11 分钟前
webpack 核心编译器 十三 节
前端
腾讯TNTWeb前端团队7 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰10 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪11 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪11 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy11 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom12 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom12 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom12 小时前
React与Next.js:基础知识及应用场景
前端·面试·github