计算机网络面试题
1.三次握手和四次挥手
2.为什么要三次握手?为什么要四次挥手
第三次握手是为了防止失效的请求发送到服务端,让服务器打开连接
客户端发出请求后,如果请求在网络中滞留,那么服务器将要隔很长一段时间才会发送确认报文。这时客户端接收不到服务器的报文时,就会等待一个超时重传时间后,继续发送请求
但是,滞留的请求最终还会发送到服务器,如果是两次握手,服务器会打开两个连接,从而造成资源浪费。三次握手的话服务器就会忽略此次请求,不会打开连接
四次挥手:
当服务器接收到FIN报文后,进入CLOSE_WAIT状态,此时等待服务器发送所有未发完的数据,传送完毕发送FIN报文
3.为什么是两倍的 TIME_WAIT
1.确保最后一个确认报文能够到达,如果客户端接收不到确认报文,就会再次发送请求
2.保证在本次连接中的所有报文消失,使下一次连接不会有旧报文
4.TIME_WAIT 过多会出现什么问题,怎么解决?
5.TCP和UDP的区别
- TCP面向连接,UDP无连接
- TCP可靠传输,保证数据不丢包;UDP不可靠传输
- TCP面向字节流,UDP面向报文
- TCP只支持点对点通信,UDP支持一对一,一对多,多对多通信
- TCP首部20字节,UDP首部8字节
6.GET 和POST 的区别
- GET用于获取数据,POST用于提交数据
- GET把参数暴露在URL中,POST将参数封装到请求体
- GET不安全,因为把参数暴露在URL中,POST安全
- GET只支持URL编码,POST支持多种编码方式
- GET的长度有限制,POST没有
- GET的参数只能是ASCII码,POST可以传输二进制
7.为什么要用长连接
为了复用TCP连接,防止每次请求都要建立TCP连接
长轮询与短轮询
长轮询:服务器收到请求后没有找到资源就会将连接挂起,直至找到资源或超时
短轮询:服务器收到请求并处理完毕后就立即断开
8.同步和异步的区别
同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。在网络传输中同步就是发送方收到接收方返回的数据才开始下一次传输。发送方和接收方的时钟是统一的、字符与字符间的传输是同步无间隔的。
异步:执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。异步传输是不要求发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。
区别:
- 异步传输是面向字符的传输,而同步传输是面向比特的传输
- 异步传输通过字符起始和停止码抓住再同步的机会,而同步传输则是在数据中抽取同步信息。
- 异步传输对时序的要求较低,同步传输往往通过特定的时钟线路协调时序。
- 异步传输相对于同步传输效率较低。
9.TCP 如何保证可靠传输
- 超时重传
- 差错校验
- 流量控制(为了让接收方能来得及接收)
- 拥塞控制(为了降低整个网络的拥塞程度)
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
- 滑动窗口与数据包编号排序
10.简述 TCP 滑动窗口
窗口是缓存的一部分,用于存储字节流
发送方和接收方都各有一个窗口,接收方通过TCP的窗口字段告诉发送方窗口大小,然后发送方调整自己的窗口
发送方窗口内的字节都允许被发送,接收方窗口内的字节都允许被接受。发送时,发送窗口左边所有字节都已发送并收到确认,窗口向右滑动,直至所有字节都已发送并收到确认。接收方左边字节收到后就向发送方发送确认,并向右滑动窗口
接收方只对最后一个按序到达的字节进行确认,如发送方得到30这个字节的确认后,就知道30前的字节都已被接收
11.DNS 查询流程
查询分为递归和迭代
递归:本机向本地域名服务器找某地址IP,找不到就请求根域名服务器,根域名服务器对应域名顶级、二级…的IP地址。然后把结果返回给主机
迭代:本机访问本地域名服务器,本地域名服务器问根域名服务器,根返回对应的顶级;本地问根,跟返回对应的二级…最后本地将结果返回给主机