计算机网络
OSI是什么?七层模型有哪些
开放式系统互联通信参考模型(Open System InterConnection Reference Model)简写:OSI。
是一种概念模型,试图使各种计算机在世界范围内互联为网络的标准框架。
域名解析成 IP 的全过程
通过DNS解析,解析域名并逐级查找DNS服务器缓存
浏览器缓存 系统缓存 路由器缓存 IPS服务器缓存 根域名服务器缓存 顶级域名服务器缓存
DNS解析。服务器会依据URL逐层查询DNS服务器缓存,解析URL域名所对应的IP地址。DNS缓存由近到远依次是:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存。从哪个缓存找到对应的IP,就直接返回,不再继续查询
TCP 如何保证可靠性
TCP/IP
TCP/IP是一套用于网络通信的协议集合或者系统。
TCP/IP支持跨层封装,OSI不支持。
SSL
SSL (Secure Sockets Layer)安全套接层。主要任务是提供私密性,信息完整性和身份认证。
SSL是一个不依赖于平台和运用程序的协议,位于TCP/IP协议与各种应用层协议之间,为数据通信提高安全支持。
HTTP的几种请求方法和用途
GET方法 发送一个请求来取得服务器上的某一资源
POST方法 向URL指定的资源提交数据或附加新的数据
PUT方法 跟POST方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT指定了资源在服务器上的位置,而POST没有
HEAD方法 只请求页面的首部
DELETE方法 删除服务器上的某资源
OPTIONS方法 它用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息
TRACE方法 TRACE方法被用于激发一个远程的,应用层的请求消息回路
CONNECT方法 把请求连接转换到透明的TCP/IP通道
http常见响应码
- 1xx 临时相应
- 2xx 成功
- 200 请求被正确返回
- 201 请求资源被正确创建 如用户注册
- 202 请求正确,结果正在处理中
- 3xx 已重定向
- 301 请求成功 但资源永久转移了
- 303 使用Get请求来访问新的地址来获取资源
- 4xx 请求错误
- 400 请求出现错误
- 401 没有提供认证信息,如没带Token
- 403 资源不允许访问,如没有权限
- 404 内容不存在
- 408 超时
- 500 服务器错误
TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。
- TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
- UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
- TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。
TCP为什么要三次握手?两次不行吗
- TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。
- 所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。
三次握手
- 第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
- 第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
- 第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
为了初始化序列号,这个序列号要作为以后数据通讯的序号
为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。
如果是两次握手,最多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认。
四次挥手
什么是TCP粘包,怎么产生,如何解决
概念:发送方发送的多个数据包,到接收方缓冲区首尾相连,粘成一包,被接收。
原因:
发送方产生粘包:TCP协议默认使用Nagle算法可能会把多个数据包一次发送到接收方。
接收方产生粘包: 如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。
解决方法 :
①发送方:对于发送方造成的粘包问题,可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭算法。
②接收方:无法处理,交由应用层处理。
③应用层:循环处理,应用程序从接收缓存中读取分组时,读完一条数据,就应该循环读取下一条数据,直到所有数据都被处理完成,但是如何判断每条数据的长度呢?
格式化数据:每条数据有固定的格式(开始符,结束符),这种方法简单易行,但是选择开始符和结束符时一定要确保每条数据的内部不包含开始符和结束符。
发送长度:发送每条数据时,将数据的长度一并发送,例如规定数据的前4位是数据的长度,应用层在处理时可以根据长度来判断每个分组的开始和结束位置。
http和ftp的默许使用端口是什么?
答:http:80 ftp:21
HTTP与HTTPS有什么区别?
- HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL/TLS加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。) Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS如何保证数据安全/为什么需要CA证书
HTTPS全称HTTP over SSL,简单的说就是在之前的HTTP传输上增加了SSL协议的加密能力,SSL全称安全套接字层,工作于传输层和应用层之间,为应用提供数据的加密传输。在普通的数据传输中,我们通常会在客户端和服务器端使用对称协议进行加密,即两端使用一个相同的秘钥来对传输的数据进行加密和解密。但是由于秘钥同样需要在网络上进行传输,我们仍然需要对秘钥进行保护,为了解决这个问题,我们可以使用非对称加密,就是我们常见的RSA算法,该算法能够生成公钥和私钥,公钥任何人都可见,用来对信息加密,而私钥用来对加密信息进行解密,这种非对称加密算法,加密和解密的耗时都比较长,所以只适合对少量的数据进行加密传输,就刚好可以用来进行对称加密算法的秘钥传输。
有了这种加密方式后,整个传输流程看起来安全多了,但是如果在端对端的传输过程中,某一端的传输数据被黑客劫持,那么黑客同样可以自己生成公钥,并和另一端进行数据传输,为了解决这个问题,在使用HTTPS进行数据传输时,需要提供CA办法的数字证书来证明传输者的身份。
Post、Get请求区别
①浏览器回退:GET是无害的,而POST会再次提交请求。
②书签:GET产生的URL地址可以被收藏为书签,而POST不可以。
③缓存:GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
④编码:GET请求只能进行URL编码,而POST支持多种编码格式。
⑤历史:GET请求参数会被完整保留在浏览器历史记录中,而POST中的参数不会被保留。
⑥对数据长度限制:GET在URL传参的长度是有限制的,而POST没有限制。
⑦对数据类型的限制:GET只接收ASCII字符,而POST没有限制。
⑧安全性:GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
⑨参数存放位置:GET通过URL传参,POST放在Request Body中。
什么是跨域,如何解决跨域问题
跨域:是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
只要协议,子域名,主域名,端口号这四项组成部分中有一项不同,就可以认为是不同的域,不同的域之间互相访问资源,就被称之为跨域。
解决方法:
1.JSONP:只支持GET请求,不支持POST请求。
2.代理:Nginx反向代理
3.SpringBoot的后台操作 如注解@CrossOrigin
说一下JSONP的实现原理
- JSONP=JSON+Padding,动态创建script标签,利用script标签的src属性可以获取任何域下的JS脚本,通过这个特性,服务器端不再返回JSON格式,而是返回一段调用某个函数的JS代码,在src中进行了调用,这样就实现了跨域。
在浏览器地址栏键入URL,按下回车之后经历的流程
- DNS解析。服务器会依据URL逐层查询DNS服务器缓存,解析URL域名所对应的IP地址。DNS缓存由近到远依次是:浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存。从哪个缓存找到对应的IP,就直接返回,不再继续查询
- TCP连接。即:三次握手
- 发送HTTP请求。
- 服务器处理请求并返回HTTP报文。
- 浏览器解析渲染页面。
- 连接结束。即:四次挥手
前端
JSP页面直接传参方法
- request
- session
- application
- 表单提交和超链接
forward和redirect的区别
- 从地址栏显示来说:
- forword是服务器内部的重定向,服务器直接访问目标地址的url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
- redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
2.从数据共享来说:
- 由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。
- redirect不能共享,相当于两次请求
3.从使用场景来说:
- forword 一般用于用户登录的时候,根据角色转发到相应的模块
- redirect一般用于用户注销登录时返回主页面或者跳转到其他网站
4.从效率来说:
- forword效率高,而redirect效率低
- 从本质来说:
- forword转发是服务器上的行为,而redirect重定向是客户端的行为
Cookie和Session工作原理
Cookie Session区别:
总结
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)所以:将登陆信息等重要信息存放为SESSION; 其他信息如果需要保留,可以放在COOKIE中
(6)两个都可以用来存私密的东西,session过期与否,取决于服务器的设定。cookie过期与否,可以在cookie生成的时候设置进去。
- session
简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。
- cookie
sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。
如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。
如果cookie设置了有效值,那么cookie会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有cookie,如果有的话,读取cookie,然后发送给服务器。
所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器
Xml特点?
XML是一种可扩展标记语言 (XML) 是 Web 上的数据通用语言。经常作为从一个平台到其他平台传输数据的标准。
XML主要具有以下几个特点:
①简洁有效
②易学易用
③开放的国际化标准
④高效可扩充
XML支持复用文档片断,使用者可以发明和使用自己的标签,也可以与他人共享,可延伸性大。在XML中,可定义一组无限量的标准,可以有效地进行XML文件的扩充。
xml命名空间
XML命名空间与Java的package类似,用来避免不同来源名称相同的标签发生冲突。
DOM 和 和 SAX 解析器有什么区别
DOM 和SAX 解析器的主要区别在于它们解析 XML 文档的方式。
使用 DOM 解析时,XML 文档以树形结构的形式加载到内存中,而 SAX 是事件驱动的解析器。
SOCKET中有几中连接方式,区别?
Sockets有两种主要的操作方式:面向连接的和无连接的。无连接的操作使用数据报协议,无连接的操作是快速的和高效的,但是数据安全性不佳. 面向连接的操作使用TCP协议.面向连接的操作比无连接的操作效率更低,但是数据的安全性更高。
Socket如何获取本地ip地址?
public InetAddress getLocalAddress()
常用正则表达
用户名:/^[a-z0-9_-]{3,16}$/
密码:/^[a-z0-9_-]{6,18}$/
电子邮箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/