1. 说一下TCP/IP 五层模型和OSI七层模型重要
TCP/IP 五层模型
应用层-------传输层--------网络层-----------数据链路层----------物理层
OSI七层模型
应用层------表示层-------会话层--------传输层-----网络层------数据链路层-------物理层
应用层的话:为程序提供交互服务,应用层的协议很多比如域名系统DNS、HTTP协议、SMTP协议
传输层的话:是负责两台主机之间进行数据传输服务。传输层的协议主要有TCP和UDP
网络层:选择合适的路由和交换结点来确保数据的及时传输。网络层的协议主要包括IP协议
数据链路层:的作用是将网络层交下来的IP数据报组装成帧,在两个相邻结点的链路上传输
物理层:实现相邻结点间的比特流的透明传输
2. 说一下TCP和UDP以及两者的区别
首先TCP和UDP是传输层的协议
UDP:UDP是一种面向无连接的协议,也就是说在传输数据的时候不需要建立连接,不管对方服务是否启动,直接把数据传输过去。传输数据的格式是以报文的形式传输的,通信方式的话支持一对一、一对多、多对多,这是一种不可靠的协议,传输速度快但是容易丢失数据,比如我们日常的QQ聊天、腾讯视频会议这种就是UDP协议。
TCP:TCP是一种面向连接的协议,也就是说在传输数据的之前,在传输端和接受端建立连接,然后再进行数据的传输,这里面就有三次握手和四次挥手的概念。TCP传输的数据是面向字节流的,通信方式是一对一的,是一种可靠的协议,能够保证是一种可靠无差错的数据传输,如下载文件就是TCP连接
3. 说一下TCP和http的区别
① TCP对应与传输层、而HTTP对应于应用层,所以HTTP协议是建立在TCP协议之上的;
② HTTP底层是利用TCP协议传输的,所以支持http也就一定支持TCP;
③ TCP是网络传输协议, HTTP是超文本传输协议;
TCP是底层协议,定义的是数据传输和连接方式的规范。
HTTP是应用层协议,定义的是传输数据的内容的规范。
④HTTP是无状态的短连接,而TCP是有状态的长连接;
TCP对应于传输层,HTTP对应于应用层,从本质上来说,二者没有可比性。
4. 说一下TCP协议的三次握手和四次挥手重要
假设是在客户端和服务器之间进行数据的传输
三次握手:
- 客户端向服务器发送连接请求,等待服务器的确认
- 服务器向客户端做出响应,通知客户端收到了请求
- 客户端再次向服务器发送确认信息,确认连接,进行数据的传输
四次挥手:
- 客户端向服务器发送断开连接请求,并不向服务器传输数据
- 服务器对客户端的请求做出响应,这个时候B处于半关闭状态,这是说告诉客户端我要关闭了,但还未关闭,还可以向客户端发送数据
- 服务端再次给客户端发送断开请求,并不向客户端发送数据
- 客户端向服务器发送请求表示收到了,然后就断开连接了
5. 两次握手可以吗为什么,四次呢?重要
不两次握手主要是为了防止那些已经实效的连接请求又传输到服务端
比如,客户端向服务端发送了一个请求,可能因为网络或者什么原因导致请求并没有传到服务端,那么服务端也自然不会发送响应给到客户端,那么客户端没有收到服务端的请求就会重新发送一个连接请求,然后建立连接、传输数据、断开连接。此时,刚才那个未发送的请求才送到服务端了,服务器就以为数客户端重新发送的请求,实际上这是个作废了的请求,如果是两次握手建立了连接的话,由于是个作废的请求,客户端并不会发送请求给到服务端,但连接已经建立了,服务器一直在等客户端发送数据给他,从而就造成了资源的浪费
至于说为什么不四次握手:实际上三次握手是把四次的中间两步合并了,四次握手就没有必要了
6. http状态码有哪些?
2xx----------请求正常处理完毕
4xx-----------客户端错误
5xx-------------服务器处理请求错误
7. 浏览器中输入URL返回页面的过程重要
- 解析域名,找到主机IP
- 浏览器利用这个IP与主机三次握手建立TCP连接
- 建立连接后,浏览器向主机发送一个http请求
- 服务器响应请求,并返回响应的数据
- 浏览器解析响应的内容,并进行渲染,呈现给用户
8. DNS解析过程
9. http和https的区别重要
① http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议,因此https较http更加安全
② http和https的端口不一样http端口是80,https是443
③ https是需要申请证书的http协议不需要
10. HTTPS的通信步骤
HTTPS在传输的过程中会涉及到三个密钥:
服务器端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来进行对称加密
一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
① 客户端向服务器发起HTTPS请求,连接到服务器的443端口
② 服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
③ 服务器将自己的公钥发送给客户端。
④ 客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥。然后用服务器的公钥对客户端密钥进行私钥,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
⑤ 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
⑥ 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
⑦ 然后服务器将加密后的密文发送给客户端。
⑧ 客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
11. 说一下cookie和session的区别重要
首先是http协议是无状态的协议,所谓的无状态就是说一旦数据交换完毕客户端与服务端的连接就会关闭,再次交换数据的时候就需要重新建立连接,这就意味着服务器无法从连接上跟踪会话。
所谓的跟踪会话就是说跟踪用户登录网站上的一些列动作,比如加入购物车并购买。
那么常见的会话跟踪技术就是cookie和session。
Cookie和session的区别是:
- Cookie是string类型,session是object类型
- cookie数据存放在客户端,而session数据存放在服务器
- Cookie不是很安全,别人可以分析存放在本地的cookie进行修改,考虑到安全问题的话还是使用session
Session会在一定时间内保存在服务器上。当访问增多时会占用服务器的性能,考虑到减轻服务器的性能就使用cookie
因此在设计的时候就可以将一些和安全相关的重要信息存放在session中,而将一些没有那么重要的信息放在cookie中。
具体更细节:
Cookie:客户端请求服务器如果服务器需要记录该用户的一个状态,就使用response向浏览器颁发一个cookie。客户端会把这个cookie保存起来。当浏览器再次发起请求的时候,浏览器会在请求网址中携带刚才保存的cookie一起提交给服务器。服务器通过检查这个cookie以此来辨别用户的信息,服务器还可以根据需要来修改这个cookie的内容。
Cookie分为会话cookie和持久cookie:
会话cookie是:如果不设置cookie的过期时间,则关闭浏览器cookie就消失,会话cookie一般保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存在硬盘里,关闭浏览器这些cookie仍然存在,知道超过设置的过期时间。
Session:另外一种记录用户状态的机制,不同的是cookie是保存在客户端,而session是保存在服务器当中。客户端访问服务器的时候,服务器将客户信息以session的形式记录在服务器,当客户端浏览器再次访问服务器时只需要从session中找到客户的状态就可以了