0
点赞
收藏
分享

微信扫一扫

[面试必背]网络篇

cnlinkchina 2022-04-24 阅读 26
java

网络

网络

OSI七层模型

应用层
表示层
会话层
传输层
网络层
数据链路层
物理层

网络通信

IP地址
端口
协议

进程通信

消息传递(管道、消息队列)
共享内存(semophore信号量)
信号:通知接收进程有某事已经发生
套接字,远程调用(RPC)

TCP

面向连接

三次握手

		C和S处于关闭状态,C主动向S发送连接请求,生成序列号seq=x,C处于SYN-SEND(同步已发送)状态
		S同意建立连接,向C发送确认报文,并生成序列号seq=y,ack=x+1,S处于同步收到状态
		C收到确认报文后,检查ack=x+1是否正确,再向S发送确认报文,seq=x+1,ack=y+1,C处于连接成功状态
	不能两次握手原因
		防止旧的重复连接引起连接混乱
		C向S发送请求,由于网络原因,请求阻塞,S一直未收到,C又向S发送连接请求,建立连接后传输完数据连接关闭,S收到第一次阻塞连接请求,以为是C发送的新的请求,S发送确认给C,C没有发送新的请求,所以会忽略,而S一直处于建立连接状态,会给S造成浪费
	不能四次握手原因
		三次握手已经可以确认是同一连接

四次挥手

		C主动向S发送FIN请求,seq=u,C进入FIN-WAIT-1状态
		S收到后,发送确认码ACK给C,seq=v,ack=u+1,S处于CLOSE-WAIT状态,C处于FIN-WAIT-2状态,继续将数据发送给C
		数据发送完成后,S发送FIN给C,seq=w,ack=u+1,S处于LAST-ACK状态
		S收到FIN请求,发送ACK应答,seq=u+1,ack=w+1,C处于TIME-WAIT状态
	不能三次挥手原因
		TCP半关闭特性,C关闭后S还能向C发送数据
传输可靠(数据无丢失、无重复、无错误、无失序)
一对一通信
速度慢
对数据准确度要求高,实时性不强,适用于文件传输
面向字节流,无限制,没有消息保护边界,需要粘包拆包。

客户端给服务端发送两个数据包,服务端可能只接收到一个,写入数据大于套接字缓冲区,会发生拆包;写入数据小于套接字缓冲区,需要粘包。
头部加数据包长度
数据包封装为固定长度,不足补0
特殊字符区分

UDP

无连接,发送即结束,没有重传机制,只需发送,不管对方是否接收
不可靠传输
支持一对一,一对多,多对一交互通信
实时性要求高,适用于实时应用,如语音、视频、直播等
面向报文,数据打包传输,有消息保护边界,头部有传输报文长度,每个消息都是独立的,不需要粘包拆包

Socket

套接字,计算机进行通信的一种方式

Netty

异步事件驱动的网络应用程序框架,ElasticSearch和Dubbo使用的Netty
采用异步通信NIO的方式
	一个IO线程可以处理多个C的连接和读写
零拷贝
	使用堆外内存直接进行socket读写,不需要进行字节缓冲区的二次拷贝
	往服务器发送网络请求时,要经过四次拷贝,操作磁盘和网络的一般不允许用户进程直接访问,需要内核来处理
高性能序列化框架
	对protobuff支持,二进制流传输
举报

相关推荐

0 条评论