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的必然行为。

相关推荐
潜意识起点15 分钟前
精通 CSS 阴影效果:从基础到高级应用
前端·css
奋斗吧程序媛19 分钟前
删除VSCode上 origin/分支名,但GitLab上实际上不存在的分支
前端·vscode
IT女孩儿29 分钟前
JavaScript--WebAPI查缺补漏(二)
开发语言·前端·javascript·html·ecmascript
m0_748256563 小时前
如何解决前端发送数据到后端为空的问题
前端
请叫我飞哥@3 小时前
HTML5适配手机
前端·html·html5
@解忧杂货铺5 小时前
前端vue如何实现数字框中通过鼠标滚轮上下滚动增减数字
前端·javascript·vue.js
咕德猫宁丶5 小时前
探秘Xss:原理、类型与防范全解析
java·网络·xss
黑子哥呢?5 小时前
Linux---防火墙端口设置(firewalld)
linux·服务器·网络
hellojackjiang20116 小时前
开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
网络·即时通讯·im开发·mobileimsdk-鸿蒙端
F-2H6 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++