计算机网络基础

OSI 的七层模型都有哪些?

物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层():负责建立和管理节点间的链路。
网络层(ip):通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
传输层(tcp/udp):向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
会话层:向两个实体的表示层提供建立和使用连接的方法。
表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
应用层(http/ftp/dns):直接向用户提供服务,完成用户希望在网络上完成的各种工作。
在这里插入图片描述

HTTP

Http和Https的区别

HTTP是基于请求响应模型、无状态(指客户端和服务端之间不需要建立持久的连接 , 客户端发起一个请求 , 服务器端返回响应 , 这个连接就会被关闭 , 在服务器端不会保留该请求的有关信息 )、应用层超文本协议HTTPS就是在HTTP和TCP之间多了SSL层。

http明文传输,无法认证对方身份
https加密传输,更安全,可以认证对方身份,但需要申请证书,需要费用
http端口号是80
https端口号是443
https就是在http和TCP之间多了一层SSL层,用于加密和防止数据在中间被篡改。
https可以保证:
1.数据保密性,第三方无法查看传输数据
2.数据完整性,可以检查传输数据是否在中间被改动
3.身份验证,保证数据到了期望到达的地方

对称加密与非对称加密与加密机制

对称加密就是加密和解密用同一个密钥,运算速度快,但是传输对称秘钥的时候不安全。非对称加密就是发送密文加密的时候用对方给的公钥,对方解密用自己的私钥,虽然安全但是运算速度慢,所以https采用混合加密,用非对称秘钥加密用于传输对称秘钥以保证传输过程的安全性。

加密流程

TCP三次握手后,客户端给服务端发送一个协商请求,包含了自己可以用的加密算法,服务器收到后选择一种加密算法,并返回证书,里面还包含了加密算法,公钥。客户端拿到后检查证书是否正确,正确的话就用对方给的公钥进行加密,把对称秘钥传过去,服务器收到后用自己的私钥解密。之后客户端和服务器就可以基于对称加密对数据进行加密和通讯了。

HTTP方法
get
post
delete
put
head

GET方法与POST方法的区别

1.get侧重于从服务器查询资源,post侧重于向服务器写入资源
2.get数据传输通过URL请求,数据显示在?之后,用户可见所以不安全,URL长度有限,所以限制了传输数据的大小。post数据在请求体中,不可见安全且可以传输大量数据,传输文件只能用post。
3.get向服务器传中文会乱码,post不会。

HTTP请求报文与响应报文格式

请求报文包含三部分:
a、请求行:包含请求方法、URL、HTTP版本信息
b、请求首部字段
c、请求内容实体
响应报文包含三部分:
a、状态行:包含HTTP版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体

HTTP原理

客户端与服务器简历TCP连接,客户端发送请求报文(请求行,请求头,请求体)给服务器,服务器响应(状态行,响应头,响应体)。
有哪些响应状态?
1xx 请求接收到了,正在处理中
2xx 请求成功,处理完成
3xx 重定向
4xx 客户端发生错误,例如400报文的语法有错误
5xx 服务器发生错误,服务器无法响应客户端的请求

重定向和转发

转发是服务器内部的操作,客户端向servletA发送请求,A搞不定把问题转发给servletB,然后B去响应。一共是一次请求。
重定向是客户端向servletA发送请求,A搞不定但是会响应,让客户端去找servletB,然后客户端向B发送请求,(地址栏就变化了),B再给客户端响应。一共是两次请求。

HTTP1.1版本新特性

相比于http,建立完的连接不会立刻断开。可以发送多次http请求。

TCP三次握手四次挥手

三次握手:
客户端发送连接请求报文给服务器,服务器收到请求并发一个确认收到请求的报文回去,服务器收到后再发送一次确认连接的报文给服务器。
之所以要三次:
1.可以保证服务器和客户端的发送与接收都没有问题,如果两次,那么服务器无法得知他发出去的消息客户端是否收到。
2.客户端的连接请求可能会失效,如果少了第三次握手,就会浪费服务器的资源,服务器会在那里一直等着客户端的发送。

四次挥手:
客户端发送断开请求的报文给服务器,服务器确认断开连接,并返回确认信息给客户端。服务器发送断开的请求给客户端,客户端收到服务器断开的请求后再发送确认信息给服务器,然后等2个报文最大寿命的时间后CLOSED.。(原因:为了保证客户端最后发送的报文被服务器接收到,如果没接收到就会重新传一次,如果客户端立刻关了,而服务器又没收到最后的报文,那么服务器就会一直开着了)
TCP连接是双向的,因此每个方向都需要单独进行关闭。当只挥手两次时,就只会关闭主动发起的一端,另一个仍能发送数据。

TCP粘包

为了增加传输效率,发送端会把多个小数据合并成一个大的数据块,然后进行封包,接收端则要进行拆包后接收数据。

粘包就是多个小数据包粘成了一个包,从接收缓冲区来看,就是下一个数据的头紧跟着上一个数据的尾。

原因:
发送端:发送端等到缓冲区满了才发送(由于Nagle算法,使用TCP_NODELAY选项来关闭算法就可以解决发送端的粘包),造成粘包。
接收端:接受端不及时接收缓冲区的包,造成粘包,接收端的粘包自己解决不了,要交给下一层应用层去处理(循环读取缓存区的数据,格式化数据,设置开始符和结束符读取每条数据)。

UDP会不会产生粘包问题呢?

TCP为了保证可靠传输并减少额外的开销(每次发包都要验证),采用了基于流的传输,基于流的传输不认为消息是一条一条的,是无保护消息边界的(保护消息边界:指传输协议把数据当做一条独立的消息在网上传输,接收端一次只能接受一条独立的消息)。

UDP则是面向消息传输的,是有保护消息边界的,接收方一次只接受一条独立的信息,所以不存在粘包问题。

举个例子:有三个数据包,大小分别为2k、4k、6k,如果采用UDP发送的话,不管接受方的接收缓存有多大,我们必须要进行至少三次以上的发送才能把数据包发送完,但是使用TCP协议发送的话,我们只需要接受方的接收缓存有12k的大小,就可以一次把这3个数据包全部发送完毕。

输入一个URL之后的流程

1.首先要判断URL合法性,然后去浏览器缓存里找,能找到就直接显示
2.DNS解析后获取IP地址,去操作系统或者本地host文件缓存里找,找不到再去服务器缓存里找。
3.三次握手
4.浏览器发送http请求(get、post之类)给服务器,服务器响应请求。
5.浏览器拿到服务器数据后解析并渲染页面给用户显示出来。

TCP与UDP的区别

TCP面向连接,面向字节流,UDP无连接,面向报文
TCP可靠,UDP不可靠,他只管发,不管别人收不收得到
TCP是1对1,UDP可以一对多,多对一。
TCP有拥塞机制,UDP没有。
TCP首部开销大,20字节,UDP8个字节。

TCP的拥塞处理

拥塞原因:对网络资源的需求超过了可以供给的程度。
拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。

解决方法:
1慢启动,不要一开始就发送大量数据,先看看网络的拥塞程度。从小到大逐渐增加窗口的大小
2拥塞避免,拥塞避免算法让拥塞窗口按照线性规律缓慢增长
3快重传:快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
4快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

TCP如何保证可靠连接?

1数据包校验,如果数据包有错误就丢弃,不给于响应。
2对失序数据进行重新排序,对报文排序后再交给应用层。
3丢弃重复数据,重复的数据直接丢弃。
4应答机制,接收方收到报文要返回一个确认信息。
5超时重发,发送方发出的报文如果超过一段时间未被接收,就会重复发送这个报文。
6流量控制,控制发送方不能发太快,接收方会来不及接收。流量控制依赖于滑动窗口协议。

Session 与 Cookie 的对比

都是会话技术,都是为了保存用户信息。
实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID

大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;

安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;

服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。

SQL 注入

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入攻击实例

比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:

用户名: ‘or 1 = 1 –

密 码:

1
2
1
2
  用户一旦点击登录,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了。这是为什么呢?下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”; 因此,当输入了上面的用户名和密码,上面的SQL语句变成:SELECT * FROM user_table WHERE username=’’or 1 = 1 – and password=’’。分析上述SQL语句我们知道,
username=‘ or 1=1 这个语句一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

预防SQL注入:
在mybatis的mapper文件中,对于传递的参数我们一般是使用#和$来获取参数值

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值