SOA(面向服务的架构):ServiceOrientedArchitecture面向服务的架构。也就是把工程拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。这样做的好处就是,系统之间的调用很方便,A系统要用到B系统,直接调用B系统的服务层就可以了。
集群就是多台服务器跑的都是一套完整的代码,这就叫集群(水平拆分);
分布式就是多台服务器合起来跑的才是一套完整代码,这就叫分布式(垂直拆分)
SOA(面向组件>>面向接口>>面向对象>>面向方法)
分布式服务器之间如何解决通信的问题
-全部都是基于socket
分布式系统通信流程:
1、七层网络协议
tcp/udp协议()
2、源主机找到目标主机
3、源主机和目标主机之间如何建立联系
tcp:面向连接(保存状态)的一种协议
优点:可靠
缺点:速度慢
三次握手四次挥手图解
udp:面向数据报(无连接,五状态)
优点:速度快
缺点:不可靠
3.1tcp协议
3.1.1通过3此握手协议
客户端发起(syn)服务器响应(ack)
3.1.2syn攻击
网络崩溃
3.1.3通过4次回收协议、
客户端发起(fin)服务器响应(ack)
网络协议概念模型
1.OSI七层网络模型包含(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)2.TCP/IP四层概念模型包含(应用层、传输层、网络层、数据链路层)
TCP/IP和UDP/IP简介
1.TCP/IP协议是一种可靠的协议,源于通过三次握手协议去建立连接;2.UDP/IP协议是一种不可靠的协议,数据包有可能丢失,有可能没有被接收;
请求发起过程,在tcp/ip四层网络模型中所做的事情
客户端如何找到目标服务
接收端收到数据包以后的处理过程
1.当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议都要去检查报文首部中的协议标识,以确定接收数据的上层协议。2.物理层:当数据经过网卡的时候,通过下面数据链路层判断,是否需要接收3.数据链路层:拿到数据后,就先从数据中摘到第二层的头,检查一下MAC地址和当前网卡的MAC地址是否匹配4.网络层:拿到ip头,判断ip是不是自己的,若果不是就转发,如果是,继续给上一层处理5.传输层:TCP头中会携带端口,将报文给指定的端口的进程进行处理;
为什么有了MAC层还要走IP层呢?
1.MAC是全局唯一的,理论上来讲,在任何两个设备之间,我们可以通过mac地址来发送数据,但是为啥还要IP2.可以这样理解,MAC地址如同人的身份证,是全局唯一的,但是身份证所在位置和人所在的位置实时不一定是一致的,有可能身份证在家里,人在公司;mac一样,知道mac不一定知道ip,ip有可能变了;
TCP三次握手协议
1.客户端A首先发起建立联机[SYN]请求,同时会带一个随机的顺序号码[seqnum=x];客户端A发起建立联机的请求之后,即进入建立联机已发送的状态[SYN_SENT];2.客户端B在接收到客户端A发起的建立联机[SYN]请求之后,开始确认,确认成功,客户端会发送确认[ACK]建立联机[SYN]请求,同时发送确认号码acknum[acknum=x+1,这里的x是客户端发送请求的时候传递过来的seqnum=x,即我们是对客户端发送的内容的确认];客户端B确认之后,会进入已经建立联机接收的状态[SYN_RCVD];3.客户端A在接收成功之后,客户端A发送确认[ACK=1],同时发送随机顺序编码x+1(因为在第一次发起请求的时候是x)同时发送对客户端B发送的seqnum=y的确认[acknum=y+1]
为啥还要进行第三次握手
这里注意下,为啥客户端A发起了请求(第一次握手),客户端B也进行了确认(第二次握手),为啥还要进行第三次握手呢主要是基于,第二次握手客户端B发起确认之后,客户端A已经正常接收了;
SYN攻击
TCP四次挥手协议
通俗易懂的话描述
```java假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
为什么连接的时候是三次握手,关闭的时候却是四次握手?
三次握手是因为因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET(因为可能还有消息没处理完),所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。