osi七层模型:
OSI(Open System Interconnect),即开放式系统模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
![](https://i-blog.csdnimg.cn/blog_migrate/dc107c8484c0174fbe4af3323e3ef916.png)
层 | 协议 |
---|---|
应用层 | HTTP. FTP. SMTP. POP3. RPC. SSL |
传输层 | TCP. UDP |
网络层 | IP |
数据链路层 | ARP |
物理层 | IEEE |
参考大图
https://blog.csdn.net/liaowunonghen/article/details/103555220
tcp/ip五层模型
![](https://i-blog.csdnimg.cn/blog_migrate/aec0bc8d4db57e3850e3b054dbd9a673.png)
tcp三次握手:
![](https://i-blog.csdnimg.cn/blog_migrate/5735c3faa7c31d340ece41428d514033.png)
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
http和https:
http
- 超文本传输协议(Hypertext Transfer Protocol,HTTP)运行在TCP之上
- 它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
- 明文,简单,无状态,使用HTTP协议传输隐私信息非常不安全,端口80,https端口443
https
SSL(Secure Sockets Layer)
- 以安全为目标的HTTP通道,HTTP的安全版,HTTP下加入SSL层,加入了SSL协议
- HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
- HTTPS协议主要作用分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
- 简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTP与HTTPS有什么区别?
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。服务端发 送证书,也就是公钥私钥中的公钥给客户端,客户端通过该公钥计算得到在本次通信
中才使用的私钥,传递给服务端,服务端如果能正常解码该消息,则之后的通信都是
用该次通信对应的密钥进行 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协
议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是
443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加
密传输、身份认证的网络协议,比http协议安全。
tcp三次握手:
提示:这里可以添加要学的内容
例如:
1、 搭建 Java 开发环境
2、 掌握 Java 基本语法
3、 掌握条件语句
4、 掌握循环语句
进程和线程的区别
进程是资源分配最小单位,线程是程序执行的最小单位。
算机在执行程序时,会为程序创建相应的进程,进行资源分配时,是以进程为单位进行相应的分配。每个进程都有相应的线程,在执行程序时,实际上是执行相应的一系列线程。
进程有自己独立的地址空间,线程没有独立的地址空间
进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段;
线程没有独立的地址空间,同一进程的线程共享本进程的地址空间。
进程之间的资源是独立的;同一进程内的线程共享本进程的资源。
一个进程在执行过程中可以产生多个线程
每个线程都有自己私有的程序计数器、虚拟机栈、本地方法栈
线程与进程最大的区别在于:
进程:进程之间几乎是独立的
线程:同一进程的线程之间极可能互相影响
线程与进程的特点:
线程:执行开销小,但不利于资源的管理和保护
进程:与线程相反
死锁产生的4个必要条件:
1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。
2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。
3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。
4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。
参考链接:https://www.cnblogs.com/yichengming/p/11450413.html
解决死锁的基本方法
1、预防死锁:
- 忽略该问题。鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。
为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉
得看不到危险也就没危险了吧。跟掩耳盗铃有点像。- 检测死锁并且恢复。
- 仔细地对资源进行动态分配,以避免死锁。
- 通过破除死锁四个必要条件之一,来防止死锁产生。
检测死锁
首先为每个进程和每个资源指定一个唯一的号码;然后建立资源分配表和进程等待表。
解除死锁:
当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
避免死锁:
预防死锁的几种策略,会严重地损害系统性能。
因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。
由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全的状态,则将资源分配给进程;否则,进程等待。
其中最具有代表性的避免死锁算法是银行家算法。
银行家算法:首先需要定义状态和安全状态的概念。系统的状态是当前给进程分配的资源情况。因此,状态包含两个向量Resource(系统中每种资源的总量)和Available(未分配给进程的每种资源的总量)及两个矩阵Claim(表示进程对资源的需求)和Allocation(表示当前分配给进程的资源)。安全状态是指至少有一个资源分配序列不会导致死锁。当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态。如果是,同意这个请求;如果不是,阻塞该进程知道同意该请求后系统状态仍然是安全的。
预防死锁:
资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)
只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)
可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)
资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)
死锁检测
1、Jstack命令
jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。 Jstack工具可以用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
2、JConsole工具
Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到。它用于连接正在运行的本地或者远程的JVM,对运行在Java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界面。而且本身占用的服务器内存很小,甚至可以说几乎不消耗。