1. 在浏览器输入网址的执行过程
1网址解析:在输入网址后,通过将URL解析为IP地址,解析的过程成为DNS解析,其根据URL的类型递归查询:
本地域名服务器查询->本地域名服务器向根服务器发送请求->本地域名服务器向.com顶级服务器发送请求->本地域名服务器向要求的xxx.com域名服务器发送请求,找到域名,将对应的IP返回给本地域名服务器。
拿到IP地址后建立TCP连接,通过3次握手:
客户端向服务器发出连接请求->服务器回复客户端确认连接请求->客户端回复服务器确认连接请求。连接建立。三次握手是为了防止已经是失效的报文请求字段发送给服务器,浪费服务器资源。
本地客户端构建HTTP请求报文,讲所需要请求内容发送给服务器。
服务器解析报文后将相应的内容发回给客户端
客户端解析报文后,在本地浏览器中渲染。呈现结果
返回结果后,若客户端无另外的请求,则可以向服务器发出断开连接的请求。
服务器发回给客户端,已经收到断开连接的请求,但还没有准备好,或者准备好
服务器在完成发送资源后,可以发送客户端断开连接的请求,告诉客户端,已经准备好
客户端发送服务器断开,服务器关闭连接。
为什么需要4次挥手,而不是3次或者5次?
在断开连接的时候,可能会有资源没有发完,因此不能将FIN与ACK同时发送,将原本的3次拆成了4次。
https://blog.csdn.net/guorui_java/category_10308503.html
2. 多线程的安全问题?如何同时访问同一个变量?线程之间的通信方式是怎样的?
在操作系统中,有并行与并发两个概念,其中并行为同时多个任务在进行,而并发则在一个时段内多个事件交替发生,
线程安全为多线程同时调用该资源时,调用资源过程中数据的安全。解决方案有两个,一个是线程同步,线程1完成了对该资源的操作后,对于其数值的变化同步到其余线程。第二个是锁,在线程1访问该资源过程中对数据上锁,其余数据不允许对其修改调用,保证了数据变化的单一性,避免两个线程同时处理出现脏数据。
线程之间通信方式有两种:共享内存和信息传递。
不同进程之间的采用进程之间通信,同一个进程中采用共享内存,
3. HTTP协议与HTTPS协议之间的区别?
- http传输数据明文传输,https传输数据加密传输,安全性更高
- http免费,https需要认证证书,付费
- http应用于小型网站,https大网站
- http连接无状态,端口为80,https是ssl与http协议构建的加密传输,端口为443
4. TCP建立连接的过程?其可靠性传输如何保证?
建立连接过程为3次握手的过程。见下图
TCP的可靠性:TCP相比于UDP是基于连接的传输协议,为一对一的传输协议,建立过程通过以上的3次握手,确保连接建立。基于连接保证了其数据的传输安全,时序的准确以及数据的可达性。无差错、不丢失、不重复、并且按序到达。 其包括如下两个协议特点:
1. 停止等待协议:按组发送数据,每次发送一组数据,停止等待对方确认,收到确认后再发送下一个分组。
实现可靠性传输主要通过:
- 校验和,校验发送的数据与接受的数据之间的差别
- 序列号,每一条数据都有特定的序列号,且分组机制,发送一组数据后,需要收到来自己另一方的确认收到后,才能继续发送后续消息。
- 超时重传机制,当确认ACK过了一段时间没有收到的话就会采用超时重传
- 滑动窗口控制,超时重传机制的升级版本,因为每组数据都需要确认的话会降低效率,因此,采用滑动窗口控制,使用大量的缓冲区,通过多个段进行确认应答的。将几组数据合并,利用3次重复确认应答作为重传的评判标准,提高传输效率
5. 计算机网络的七层模型,简要概述其作用?TCP与UDP协议之间的差别?
OSI(Open System interconnect):物理层,物理链路层,网络层,传输层,会话层,表示层,应用层。
TCP概念模型:链路层,网络层,传输层,应用层。
TCP:基于连接,面向字节流,一对一,传输可靠,效率低
UDP:无连接,面向报文,一对一,多对一,一对多,多对多,传输不可靠,传输效率高