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的必然行为。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!