基础知识
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的必然行为。