网络结构体系和两种运输协议
五层网络体系结构的各层的要点?
物理层:在物理媒体上传送比特流。
数据链路层:在两个相邻结点间(主机和路由器或路由器和路由器之间)的链路上传送以帧为单位的数据。
网络层:负责将分组从源主机(按照合适的路由)通过中间若干路由器的转发传送到目的主机。
运输层: 负责主机中两个进程之间的逻辑通信(端到端通信)。
应用层: 通过应用进程间的交互来实现特定网络应用,直接为用户或应用进程提供特定的应用服务,如文件传输,电子邮件等
TCP和UDP的主要区别,为什么因特网要提供这两种不同的运输协议?
TCP提供面向连接,按序可靠的字节流服务(面向字节流),有流量控制和拥塞控制。
UDP提供无连接,不可靠的数据报服务(面向报文)。
IP报文在传送过程中有可能出错,丢失或失序,因此需要运输层为这类应用提供可靠的数据传送服务,但对于实时的多媒体应用,如实时音频/视频他们能够承受一定程度的数据丢失,为实现可靠数据传输,运输层协议必须增加很多复杂的机制,而这些机制非但不能为这些多媒体应用带来明显的好处,而且会带来一些不利因素,因此单一的运输曾服务很难满足所有应用需求
CAS的缺点主要有3点:
1.ABA问题:ABA的问题指的是在CAS更新的过程中,当读取到的值是A,然后准备赋值的时候仍然是A,但是实际上有可能A的值被改成了B,然后⼜被改回了A,这个CAS更新的漏洞就叫做ABA。只是ABA的问题⼤部分场景下都不影响并发的最终效果,Java中有AtomicStampedReference来解决这个问题,它加⼊了预期标志和更新后标志两个字段,更新时不光检查值,还要检查当前的标志是否等于预期标志,全部相等的话才会更新。
2.循环时间⻓开销⼤:⾃旋CAS的⽅式如果⻓时间不成功,会给CPU带来很⼤的开销。
3.只能保证⼀个共享变量的原⼦操作:只对⼀个共享变量操作可以保证原⼦性,但是多个则不⾏,多个可以通过AtomicReference来处理或者使⽤锁synchronized实现。