网络编程面试题
1. 计算机网络的各层协议及作用?
- OSI七层模型:大而全,但是比较复杂、而且是先有了理论模型,没有实际应用。
- TCP/IP四层模型:是由实际应用发展总结出来的,从实质上讲,TCP/IP只有最上面三层,最下面一层没有什么具体内容,TCP/IP参考模型没有真正描述这一层的实现
- 五层模型:五层模型只出现在计算机网络教学过程中,这是对七层模型和四层模型的一个折中,既简洁又能将概念阐述清楚。
2. TCP和UDP的区别?
3. UDP 和 TCP 对应的应用场景是什么?
- TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:FTP文件传输、HTTP / HTTPS
- UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:包总量较少的通信,如 DNS 、SNMP等、视频、音频等、多媒体通信广播通信
4. 详细介绍一下 TCP 的三次握手机制?
- 第一次握手:客户端请求建立连接,向服务端发送一个同步报文,等待服务器确认。
- 第二次握手:服务端收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文
- 第三次握手:客户端收到服务端的确认后,向服务端发送一个确认报文,完成三次握手
5. 为什么需要三次握手,而不是两次?
-
三次握手才能让双方均确认自己和对方的发送和接收能力都正常。
-
第一次握手:客户端只是发送处请求报文段,什么都无法确认,而服务器可以确认自己的接收能力和对方的发送能力正常;
-
第二次握手:客户端可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;
-
第三次握手:服务器可以确认自己发送能力和接收能力正常,对方发送能力和接收能力正常;
-
6. 为什么要三次握手,而不是四次?
- 因为三次握手已经可以确认双方的发送接收能力正常,双方都知道彼此已经准备好,而且也可以完成对双方初始序号值得确认,也就无需再第四次握手了。
- 第一次握手:服务端确认“自己收、客户端发”报文功能正常。
- 第二次握手:客户端确认“自己发、自己收、服务端收、客户端发”报文功能正常,客户端认为连接建立。
- 第三次握手:服务端确认“自己发、客户端收”报文功能正常,此时双方均建立连接,可以正常通信。
7. 详细介绍一下 TCP 的四次挥手过程?
-
第一次挥手:客户端向服务端发送连接释放报文,主动关闭连接,同时等待服务端的确认。
-
第二次挥手:服务端收到连接释放报文后,立即发出确认报文,但 此时TCP 连接处于半关闭状态,即客户端到服务端的连接已经释放了,但是服务端到客户端的连接还未释放
-
第三次挥手:服务端向客户端发送连接释放报文,主动关闭连接,同时等待 A的确认。
-
第四次挥手:客户端收到服务端的连接释放报文后,立即发出确认报文
8. 为什么连接的时候是三次握手,关闭的时候却是四次握手?
- 服务器在收到客户端的FIN报文段后,可能还有一些数据要传输,所以不能马上关闭连接,但是会做出应答,返回 ACK 报文段。接下来可能会继续发送数据,在数据发送完后,服务器会向客户单发送 FIN 报文,表示数据已经发送完毕,请求关闭连接。服务器的ACK和FIN一般都会分开发送,从而导致多了一次,因此一共需要四次挥手。
9. HTTP常见的状态码有哪些?
- 200:服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
- 301 : (永久移动) 请求的网页已永久移动到新位置。
- 302: 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 400 :客户端请求有语法错误,不能被服务器所理解。
- 403 :服务器收到请求,但是拒绝提供服务。
- 404 :(未找到) 服务器找不到请求的网页。
- 500: (服务器内部错误) 服务器遇到错误,无法完成请求。
10. HTTP 常用的请求方式?
11. GET请求和POST请求的区别?
- GET使用URL或Cookie传参,而POST将数据放在BODY中”,这个是因为HTTP协议用法的约定
- GET方式提交的数据有长度限制,则POST的数据则可以非常大
- POST比GET安全,因为数据在地址栏上不可见
- GET和POST最大的区别主要是GET请求是幂等性的,POST请求不是。
- 幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。
12. HTTP请求报文和响应报文的格式?
-
请求报文格式:请求行(请求方法+URI协议+版本)、请求头部、空行、请求主体
-
响应报文:状态行(版本+状态码+原因短语)、响应首部、空行、响应主体
13. HTTP 与 HTTPS 的区别?
14. 在浏览器中输入www.baidu.com后执行的全部过程?
- 域名解析(域名 www.baidu.com 变为 ip 地址)
- 发起 tcp 的三次握手,建立 tcp 连接。浏览器会以一个随机端口向服务端的 web程序 80 端口发起 tcp 的连接。
- 建立 tcp 连接后发起 http 请求。
- 服务器响应 http 请求,客户端得到 html 代码。服务器 web 应用程序收到 http 请求后,就开始处理请求,处理之后就返回给浏览器 html 文件。
- 浏览器解析 html 代码,并请求 html 中的资源。
- 浏览器对页面进行渲染,并呈现给用户。
15. 什么是 Cookie 和 Session ?
- HTTP Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。
- Session 代表着服务器和客户端一次会话的过程。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 Session 超时失效时会话结束。
16. Cookie 和 Session 是如何配合的呢?
- 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session ,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名。
- 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
17. Cookie和Session的区别?
- 作用范围不同:Cookie 保存在客户端(浏览器),Session 保存在服务器端。
- 存取方式的不同:Cookie 只能保存 ASCII,Session 可以存任意数据类型(一般是用户信息)
- 有效期不同:Cookie 可设置为长时间保持;Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效
- 安全性:Cookie不安全、Session安全
- 存储大小不同:单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie。
18. SQL注入是什么,如何避免SQL注入?
- SQL 注入就是在用户输入的字符串中加入 SQL 语句,如恶意拼接查询、利用注释执行非法命令、传入非法参数、添加额外条件
- 避免SQL注入的一些方法:
- 限制数据库权限,给用户提供仅仅能够满足其工作的最低权限
- 对进入数据库的特殊字符(’”\尖括号&*;等)转义处理
- 提供参数化查询接口,不要直接使用原生SQL
19. 什么是Socket?
- 套接字socket开发网络应用程序被广泛采用,以至于成为事实上的标准
- 通信的两端都要有socket,是两台机器间通信的端点,网络通信其实就是socket间的通信
- socket允许程序把网络连接当初一个流,数据在两个socket间通过IO传输
- 一般主动发起通信的应用程序属于客户端,等待通信请求的为服务端