计算机网络

OSI模型有哪几层,主要作用?

  1. 物理层(设备之间传输比特)
  2. 数据链路层(将比特数据封装成帧,通过物理地址(mac地址)转发帧)
  3. 网络层(提供逻辑地址(IP地址),选路,负责数据包从源端到目的端的传输)
  4. 传输层(实现不同主机上用户进程之间的通信,可靠与不可靠传输)
  5. 会话层(建立,管理和终止会话)
  6. 表示层(对数据进行加密加密和压缩)
  7. 应用层(允许访问OSI环境的手段)

TCP/IP模型有哪几层?

  1. 网络接口层-跟OSI的物理层和数据链路层对应
  2. 网络层-跟OSI的网络层对应
  3. 传输层-跟OSI的传输层对应
  4. 应用层-跟OSI的会话层,表示层和应用层对应

网络层有哪些协议?Ping是什么?

IP协议和ICMP协议(Internet控制报文协议)。Ping的作用是探测主机和网络中的另一台主机是否能够建立连接。Ping命令是基于ICMP协议来工作的,源主机向目的主机发送一个ICMP请求报文,并等待目的主机返回ICMP应答,如果一定时间内收到了目的主机的应答,表面网络可达。

应用层有哪些协议?FTP用的什么端口?

  1. DNS域名解析协议:把域名解析成IP地址。UDP 53
  2. HTTP协议(超文本传输协议):用于实现www服务。TCP 80
  3. FTP协议(文件传输协议):用于实现交互式文件传输。TCP 21
  4. SMTP协议(简单邮件传输协议):发送邮件。TCP 25
  5. POP3协议:接受邮件(传输层协议)

UDP报文结构

TCP报文结构

TCP三次握手?为什么是三次?

  1. 首先客户端向服务器端发送连接请求报文
  2. 服务器端接受到连接请求后如果同意连接,会向客户端发送一个确认报文(这一步的目的是防止接受到的请求报文已失效),并为该次tcp连接分配缓存和变量。
  3. 客户端接受到服务器端的确认报文后会向服务器端发送一个确认报文(表明这次连接请求有效),并为该次tcp连接分配缓存和变量。

之所以是三次的原因是二次握手不够用,应该客户端的连接请求可能因为网络延迟等原因到达服务器端时已经失效,如果不经过客户端的确认,会直接建立tcp连接,导致错误。

TCP四次挥手?TimeWait为什么等2MSL?

  1. 客户端向服务器端发送FIN数据报文。
  2. 服务器端接受到FIN数据报文后,会立刻向客户端发送一个确认报文(表明自己已经知道了,但是服务器端数据可能还未传输完毕,需要一段时间),服务器端进入close_wait状态等待服务器端数据传输完毕并断开socket连接。
  3. 传输完毕并断开连接后,服务器端会向客户端发送一个FIN数据报文,并进入到等待确认状态。
  4. 客户端接受到服务器端的FIN数据报后,会向服务器端发送确认报文,并进入time_wait状态。
  5. 服务器端接受到确认报文后就成功关闭了,客户端在time_wait状态等待2msl(报文最大存活时间)后就会成功关闭。

四次挥手的原因是:服务器端接受到客户端的FIN数据报文后,由于服务器端的数据还未传输完毕,资源释放需要一定时间,所以只能立刻向客户端返回一个确认报文,然后等待数据传输和资源释放完毕后,再向客户端发送一个FIN数据报。

TIME_wait为啥是2MSL:1.防止最后一次挥手时,客户端发送给服务器端的确认报文丢失,而导致服务器端因接受不到客户端的确认报文而始终无法关闭。服务器端接受不到客户端的确认报文时,它会再次向客户端重新发送FIN请求。2.在2msl时间内本次连接产生的数据报文已经全部销毁,避免影响到下一次新的tcp连接。

TCP传输数据

客户端发送序列号seq,服务端发送ACK序号=Seq + 传输数据大小 + 1.

tcp传输过程中粘包问题解决方法:

  1. 定长发送
  2. 尾部设置标记

HTTP报文

请求报文

  1. 请求行----- 三个(请求方法/url/http版本)
  2. 请求报文首部-----(cookie,user-agent等信息)
  3. 请求报文主体----- post数据

响应报文

  1. 响应行 ------ 两个(状态码/http版本)
  2. 响应报文首部 ------ (跟请求报文首部类似)
  3. 响应报文主体 ------ 响应数据

TCP和UDP的区别?TCP连接性相对于UDP来讲体现再哪个方面?

  1. TCP是面字节流的,而udp是面向数据报的
  2. TCP是面向连接的,而udp是无连接的
  3. TCP传输是可靠的,而udp传输不可靠
  4. TCP传输速度慢,而udp传输速度快
  5. TCP对系统资源要求高,而udp对系统资源要求低

TCP需要三次握手才能建立连接然后传输数据,需要四次挥手断开连接。

HTTP和HTTPS的区别?HTTPS如何保证安全性?

区别:

1.加密。http协议对传输的数据不进行加密,而https协议对传输的数据使用ssl安全协议进行加密,https加密需要ca签发的证书。

2.端口。http协议使用TCP的80端口,而https协议使用TCP的443端口。

如何保障安全:

https使用ssl安全协议来保障安全,具体使用密钥和证书验证。

对称加密:

  1. 服务器端生成一对公钥和私钥,将公钥和证书发送给客户端。
  2. 客户端证书验证通过后生成一个对称加密的密钥,并使用服务器发送的公钥加密发送给服务器。
  3. 服务器使用私钥解密,获得对称加密的密钥。
  4. 客户端和服务器相互发送消息认可对称加密密钥。
  5. 然后开始数据传输,并利用对称加密密钥进行加密和解密。

HTTP各个版本之间的区别?

HTTP1.1和HTTP2的区别?

  1. HTTP/2采用二进制格式而非文本格式
  2. HTTP/2是完全多路复用的,而非有序并阻塞的
  3. 使用报头压缩,HTTP/2降低了开销
  4. HTTP/2让服务器可以将响应主动”推送”到浏览器的缓存中。

http怎么建立连接?

  1. DNS域名解析得到服务器的IP地址
  2. 然后tcp三次握手建立连接
  3. 四次挥手断开连接

Tcp如何保证可靠传输?

  1. 应用数据被分割成tcp认为最适合发送的数据块
  2. 确认机制,发送报文后等待确认
  3. 重发机制,没有收到确认,重发数据报文段
  4. 保持首部和数据的校验和,确保数据的正确性
  5. 排序,丢失重复的,流量控制,拥塞控制

TCP流量控制

TCP流量控制就是让发送方不要发送的太快了,要让接收方来得及接受。

原理通过设置滑动窗口来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方的窗口大小。

TCP拥塞控制

TCP拥塞控制就是防止过多的数据注入到网络中,使得网络中的路由器过载。

Tcp拥塞控制使用了四种机制

1.慢启动

慢启动并不是说它的增长速度慢,相反它是指数增长的。只是拥塞窗口cwnd设置的比较小=1。当然拥塞窗口也不能无限增长,需要设置一个阈值ssthresh.

当 cwnd < ssthresh时执行慢启动算法

当cwnd = ssthresh时既可以执行慢启动算法也可以执行拥塞避免算法

当cwnd > ssthresh时执行拥塞避免算法

2.拥塞避免

拥塞避免并不是完全避免拥塞,而是让拥塞窗口cwnd以线性的规律增长,尽可能的避免拥塞。

3.快速重传

快速重传是当接收方收到了一个失序的数据报文时,会立刻向发送方发送重复确认。当发送方接收到三次重复确认后,立刻向发送方发送丢失的数据报文。

4.快速恢复

快速恢复会将阈值ssthresh的值减半,同时设置拥塞窗口cwnd=ssthresh,并开始执行拥塞避免算法。

Socket编程

DNS如何寻址?

  1. 首先查找浏览器缓存
  2. 然后查找hosts文件
  3. 再查找路由缓存
  4. 最后查找DNS服务器

访问www.baidu.com的整个过程?

  1. 首先通过DNS域名解析协议查找到 www.baidu.com这个域名对应的服务器的ip地址。
  2. 然后在客户端向服务器发送http会话请求。
  3. 在传输层,http会话请求需要通过tcp建立连接,然后客户端向服务器发送数据,服务器处理好后将结果返回给浏览器。首先会将http请求分成报文段 ,并添加源端口和目的端口。对于服务器端的端口默认为80,浏览器端的端口由操作系统给定。
  4. 在网络层,需要通过IP协议和ICMP协议根据服务器的IP地址,通过路由选择和存储转发找到对应IP的服务器。

在数据链路层,由于IP地址不是唯一的,但是MAC地址是唯一的,需要使用ARP地址解析协议,得到服务器IP地址到服务器MAC的映射,从而向服务器发送IP数据报。

Get和post的区别?

 

Response状态码?

100 继续 101切换协议

200 成功 201已创建。 202已接受

301 永久重定向 302临时重定向

400 客户端请求语法错误 401 请求需要用户验证

403服务器接受请求但是拒绝执行 404找不到资源

500服务器发生错误 503服务器繁忙(服务器不可用,可能过一段时间恢复正常)

COOKIE和SESSION的区别和联系?

Cookie数据存储在客户端,而session数据存储服务器。

Cookie数据限制了大小4k,而session数据没有限制。

我们可以轻松访问cookie,但是很难访问到session,所以session比cookie安全。

Cookie和session的联系。

Session是利用cookie来进行信息处理的,每当用户请求服务器时,服务器端就在用户的浏览器端创建一个cookie,存放sessionid,当session结束的时候,cookie就失效了。

MTU了解吗?Ping是用到什么协议?

MTU是数据链路层的最大传输单元。最小最大传输单元是64个字节,最大最大传输单元是1500个字节。Ping使用的是ICMP(Internet控制报文协议),用来检测一台主机是否能跟网络中的另一台主机建立连接。源主机会向目的主机发送ICMP请求报文,目的主机接收到报文后会立刻向源主机发送ICMP响应,源主机在一定时间内接收到响应,就认为能够ping通。

Dos攻击有哪些?

1. TCP的SYN泛洪

攻击者将自生伪装成一个私有地址向服务器发送连接请求,服务器会发送一个确认请求,但是私有地址不在该网络中,所以服务器就会一直等待接受ACK回应,直到连接尝试超时,因此有限的连接资源就被消耗了。

2. ping泛洪

攻击者通过ping发送的ICMP的echo请求消息。

3. UDP泛洪

UDP是无状态的,服务器不会验证UDP数据报,所以可以无限的向服务器发送UDP数据报。

4. 缓冲区溢出

让服务器的缓冲区溢出导致程序崩溃。

5. ICMP路由重定向炸弹

让服务器收到重定向消息,骗取主机转发流量到另一个主机。

6. 分片炸弹

构造一种非常小的数据包导致系统或者程序崩溃。

CSRF攻击

跨域请求伪造,原理是利用用户身份,执行非用户本身意愿的操作。

攻击形式:图片,超链接,form提交等。

危害:攻击者可以盗用用户的身份,以用户的名义进行恶意操作,比如以用户的名义发送邮件,资金转账等操作。

原理:

防御:

1.验证码(最有效,但是用户体验很差)

2.检验请求头部referer字段(http请求的来源地址)

http头部有一个referer,记录了该http请求的来源地址,通常情况下,访问一个安全受限页面的请求要来自于同一个网站,比如需要访问http://bank.example/withdraw?account=bob&amount=10000,用户必须登录 bank.example,然后通过点击页面上的按钮来触发转账时间。该转账请求的referer值就算转账按钮所在的页面的url,通常是比bank.example域名开头的地址,黑客伪造网站发起csrf攻击,则该referer指向黑客自己的网站。

缺点:

1.http的referer是第三方浏览器提供的,实现可鞥你有差别,某些会不安全,黑客可以篡改referer。

2.最新浏览器黑客不能篡改referer值,但是浏览器为了客户隐私问题,不再提供referer字段。

3. csrf token验证

放入黑客无法伪造的信息,该信息不存在cookie中。可以在http请求中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token。(登录成功后生产token(token可以放入session中或者redis中)返回给前端,前端放入localstorage或者cookie中),然后之后的所有请求都需要加上该token参数,服务器拦截器都需要拦截并验证该token。对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了。但是,在一个网站中,可以接受请求的地方非常多,要对于每一个请求都加上 token 是很麻烦的,并且很容易漏掉,通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token。该方法还有一个缺点是难以保证 token 本身的安全。特别是在一些论坛之类支持用户自己发表内容的网站,黑客可以在上面发布自己个人网站的地址。由于系统也会在这个地址后面加上 token,黑客可以在自己的网站上得到这个 token,并马上就可以发动 CSRF 攻击。为了避免这一点,系统可以在添加 token 的时候增加一个判断,如果这个链接是链到自己本站的,就在后面添加 token,如果是通向外网则不加。不过,即使这个 csrftoken 不以参数的形式附加在请求之中,黑客的网站也同样可以通过 Referer 来得到这个 token 值以发动 CSRF 攻击。这也是一些用户喜欢手动关闭浏览器 Referer 功能的原因。

XSS攻击(cross site script,为了跟css区别所以叫xss)

形式:利用网站对用户输入没有进行限制或者过滤,从而在页面中镶嵌某些代码,当别的用户访问该网站时,会执行对应的代码,从而获取用户的cookie信息。

危害:由于cookie被获取,因此可以登录账号,进行操作。

原理:太过于信任用户输入

1.反射型:xss代码出现在url中,作为参数提交到服务器,服务器解析后传递给浏览器渲染,然后执行。

2.存储型:xss代码作为输入提交给服务器,服务器存储到数据库,用户从数据库读取后,在浏览器端渲染,然后执行。

前端进行防御。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值