治疗焦虑,迷茫,可以用同仁堂的-忙,见效快。
tcp 和 udp的区别?
https://blog.csdn.net/quitozang/article/details/80861376
两者的区别大致如下:
- tcp
面向连接,1对1
的,3次握手建立连接,而udp是支持1对多。 - tcp数据
保证顺序
,流量控制,拥塞控制。所以是面向字节流
,把报文进行拆分,而udp是不会拆报文。
三次握手 4次挥手
https://www.jianshu.com/p/d3725391af59
握手:
1)Client:嘿,李四,是我,听到了吗?
2)Server:我听到了,你能听到我的吗?
3)Client:好的,我们互相都能听到对方的话,我们的通信可以开始了。
挥手:
1)Client:我所有东西都说完了
2)Server:我已经全部听到了,但是等等我,我还没说完
3)Server:好了,我已经说完了
4)Client:好的,那我们的通信结束
拆包粘包
拆包
就是把一个报文的 东西分几次传输
粘包
就是一此传输 里包含几次的报文内容
- 如何处理的
- 消息定长 发送方不够 加空格(没用)
- 包 后加换行符(ftp)
- 分消息头 消息体 消息头 定长 并写好 本消息的总大小 (http)
长短链接
短连接就是访问一次就是释放了,长连接是会保持链接,http1.1默认就是长连接,复用链接减少建立销毁链接的开销。
TCP拥塞控制 流量控制
https://mp.weixin.qq.com/s/ALiTd4foUWFoNVE88WWOYw
- 流量控制 报文大缓冲区小,需要拆包。
-
拥塞控制 是整个链路的控制 相当与交通指挥 出现阻塞 进行控制 避免路由器
image.png
io相关概念
同步异步
服务端会不会主动回调。
阻塞非阻塞
是指io流程中第一步是否阻塞让客户端等待。
io流程:
服务端返回给客户端数据,大致分为两步:
- DMA从网卡或者硬盘copy到内核 。
- 从内核copy到客户端。
java中的nio
https://www.jianshu.com/p/191041073919
selector 监听多个通道上的事件。
channel 一个通道对应一个连接,会有读,写,创建连接
等事件。
FileChannel是阻塞的。
buffer 是一个对数据的一个封装。
nio的几种Reactor模式(selector是轮询监听,works是干活的线程)
-
reactor单线程
一个线程,selector和works的活都是它干。
代表:node.js redis
-
主从reactor多线程
selector分为主从,主负责建立连接,从负责监听channel上后续的读写事件。
代表:netty tomcat kafka 。。
-
reactor多线程
没啥好说的。。
异步非阻塞
https://www.jianshu.com/p/df1d6d8c3f9d
AIO又称为NIO2.0,在JDK7才开始支持。
一句话不好用,性能没提升,封装的也不好。
selector poll epoll区别
https://baijiahao.baidu.com/s?id=1611547498841608701&wfr=spider&for=pc
-
selector
套接字放入一个 集合中1024容量 不断循环 来判断套接字上的事件 -
poll
不限制集合数量 -
epoll
不限制集合数量 基于内核的反射回调机制 来实现监听事件 代替循环
网友评论