1. TCP建⽴连接的过程。
三次握⼿:
1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认;
2. 第⼆次握⼿(服务器返回syn+ack包给客户端):服务器端收到客户端的syn包,发送syn+ack包给客户端,进⼊syn_recv状态;
3. 第三次握⼿(客服端返回ack包给服务端):客户端收到服务器端的syn+ack包,发送个ack包到服务器端,⾄此,客户端与服务器端进⼊established状态;
4. 握⼿过程中传送的包不包含任何数据,连接建⽴后才会开始传送数据,理想状态下,TCP连接⼀旦建⽴,在通信双⽅的任何⼀⽅主动关闭连接前,TCP连接都会⼀直保持下去。
2. TCP断开连接的过程。
四次挥⼿:
1. 第⼀次挥⼿⼿:主动关闭⽅发送fin包到被动关闭⽅,告诉被动关闭⽅我不会再给你发送数据了;
2. 第⼆次挥⼿⼿:被动关闭⽅收到syn包,发送ack给对⽅,确认序号为收到序号+1;
3. 第三挥⼿:被动关闭⽅也也发送fin包给主动关闭⽅,告诉对⽅我也不会给你发送数据了;
4. 第四次挥⼿:主动关闭⽅收到syn包,发送ack给对⽅,⾄此,完成四次挥⼿;
3. 浏览器发⽣302跳转背后的逻辑?
浏览器在原请求地址的响应的Location域找到要跳转的URI执⾏跳转。
浏览器输⼊URL后发⽣了什么
1.DNS域名解析;
2.建⽴TCP连接;
3.发送HTTP请求;
4.服务器处理请求;
5.返回响应结果;
6.关闭TCP连接;
7.浏览器解析HTML;
8.浏览器布局渲染;
4. HTTP协议的交互流程。 HTTP和HTTPS的差异, SSL的交互流程?
a. Http协议
1、建⽴TCP连接;
2、发送HTTP请求;
3、服务器处理请求;
4、返回响应结果;
5、关闭TCP连接;
b. http三次握⼿:
i. 第⼀次握⼿:客户端发送syn包(syn=j)到服务器,并进⼊SYN_SEND状态,等待服务器确认;
ii. 第⼆次握⼿:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时⾃⼰也发送⼀个SYN包(syn=k),即SYN+ACK包,此时服务器进⼊SYN_RECV状态;
iii. 第三次握⼿:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进⼊ESTABLISHED状态,完成三次握⼿。
c. HTTPS协议
HTTPS协议就是基于SSL的HTTP协议
HTTPS使⽤与HTTP不同的端⼝(HTTPS80 , HTTPSS443)
提供了身份验证与加密通信⽅法,被⼴泛⽤于互联⽹上安全敏感的通信。
1、客户端请求SSL连接,并将⾃⼰⽀持的加密规则发给⽹站。
2、服务器端将⾃⼰的身份信息以证书形式发回给客户端。证书⾥⾯包含了⽹站地址,加密公钥,以及证书的颁发机构。
3、获得证书后,客户要做以下⼯作
- 验证证书合法性
- 如果证书受信任,客户端会⽣成⼀串随机数的密码,并⽤证书提供的公钥进⾏加密。
- 将加密好的随机数发给服务器。
4、获得到客户端发的加密了的随机数之后,服务器⽤⾃⼰的私钥进⾏解密,得到这个随机数,把这个随机数作为对称加密的密钥。(利⽤⾮对称加密传输对称加密的密钥)
5、之后服务器与客户之间就可以⽤随机数对各⾃的信息进⾏加密,解密。注意的是:证书是⼀个公钥,这个公钥是进⾏加密⽤的。⽽私钥是进⾏解密⽤的。公钥任何都知道,私钥只有⾃⼰知道。这是⾮对称加密。⽽对称加密就是钥匙只有⼀把,我们都知道。之所以⽤到对称加密,是因为对称加密的速度更快。⽽⾮对称加密的可靠性更⾼。
客户端请求--服务端发送证书(公钥)--客户端验证证书,并⽣成随机数,通过公钥加密后发送给服务端--服务端⽤私钥解密出随机数--对称加密传输数据。
d. HTTP与HTTPS的区别
1、HTTPS协议需要申请证书。
2、HTTP是明⽂传输;HTTPS使⽤的是具有安全性的SSL加密传输协议
3、HTTP端⼝是80;HTTPS端⼝号是443
4、HTTP连接简单⽆状态;HTTPS由SSL+HTTP协议构件的可进⾏加密传输、身份验证的⽹络协议。
5. Rest和Http什么关系?⼤家都说Rest很轻置,你对Rest⻛格如何理解?
a. Http是⼀种协议,Rest是⼀种软件架构⻛格。
b. URL定位资源,⽤HTTP动词(GET,POST,DELETE,DETC)描述操作。
c. GET表示查询、POST表示新建、PUT表示更新、DELETE表示删除等。
- GET /api/v1/user 获取⽤户列表
- GET /api/v1/user/1 获取ID为1的⽤户
- POST /api/v1/user 新建⽤户
- PUT /api/v1/user/1 更新ID为1的⽤户信息
- DELETE /api/v1/user/1 删除ID为1的⽤户
1、概念:REST(英⽂:Representational State Transfer,简称REST,表现层状态转化),指的是⼀组架构约束条件和原则。满⾜这些约束条件和原则的应⽤程序或设计就是 RESTful。
2、⼀种软件架构⻛格,设计⻛格⽽不是标准,只是提供了⼀组设计原则和约束条件。它主要⽤于客户端和服务器交互类的软件。基于这个⻛格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
3、Restful架构:
(1)每⼀个URI代表⼀种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词(GET⽤来获取资源,POST⽤来新建资源(也可以⽤于更新资源),PUT⽤来更新资源,DELETE⽤来删除资源。),对服务器端资源进⾏操作,实现"表现层状态转化”。
6. TCP的滑动窗⼝协议有什么⽤?讲讲原理。
滑动窗⼝协议是传输层进⾏流控的⼀种措施,接收⽅通过通告发送⽅⾃⼰的窗⼝⼤⼩,从⽽控制发送⽅的发送速度,从⽽达到防⽌发送⽅发送速度过快⽽导致来不及接受。
7. HTTP协议都有哪些⽅法?
1. GET 请求获取由Request-URI所标识的资源。
2. POST 在Request-URI所标识的资源后附加新的数据。
3. HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
4. OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
5. PUT 请求服务器存储⼀个资源,并⽤Request-URI作为其标识。
6. DELETE 请求服务器删除由Request-URI所标识的资源。
7. TRACE 请求服务器回送收到的请求信息,主要⽤语测试或诊断。
8. 交换机与路由器的区别?
1、⼯作层次不同
- 最初的交换机⼯作在OSI模型中的数据链路层,⼯作原理简单
- 路由器⼯作在OSI模型中的⽹络层,得更多协议信息,做更智能的转发决策
2、数据转发所依据的对象不同
- 交换机是利⽤物理地址(MAC地址),确定转发的⽬的地址。(MAC固化硬件,⼀般不可更改)
- 路由器是利⽤IP地址,确定转发的⽬的地址。(IP通常为⽹关或系统⾃动分配的)
3、是否可以分割⼴播域
- 传统的交换机可以分割冲突域,不能分割⼴播域,⽽路由器可以分割⼴播域
- 由交换机连接的⽹段仍然属于同⼀⼴播域,⼴播数据报会在交换机连接的所有⽹段上传播,某些情况导致通信拥和安全漏洞。连接到路由器上的⽹段被分配成不同的⼴播域,所以,⼴播数据不穿过路由器
虽然三层交换机可以分割⼴播域,但是⼦⼴播域之间不能通信,还是需要路由器
4、路由器提供了防⽕墙的服务
路由器仅仅转发特定地址的数据包,不传送不⽀持路由协议的数据包,不传送未知⽬标⽹络数据包,从⽽可以防⽌⼴播⻛暴
5、表
⼆层交换机上存在MAC表,三层交换机上存在路由表、MAC表、ARP表,路由器上存在路由表和ARP表。
总之,交换机在具体的城域⽹中扮演着VLAN透传的⻆⾊,就是桥。路由器的每⼀个端⼝都是⼀个独⽴的⼴播域和冲突域,⽽交换机是只有⼀个⼴播域和端⼝数量的冲突域。
9. Socket⽹络通信、NIO流以及多线程处理技术,Netty、Mina?
1、socket⽹络通信:
NIO流以及多线程处理技术:
- BIO:阻塞式,线程池初始时创建⼀定量线程,超过则等待;
- NIO:⾮阻塞式,不同的线程⼲专业的事情,提⾼系统吞吐量;
- NIO+异步处理:让少量的线程做⼤量的事情;
2、Mina:Apache Mina是⼀个能够帮助⽤户开发⾼性能和⾼伸缩性⽹络应⽤程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。采⽤⾮阻塞⽅式的异步传输,⽀持批量传输数据。mina框架简单⾼效,完成了底层的线程管理,内置编码器能够满⾜⼤多数⽤户的需求,省去了消息编码和解码的⼯作。
3、Netty:本质是JBoss开发的⼀个jar包,⽬的是开发⾼性能、⾼可靠性的⽹络服务和客户端服务;提供异步⾮阻塞的、事件驱动的⽹络应⽤程序的NIO框架和⼯具;处理socket;通过Future-Listener机制,⽤户可以⽅便的主动获取或者通过通知机制获得IO操作结果。
10. http协议(报⽂结构,断点续传,多线程下载,什么是⻓连接)
a. 概念:
i. HTTP协议是Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议。
ii. HTTP是⼀个基于TCP/IP通信协议来传递数据(HTML ⽂件, 图⽚⽂件, 查询结果等)。
iii. HTTP是⼀个属于应⽤层的⾯向对象的协议,由于其简捷、快速的⽅式,适⽤于分布式超媒体信息系统。它于1990年提出,经过⼏年的使⽤与发展,得到不断地完善和扩展。⽬前在WWW中使⽤的是HTTP/1.0的第六版,HTTP/1.1的规范化⼯作正在进⾏之中,⽽且HTTP-NG(Next Generation of HTTP)的建议已经提出。
iv. HTTP协议⼯作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
b. 主要特点:
1、简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。每种⽅法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模⼩,因⽽通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
3.⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采⽤这种⽅式可以节省传输时间。
4.⽆状态:HTTP协议是⽆状态协议。⽆状态是指协议对于事务处理没有记忆能⼒。缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。
5、⽀持B/S及C/S模式。
11. get与post区别
1. 表单的method如果为get,那么所有的参数信息都会显示在浏览器的地址栏,当我们使⽤浏览器地址栏输⼊⽹址的⽅式来发送请求时,那么该请求⼀定是get⽅式
2. 对于get⽅式,底层是将所有参数附加在请求资源的后⾯⼀起传递的,对于post⽅式,底层是将所有参数附加在请求参数的最后⼀⾏的下⼀⾏的下⼀⾏
Get请求的数据是被附在url之后(HTTP协议头中),POST请求数据则放置在HTTP包的包体head中;
3. 对于get,post⽅式,servlet不同处理:doGet(),doPost();4、浏览器处理:重复访问使⽤GET⽅法请求的⻚⾯,浏览器会使⽤缓存处理后续请求。使⽤POST⽅法的form提交时,浏览器基于POST将产⽣永久改变的假设,将让⽤户进⾏提交确认。
12. Nginx性能调优:
1、增加同时打开⽂件数open files数量;
2、处理⼤量静态⽂件的磁盘I/O时(此时worker进程是单线程的),增加CPU核⼼数Worker Processes数量,提⾼计算能⼒;
3、如果⽹站流量很⾼,则可以提升worker进程连接数Worker Connections(默认1024);
4、控制keep alive在10s-20s之间,减少连接的时间开销;
5、合理设置open file cache时间提⾼处理效率;
6、提⾼⽹路带宽;
7、开启压缩传输数据gzip,设置压缩级别gzip_comp_level为1-2,再⾼效果不明显并且浪费CPU了;
8、扩展机器数量。
13. rpc和http的区别,使⽤场景:
区别:
传输协议
- RPC,可以基于TCP协议,也可以基于HTTP协议
- HTTP,基于HTTP协议
传输效率
- RPC,使⽤⾃定义的TCP协议,可以让请求报⽂体积更⼩,或者使⽤HTTP2协议,也可以很好的减少报⽂的体积,提⾼传输效率
- HTTP,如果是基于HTTP1.1的协议,请求中会包含很多⽆⽤的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为⼀个RPC来使⽤的,这时标准RPC框架更多的是服务治理
性能消耗,主要在于序列化和反序列化的耗时
- RPC,可以基于thrift实现⾼效的⼆进制传输
- HTTP,⼤部分是通过json来实现的,字节⼤⼩和序列化耗时都⽐thrift要更消耗性能
负载均衡
- RPC,基本都⾃带了负载均衡策略
- HTTP,需要配置Nginx,HAProxy来实现
服务治理(下游服务新增,重启,下线时如何不影响上游调⽤者)
- RPC,能做到⾃动通知,不影响上游
- HTTP,需要事先通知,修改Nginx/HAProxy配置
总结:RPC主要⽤于公司内部的服务调⽤,性能消耗低,传输效率⾼,服务治理⽅便。HTTP主要⽤于对外的异构环境,浏览器接⼝调⽤,APP接⼝调⽤,第三⽅接⼝调⽤等。