又开始面试了,2023太难了,大概总结下【网络相关】的知识,便于自己理解吧

1、osi五层机构
	应用层【接口、数据安全、连接建立】
	传输层【定义数据传输协议端口号tcp,udp】
	网络层【逻辑寻址ip、域名】
	数据链路层【底层mac地址访问】
	物理层【物理连接】
2、tcp的三次握手、四次挥手
	三次握手:连接服务端的指定端口
	1.第一次,发送syn标志,初识序列号x
	2.第二次,服务器发回确认的ack应答,syn,ack都为1,发送序列号y,将确认的序列号x+1
	3.第三次,客户端再次发送确认ack,syn标志为0,ack为1,服务器发送ack+1,发送对方z,确认序列号为y+1
	最终要的结果是x+1=y+1,那么就确认好了
	四次挥手:客户端和服务器都可主动挥手
	客户端挥手fin同时close_wait_1
	服务端接受fin发出断开信号ack,同时序列号+1,进入close_wait
	服务端挥手fin同时进入last_ack状态
	客户端接受fin后,进入time_wait,接着发送一个ack到服务端,确认序列号为+1,服务端进入closed
3、socket是一种特殊的文件,保留了读写io,打开,关闭,三种状态
4、https的请求过程
	https=http+ssl/tls
	tls是ssl的3.0版本
	1.客户端发送https请求,
	2.服务端公钥私钥,返回数字证书含公钥
	3.客户端验证数字证书,验证通过产生私钥对称密钥,用公钥加密
	4.服务器用私钥解密,得到客户端密钥,通过客户端密钥返回内容
	5.客户端用自己的密钥解密
5、tcp连接数,理论上限65535
6、tcp是一个面向连接的可靠的,基于字节流的传输层协议
	udp是一个面向无连接的传输层协议
	tcp三大核心:面向连接、可靠性【有状态,可控制】、面向字节流
	udp 无状态、不可控的、基于数据包
7、get请求和post请求的区别
	1.get请求是把信息放到url中,post请求将信息放到请求体中
	2.get请求携带的信息有限,post请求没有限制
	3.get请求把数据放到url数据不安全,post也差不多,https才会对数据加密
	4.从数据库层面,get请求符合幂等性和安全性【指没有对数据库数据修改】,get只用户数据的查看,post请求会涉及到数据在服务器上的更改
	5.get请求数据可以被缓存,浏览器可以记录为标签,post请求不具备,get请求被cdn缓存,可以减少web服务器的压力
8、netty如何处理粘包拆包
	1.操作系统在发送tcp数据的时候,底层会形成一个缓存区,没有达到缓存区大小的tcp会多个请求一块合并发送,超过了缓存区大小的tcp就会将其拆分成多次发送
	2.解决方案
		常用:
		每个包都固定大小,数据长度不足的用空格补齐
		每个包的末尾使用固定的分隔符,如果一个包被拆了,则等待先一个包发送过来之后找打哦其中的分隔符,然后对其拆分后的头部部分与前一个包的剩余部分进行合并	
		将消息分为头部和消息体,在头部中保存当前整个消息的长度,只有读取到足够长度的消息之后才算一个完整的消息
		通过自定义协议进行粘包拆包
	3.netty提供的粘包拆包解决方案
		FixedLengthFrameDecoder可以设定参数,固定长度
		LineBasedFrameDecoder和DelimiterBasedFrameDecoder,设置分隔		
		LengthFieldBasedFrameDecoder和LengthFieldPrepender,生成的数据包中添加一个数据长度
		MessageToByteEncoder会将响应数据编码为一个bytebuf对象,ByteToMessageDecoder会将接收到的bytebuf转换为某个对象数据,可以实现自定义的拆包粘包



你可能感兴趣的:(面试,面试,网络)