网络Q
Q:简介 TCP 和 UDP 区别,他们位于哪一层?
他们位于网络层.区别:
- TCP是面向有连接的,UDP是无连接的
- TCP具有丢包重发、流量控制的功能.
- TCP要求系统资源较多,UDP较少
- TCP保证数据正确性,UDP可能丢包
- TCP保证数据顺序,UDP不保证
Q:路由器和交换机的工作原理大概是什么,他们分别用到什么协议,位于哪一层?
交换机位于数据链路层,他有多个端口,可以连接不同的设备。它的工作原理如下:

当主机A向主机B发送帧时,交换机从源MAC地址可以知道主机A与端口1连接,然后自动学习到转发表里面去。同样的主机B很端口2连接,那么主机B发送给主机A的帧只会拷贝到端口1.
路由器位于网络层,它的主要目的是为数据包选择最佳路由路径。

主机A会通过它的路由表找到目标地址的路由器2,然后将数据转发到目标路由器2上,路由器2又通过路由表把数据转发到主机B上。
Q:描述TCP 协议三次握手,四次释放的过程。

Q:为什么建立连接时是三次握手,两次行不行?如果第三次握手失败了怎么处理
不行。如果只是两次握手的话,容易导致服务器建立空的连接,浪费资源。
假设没有第三次确认,客户端向服务端发送了 SYN,请求建立连接。由于延迟,服务端没有及时收到这个包。于是客户端重新发送一个 SYN 包。回忆一下介绍 TCP 首部时提到的序列号,这两个包的序列号显然是相同的。
假设服务端接收到了第二个 SYN 包,建立了通信,一段时间后通信结束,连接被关闭。这时候最初被发送的 SYN 包刚刚抵达服务端,服务端又会发送一次 ACK 确认。由于两次握手就建立了连接,此时的服务端就会建立一个新的连接,然而客户端觉得自己并没有请求建立连接,所以就不会向服务端发送数据。从而导致服务端建立了一个空的连接,白白浪费资源。
在三次握手的情况下,服务端直到收到客户端的应答后才会建立连接。因此在上述情况下,客户端会接受到一个相同的 ACK 包,这时候它会抛弃这个数据包,不会和服务端进行第三次握手,因此避免了服务端建立空的连接。
如果第三次握手失败了怎么办?
服务器会重新发送一条RST的报文,进入CLOSE状态,客户端收到后必须重新进行第一次连接。
关闭连接时,第四次握手失败怎么处理?
Q:TCP 协议是如何进行流量控制,拥塞控制的?
通过控制TCP的窗口大小.
Q:你怎么理解分层和协议?
就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种约定使那些不同厂商的设备,不同的CPU以及不用的操作系统组成的计算机之间,只要遵循先攻的协议就能够事先通信。反之,如果所使用的协议不同,就无法实现通信。
协议分层就如同计算机软件中的模块化开发。这一模型将通信协议中必要的功能分成了7层,通过这些分层,使得那些比较复杂的网络协议更加简单化,在这一模型中,每个分层都接受由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务,上下层之间进行交互时所遵循的约定叫做“接口”。同一层之间的交互所遵循的约定叫做“协议”。PSI参考模型是的建议是比较理想化的,她希望实现从第一层到第七层的所有模块,并将他们组合起来实现网络通信。分层可以将每个分层独立使用,即使系统中某些分层发生变化,也不会波及整个系统。因此,可以构造一个扩展性和灵活性都较强的系统。此外,通过分层能够细分通信功能,更易于单独实现每个分层的协议,并界定各个分层的具体责任和义务,这些都属于分层的优点。而分层的劣势,可能就在于过分模块化,使处理变得更加沉重以及每个模块都不得不实现想死的处理逻辑等问题。
Q:HTTP 请求中的GET 和 POST 的区别?
- GET 请求可以被缓存,可以被收藏为书签,但 POST 不行。
- GET 请求会保留在浏览器的历史记录中,POST 不会。
- GET 请求的长度有限制(不同的浏览器不一样,大约在几 Kb 左右),URL 的数据类型只能是 ASCII 字符,POST 请求没有限制。
- GET 请求的参数在 URL 中,因此绝不能用 GET 请求传输敏感数据。POST 请求数据则写在 HTTP 的请求头中,安全性略高于 GET 请求。
Q:Cookie 和 Session区别?
HTTP 是一种无状态的连接,客户端每次读取 web 页面时,服务器都会认为这是一次新的会话。但有时候我们又需要持久保持某些信息,比如登录时的用户名、密码,用户上一次连接时的信息等。这些信息就由 Cookie 和 Session 保存。
这两者的根本性区别在于,cookie 保存在客户端上,而 session 则保存在服务器中。由此我们还可以拓展出以下结论:
- cookie 相对来说不安全,浏览器可以分析本地的 cookie 进行 cookie 欺骗。
- session 可以设置超时时间,超过这个时间后就失效,以免长期占用服务端内存。
- 单个 cookie 的大小有限制(4 Kb),每个站点的 cookie 数量一般也有限制(20个)。
- 客户端每次都会把 cookie 发送到服务端,因此服务端可以知道 cookie,但是客户端不知道 session。
当服务器接收到 cookie 后,会根据 cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 发送给客户端。
Q:谈谈你对 HTTP 1.1,2.0 和 HTTPS 的理解。
使用 HTTP 协议时,客户端首先与服务端的 80 端口建立一个 TCP 连接,然后在这个连接的基础上进行请求和应答,以及数据的交换。

HTTP 有两个常用版本,分别是 1.0 和 1.1。主要区别在于 HTTP 1.0 中每次请求和应答都会使用一个新的 TCP 连接,而从 HTTP 1.1 开始,运行在一个 TCP 连接上发送多个命令和应答。因此大幅度减少了 TCP 连接的建立和断开,提高了效率。
HTTP2.0与HTTP 1.1相比,主要区别包括
HTTP/2采用二进制格式而非文本格式
HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
使用报头压缩,HTTP/2降低了开销
HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
HTTPS把对称加密、非对称加密和CA结合起来以保证数据安全
总结一下 HTTPS 协议是如何避免前文所说的三大风险的:
先用非对称加密传输密码,然后用这个密码对称加密数据,使得第三方无法获得通信内容
发送方将数据的哈希结果写到数据中,接收方解密后对比数据的哈希结果,如果不一致则说明被修改。由于传输数据加密,第三方无法修改哈希结果。
由权威机构颁发证书,再加上证书校验机制,避免第三方伪装参与通信。