网络相关面试题
HTTP 为什么不安全
- 因为
HTTP
协议使用的是明文传输,通信过程是完全开放的,所以一旦被第三者盯上,对方就可以轻易的监听和修改途经的数据包,导致信息泄露甚至是信息被恶意篡改 HTTP
协议没有用户和网站的身份验证机制,用户在使用浏览器浏览网站时,有可能被DNS
劫持,从而导致用户浏览器被导向了伪造的网站,在输入账号密码等重要信息时会被非法窃取。
TCP/IP四层模型每一层有哪些常见协议
- 应用层
HTTP
FTP
DNS
WebSocket
- 传输层
TCP
UDP
- 网络层
IP
ICMP
(Internet Control Message Protocol
,因特网控制报文协议)是IP
协议的补充,用于检测网络的连接状态,如ping
应用程序就是ICMP
协议的使用。 - 数据链路层
ARP
(作用就是把IP
地址解析成MAC
地址)RARP
(Reverse Address Resolve Protocol
)即逆地址解析协议
GET 和 POST 的区别
get
请求参数以?
分隔拼接到URL
后面,post
请求参数在Body
内部ge
t参数长度显示2048
个字符,post
一般没有该限制get
请求不安全,post
请求比较安全get
不会影响服务端的变化,有安全性,post
会get
请求多次结果一样,幂等性,post
不一定get
的请求默认会缓存在服务器上,post
不设置默认不缓存
TCP为什么需要 3 次握手
- 若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入
ESTABLISHED
状态,而服务端在收到连接请求后就进入ESTABLISHED
状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED
状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED
状态,服务端将会一直等待下去,这样浪费服务端连接资源。
TCP的拥塞控制
- 慢开始 指数增长
- 拥塞避免 线性增长 到顶把值变为一 重新慢开始
- 快重传 收到
3
个重复确认报文 立即重传 - 快恢复 不从慢开始重头再来,而是立即开始走拥塞避免线性阶段
TCP的滑动窗口
-
TCP
滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP
主机支持全双工数据传输,因此TCP
有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP
使用肯定确认技术,其确认号指的是下一个所期待数据包的序列号。 假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3
。发送方发送序列号为1
、2
、3
的三个数据包,接收方设备成功接收数据包,用序列号4
确认。发送方设备收到确认,继续以窗口大小3
发送数据。当接收方设备要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加,本例降低窗口大小为2
,每一次发送两个数据包。当接收方设备要求窗口大小为0
,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。发送方接收到携带窗口号为0
的确认,停止这一方向的数据传输。 -
滑动窗口协议优势:
- 允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发送每确认,因此该协议可以加速数据的传输。
- 在接收窗口向前滑动时(与此同时也发送了确认),发送窗口也会同步向前滑动,收发两端的窗口按照以上规律不断地向前滑动 ,可以动态调整窗口大小
UDP 为什么不可靠
- 不保证消息交付:不确认,不重传,无超时
- 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
- 不跟踪连接状态: 不必建立连接或重启状态机
- 不需要拥塞控制: 不内置客户端或网络反馈机制
有哪些基于UDP的应用层协议
DNS
、TFTP
(简单文件传输协议)、RIP
(路由选择协议)、DHCP
、BOOTP
(是DHCP
的前身)、IGMP
(Internet
组管理协议)
DNS一定是基于 UDP 的嘛
- 不一定
DNS
在进行区域传输的时候使用TCP
协议,其它时候则使用UDP
协议,
从输入url到页面展示到底发生了什么
- 1、输入地址
- 2、浏览器查找域名的
IP
地址 - 3、浏览器向
web
服务器发送一个HTTP
请求 - 4、服务器的永久重定向响应
- 5、浏览器跟踪重定向地址
- 6、服务器处理请求
- 7、服务器返回一个
HTTP
响应 - 8、浏览器显示
HTM
L - 9、浏览器发送请求获取嵌入在
HTML
中的资源(如图片、音频、视频、CSS
、JS
等等)
Socket 和 WebSocket
Socket
其实并不是一个协议,而是为了方便使用TCP
或UDP
而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。Socket
是应用层与TCP/IP
协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket
其实就是一个门面模式,它把复杂的TCP/IP
协议族隐藏在Socket
接口后面,对用户来说,一组简单的接口就是全部,让Socket
去组织数据,以符合指定的协议。当两台主机通信时,必须通过Socket
连接,Socket
则利用TCP/IP
协议建立TCP
连接。TCP
连接则更依靠于底层的IP
协议,IP
协议的连接则依赖于链路层等更低层次。WebSocket
则是一个典型的应用层协议。Socket
是传输控制层协议,WebSocket
是应用层协议。