• TCP 建立连接阶段三次握手、断开连接四次挥手是什么意思?
  • TCP 是如何保证可靠传输的?
  • TCP 的序列号的作用是什么?无序发送客户端重排;重试;ack;
  • https://zhuanlan.zhihu.com/p/433150969
  • HTTP 重定向状态码:https://zhuanlan.zhihu.com/p/60669395
  • 499:客户端断开连接

http2 和 http1 的区别

  1. HTTP2 使用的是二进制传送,HTTP1.X 是文本(字符串)传送。二进制传送的单位是帧和流。帧组成了流,同时流还有流 ID 标示
  2. HTTP2 支持多路复用。因为有流 ID,所以通过同一个 http 请求实现多个 http 请求传输变成了可能,可以通过流 ID 来标示究竟是哪个流从而定位到是哪个 http 请求
  3. HTTP2 头部压缩。HTTP2 通过 gzip 和 compress 压缩头部然后再发送,同时客户端和服务器端同时维护一张头信息表,所有字段都记录在这张表中,这样后面每次传输只需要传输表里面的索引 Id 就行,通过索引 ID 查询表头的值
  4. HTTP2 支持服务器推送。HTTP2 支持在未经客户端许可的情况下,主动向客户端推送内容

TCP 三次握手为什么不能两次?

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

三次握手的过程:客户端向服务端发起连接请求,带着序列号;服务端向客户端发送ack,并带着序列号;客户端向服务端发送确认。

TCP是一种有连接的可靠通信机制,每个数据包都会通过序列号进行确认,如果数据包发送失败则进行重试。

Tcp 为什么是 4 次挥手

这个因为第一次挥手表示客户端发送了一个 fin 的包,表示客户端已发送数据完毕,但是服务端这个时候可能还有数据没有发送完成,先发送给客户端一个 ask 的包,等待自己的数据发送完成才能向客户端发送一个 fin 的包,表示自己的数据也已发送完成。这样中间就必须为两次来发送 ask 和 fin。

XSS 和 CSRF

XSS 是注入攻击的一种,攻击者通过将代码注入被攻击者的网站中,用户一旦访问访问网页便会执行被注入的恶意脚本。反射型 XSS 的脚本被解析的地方是浏览器,而存储型 XSS 的脚本被解析的地方是服务器 CSRF 全程 Cross Site Request Forgery, 跨站域请求伪造,伪造表单诱骗用户点击

XSS 防范方法

1.代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以 encode,避免不小心把 html tag 弄出来。这一个层面做好,至少可以堵住超过一半的 XSS 攻击。 2.避免直接在 cookie 中泄露用户隐私,例如 email、密码等等。 3.通过使 cookie 和系统 ip 绑定来降低 cookie 泄露后的危险。这样攻击者得到的 cookie 没有实际价值,不可能拿来重放。 4.尽量采用 POST 而非 GET 提交表单

CSRF 防范方法

referer 验证:根据 HTTP 协议,在 http 请求头中包含一个 referer 的字段,这个字段记录了该 http 请求的原地址.通常情况下,执行转账操作的 post 请求www.bank.com/transfer.php应该是点击www.bank.com网页的按钮来触发的操作,这个时候转账请求的referer应该是www.bank.com.而如果黑客要进行csrf攻击,只能在自己的网站www.hacker.com上伪造请求.伪造请求的referer是www.hacker.com.所以我们通过对比post请求的referer是不是www.bank.com就可以判断请求是否合法.这种方式验证比较简单,网站开发者只要在post请求之前检查referer就可以,但是由于referer是由浏览器提供的.虽然http协议有要求不能篡改referer的值.但是一个网站的安全性绝对不能交由其他人员来保证. token 验证:从上面的样式可以发现,攻击者伪造了转账的表单,那么网站可以在表单中加入了一个随机的 token 来验证.token 随着其他请求数据一起被提交到服务器.服务器通过验证 token 的值来判断 post 请求是否合法.由于攻击者没有办法获取到页面信息,所以它没有办法知道 token 的值.那么伪造的表单中就没有该 token 值.服务器就可以判断出这个请求是伪造的.

路由器收到数据包之后是如何处理的?

路由器也叫网关。
所谓的“路由”,是指把数据从一个地方传送到另一个地方的行为和动作,它决定网络通信能够通过的最佳路径,路由器依据网络层信息将数据包从一个网络前向转发到另一个网络。

工作站 A 向工作站 B 发送一个数据包的过程:
(1)工作站 A 将工作站 B 的地址 12.0.0.5 连同数据信息以数据包的形式发送给路由器 1.

(2)路由器 1 收到工作站 A 的数据包后,先从报头中取出地址 12.0.0.5,并根据路径表计算出发往工作站 B 的最佳路径:R1->R2->R5->B;并将数据包发往路由器 2.

(3)路由器 2 重复路由器 1 的工作,并将数据包转发给路由器 5.

(4)路由器 5 同样取出目的地址,发现 12.0.0.5 就在该路由器所连接的网段上,于是将该数据包直接交给工作站 B。

(5)工作站 B 收到工作站 A 的数据包,一次通信过程宣告结束。

路由器对 IP 数据包的处理过程: 当一个数据包进入路由器: 1、拆去二层帧头;
2、进入缓冲区;
3、Check:查看目标地址(匹配路由表);
4、Re-Encapsulation 重新封装二层帧头;
5、Forwarding:转发。

当路由器接收到的 IP 报文中的 IP 地址不在路由表中时,将采取的策略是:A A. 丢掉该报文。
B. 将该报文以广播的形式从该路由器所有端口发出。
C. 将报文退还给上级设备. D. 向某个特定的路由器请求路由。

解析: 如果路由器转发的数据包的目的网络不在路由表中,则路由器会根据默认路由(default route)进行处理。默认路由是在路由表中预置的一条,它通常指向互联网上的一个特定网关或下一跳路由器。当路由器无法在路由表中找到匹配路由时,它就会把数据包发送到默认路由所指向的下一跳路由器,由此进行进一步的转发和处理。如果没有设置默认路由,则路由器将无法完成数据包的转发,并将丢弃该数据包。
这道题 D 选项或许也是正确的,这取决于有没有配置默认路由。

七层协议分别是什么?每层分别有哪些协议?

  • 应用层:TELNET,HTTP,FTP,NFS,SMTP、DHCP
  • 表示层:
  • 会话层
  • 传输层:TCP 协议、UDP 协议,这层的功能包括是选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。
  • 网络层:路由器,IP 协议
  • 数据链路层:交换机
  • 物理层

OSI 七层协议中的会话层、表示层、应用层比较难理解,所以五层模型直接把会话、表示、应用统称为应用层。

如何理解会话层、表示层、应用层?

在 OSI 七层模型中,最高层次的三层是应用层、表示层、会话层。而在五层模型中,这三层统称为应用层。这三层是开发者的代码可以完全控制的一层。
以 http 为例,会话层即为代码中 session,可以进行 get、post 等。表示层则定义了一些结构体,可以将 response、request 使用结构体进行定义,再调用会话层的时候涉及到序列化、反序列化的过程。应用层则为功能层,定义一些功能函数。

常见的应用层协议有哪些?分别有什么作用?

  • HTTP:最常见的应用层协议
  • FTP:文件传输协议
  • SMTP:邮件传输协议
  • DNS:域名协议,把域名解析成 IP 地址
  • DHCP:动态 IP 地址协议
  • 简单网络管理协议(simple Network Management Protocol,SNMP)
  • 远程登录协议(Telnet):用于实现远程登录功能。

从域名到 IP 地址的协议叫什么?位于哪一层?从 IP 地址到 mac 地址的协议叫什么?位于哪一层?

从域名到 IP 地址是 DNS 协议,位于应用层。
从 IP 地址到 mac 地址叫 ARP 协议,位于网络层。

为什么有了 mac 地址还要有 ip 地址?

因为 mac 地址是固定的,而 ip 地址是根据网络拓扑灵活变化的。
ip 地址是分段的,某段 ip 地址可以固定发往某个路由器,而 mac 地址具有很强的随机性。

一、计算机网络

  • 谈谈你对五层网络协议的理解?每一层的作用是什么?每一层的数据单元是什么?
  • 简单说下每一层对应的网络协议有哪些?
  • ARP 协议的工作原理?
  • 谈下你对 IP 地址分类的理解?
  • TCP 和 UDP 的区别?
  • TCP 和 UDP 分别对应的常见应用层协议有哪些?
  • 详细说下 TCP 三次握手的过程?
  • 为什么两次握手不可以?为什么不需要四次握手?
  • 为什么要回传 SYN? 为什么要传 ACK?
  • 详细说下 TCP 四次挥手的过程?
  • 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
  • 为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么?
  • 保活计时器的作用?
  • TCP 协议是如何保证可靠传输的?
  • 谈谈你对停止等待协议的理解?
  • 谈谈你对 ARQ 协议的理解?
  • 滑动窗口有什么作用?
  • 谈下你对 TCP 拥塞控制的理解?四种算法?
  • TCP 黏包是怎么产生的?怎么解决?
  • 说几个你知道的 HTTP 状态码?
  • HTTP 状态码 301 和 302 代表的是什么?有什么区别?
  • forward 和 redirect 的区别?
  • HTTP 方法有哪些?
  • 说下 GET 和 POST 的区别?
  • HTTP 的首部字段有哪些?
  • 在浏览器中输入 URL 地址到显示主页的过程?
  • 说下 DNS 解析的过程?
  • 谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
  • 谈下 HTTP1.0 和 1.1、1.2 的主要变化?
  • HTTPS 的工作过程?
  • HTTP 和 HTTPS 的区别?
  • HTTPS 的优缺点?
  • 什么是数字签名?什么是证书?
  • 什么是对称加密和非对称加密?
  • 常用的加密算法有哪些?
  • Session 和 Cookie 的区别?
  • 什么是 CAS 单点登录?
  • 如何设计一个 CAS 单点登录系统?
  • Socket 两个典型的接收方式方式?
  • Socket 在 OSI 七 层模型中的哪一层?
  • Java 如何实现无阻塞方式的 Socket 编程?
  • 说下你知道你知道的攻击手段有哪些?
  • 跨站脚本攻击的原理、危害和防范手段?
  • 跨站请求伪造的原理、危害和防范手段?
  • SQL 注入攻击的原理、危害和防范手段?
  • 拒绝服务攻击 DOS 的原理、危害和防范手段?

八、网络

79.http 响应码 301 和 302 代表的是什么?有什么区别?

80.forward 和 redirect 的区别?

81.简述 tcp 和 udp 的区别?

82.tcp 为什么要三次握手,两次不行吗?为什么?

83.说一下 tcp 粘包是怎么产生的?

84.OSI 的七层模型都有哪些?

85.get 和 post 请求有哪些区别?

86.如何实现跨域?

87.说一下 JSONP 实现原理?