目录
- 面试总结
- 问题总结与答案整理(仅供参考)
-
- 1. TCP三次握手和四次挥手
-
- 1.1 TCP三次握手和四次挥手的过程
- 1.2 为什么TCP建立连接需要三次握手,断开连接需要四次挥手
- 1.3 TCP四次挥手为什么有Time-Wait(等待2MSL)过程
- 1.4 TCP如果没有完成第四次挥手会发生什么
- 1.5 TCP第三次握手可以传输数据吗
- 2. TCP和UDP的区别
- 3. TCP的可靠传输
-
- 3.1 TCP如何确保可靠性传输
- 3.2 TCP的拥塞控制
- 3.3 TCP传输通信时,客户端突然断开连接,服务端如何判断
- 3.4 TCP的端口是为了区分什么
- 4. 常见的HTTP状态码
- 5. HTTP报文
-
- 5.1 HTTP请求报文和响应报文的组成
- 5.2 HTTP请求报文包含哪些方法,GET和POST的区别
- 6. HTTP和HTTPS的区别
- 7. HTTP1.0和1.1和2.0的区别
- 8. HTTPS的密钥交换过程
- 9. HTTP的缓存机制
- 10. 输入URL跳转网页的过程
- 11. 计算机网络四层协议,五层协议,七层协议
- 12. 什么是cookie和session,区别是什么, 禁用cookie怎么办
- 13. 页面加载不出来的原因
面试总结
计算机网络是面试Java开发工程师中的常客,平均下来基本上每次面试都会问个三五个,下面这些问题都是一些高频问题了,如果还要说一个更高频的话可能就是TCP的三次握手和四次挥手,URL网页跳转过程以及涉及到的相关协议,HTTPS的密钥交换过程
总的来说计算机网络的问题基本就涵盖在这一块,还是建议有个全面的了解
问题总结与答案整理(仅供参考)
1. TCP三次握手和四次挥手
1.1 TCP三次握手和四次挥手的过程
三次握手:
- 客户端向服务端发送一个SYN=1的请求报文
- 服务端向客户端发送一个ACK=1,SYN=1的确认报文
- 客户端向服务端发送一个ACK=1的确认报文
四次挥手:
- 客户端发送一个FIN=1的报文,并且停止发送数据
- 服务端收到报文后,向客户端发送一个ACK=1的确认报文
- 服务端最后的数据发送完毕后,向客户端发送一个FIN=1的报文,并且停止发送数据
- 客户端收到后,发回一个ACK=1的确认报文
1.2 为什么TCP建立连接需要三次握手,断开连接需要四次挥手
TCP建立连接需要三次握手的原因在于只有经过三次握手之后客户端与服务端才能都确认自己的发送与接收是正常的
第一次握手:客户端无法确认任何东西,服务端能够确认客户端发送正常,自己接收正常
第二次握手:客户端能够确认自己和服务端均收发正常,服务端依然只能怪确认客户端发送正常,自己接收正常
第三次握手:双方都能确认自己和对方收发正常
断开连接需要四次挥手的原因在于客户端或者服务端在发出连接释放的通知后,只能代表自己没有数据要发送了,而对方有可能还有数据要发送
前两次挥手:只能表明客户端没有数据要发送了,但服务端可能还有数据要发送,所以客户端处于一个半关闭状态
后两次挥手:代表服务端也没有数据要发送了,待客户端确认后即可断开连接
1.3 TCP四次挥手为什么有Time-Wait(等待2MSL)过程
这是为了保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN=1报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL(maximum segment lifetime)时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器
1.4 TCP如果没有完成第四次挥手会发生什么
服务端发送FIN数据包并携带ACK至客户端之后直接断开连接,如果客户端没有收到这个FIN数据包,那么客户端会一直处于等待关闭状态
1.5 TCP第三次握手可以传输数据吗
可以传输数据,但是会消耗序列号
上述几个问题推荐通过两张动图-彻底明白TCP的三次握手与四次挥手进行一个更全面的了解
2. TCP和UDP的区别
- TCP是面向连接的,提供可靠的数据传输服务,而UDP是无连接的,是尽最大努力交付的数据传输
- TCP面向的是字节流服务,而UDP是面向报文段的
- TCP是点对点的,而UDP支持一对多,多对一,多对多等服务
- TCP的开销大,速度慢,UDP的开销小,速度快。
3. TCP的可靠传输
3.1 TCP如何确保可靠性传输
- 校验和:发送方在发送数据之前会将发送的数据包的二进制相加然后取反计算校验和,并进行校验和的填充,接收方在收到数据后会对数据以同样的方式进行计算,求出校验和,与发送方的进行对比
- 确认重传:接收方收到发送方发送的数据会给发送方发送确认报文
- 超时重传:发送方在发送完数据后等待一个时间,时间到达没有接收到确认报文,那么对刚才发送的数据进行重新发送
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议
- 拥塞控制:简而言之就是当网络拥塞时会减少数据的发送,详情见3.2
3.2 TCP的拥塞控制
TCP的拥塞控制采用了四种算法: 慢开始,拥塞避免,快重传和快恢复
这里推荐大家一个我觉得写的挺好的一个博客:TCP的拥塞控制(详解)
3.3 TCP传输通信时,客户端突然断开连接,服务端如何判断
TCP设有一个保活计时器,如果客户端出现故障,服务器不会一直等待。服务器每收到一次客户端的请求都会重新复位这个计时器,时间通常设置为2小时,如果两小时没有收到客户端的任何数据,服务端就会每隔75分钟发送一个探测报文,如果连续发送10个探测报文都没有反应,服务端就会认为客户端出了故障,从而关闭连接
3.4 TCP的端口是为了区分什么
端口号的主要作用是表示一台计算机中的特定进程所提供的服务。网络中的计算机是通过IP地址来代表其身份的,它只能表示某台特定的计算机,但是一台计算机上可以同时提供很多个服务,如数据库服务、FTP服务、Web服务等,我们就通过端口号来区别相同计算机所提供的这些不同的服务
4. 常见的HTTP状态码
状态码分类:
1XX:信息性状态码,表示服务器收到请求正在处理
2XX:成功状态码,表示请求成功
3XX:重定向状态码,表示需要进一步的操作以完成请求
4XX:客户端错误状态码,表示服务器无法处理请求
5XX:服务端错误状态码,表示服务器处理请求出错
常见状态码:
301:永久重定向状态码,请求的资源被永久的移动到了新的URI; 302(307):临时重定向状态码; 304:未修改,所请求的资源未修改; 305:使用代理,所请求的资源需要代理访问
400:客户端请求的语法错误; 401:请求要求用户的身份认证; 403:Forbidden,请求的资源禁止访问; 404:NotFound,没有找到资源
500:服务器内部错误,无法处理请求
5. HTTP报文
5.1 HTTP请求报文和响应报文的组成
HTTP请求报文由请求行,请求头,以及请求正文组成
HTTP响应报文由响应行,响应头,以及响应正文组成
详细解释请见博客HTTP请求、响应报文格式
5.2 HTTP请求报文包含哪些方法,GET和POST的区别
HTTP请求报文包含的方法有GET,POST,PUT,DELETE,OPTIONS,HEAD,CONNECT等
GET和POST的区别:Get主要用来获取资源,Post主要用来传输数据
- Get请求的数据是直接加在URL后面,以?号作为分隔的,而Post的请求数据是放在请求正文里的
- Get请求的数据大小会有限制,HTTP协议本身没有对这个URL长度有限制,但是特定浏览器与服务器对其有限制
- Post与Get相比更加的安全,因为其数据存放在请求正文里,而不是放在URL后面进行明文传输的
6. HTTP和HTTPS的区别
- HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用
- HTTP的信息是明文传输的,而HTTPS则是具有安全性的加密传输协议
- HTTP协议的默认端口一般使用的是80,HTTPS协议则是443
7. HTTP1.0和1.1和2.0的区别
这里主要知道HTTP1.0和1.1的区别就行,同时需要对HTTP2.0的改进有一定了解就行
HTTP1.0和1.1 的区别(详情见HTTP1.0和HTTP1.1和HTTP2.0的区别)
- HTTP1.1支持长连接
- HTTP1.1更节约带宽
- HTTP1.1支持host域
- HTTP1.1引入了更多的缓存控制策略
- HTTP1.1新增了24个错误状态响应码
8. HTTPS的密钥交换过程
简单来说分为以下过程(详情请见HTTPS加密过程):
- 客户端向服务端请求信息
- 服务端将自己的证书公钥发送给客户端
- 客户端验证服务端的公钥是否有效,有效则生产一个随机值,然后用证书的公钥加密这个随机值发送给服务端
- 服务端用证书私钥解密得到这个随机值作为密钥对传输内容进行加密并发送给客户端
- 客户端收到后用之前生成的随机值密钥对内容进行解密
9. HTTP的缓存机制
HTTP缓存根据是否需要重新向服务端发送请求主要分为两大类:强制缓存和对比(协商)缓存
这个在实际面试过程中问的还是很少很少,如果想详细了解的推荐大家去看HTTP缓存机制详解
10. 输入URL跳转网页的过程
跳转网页的过程主要为以下几步:
- 输入URL后浏览器使用DNS协议获取域名对应的IP地址
- 客户端与服务端建立TCP连接
- 客户端发送HTTP请求
- 服务端收到请求后返回HTTP报文
- 浏览器渲染解析报文
这里面试官通常还会问两个问题
- DNS协议的域名解析过程
- URL跳转网页过程中涉及到的协议
关于上述问题推荐博客:从输入URL到页面加载发生了什么
11. 计算机网络四层协议,五层协议,七层协议
四层协议:网络接口层,网际层,运输层,应用层
五层协议:物理层,数据链路层,网络层,运输层,应用层
七层协议:物理层,数据链路层,网络层,运输层,会话层,表示层,应用层
其中五层协议最好知道每层协议的作用与功能
12. 什么是cookie和session,区别是什么, 禁用cookie怎么办
cookie和session都是用来跟踪浏览器用户身份的会话方式
cookie和session的区别:
- cookie可以存储在浏览器或者本地,session只能存储在服务器
- session比cookie更加安全,因为攻击者可以分析存放在本地的cookie进行cookie欺骗
- session会在一定时间保存在服务器上,访问增多时会占用服务器性能
- cookie保存的数据长度有限制,很多浏览器都限制一个站点最多保存20个cookie
浏览器如果禁用cookie怎么使用session:
可以通过对URL进行重写,把sessionID附加在URL路径的后面
13. 页面加载不出来的原因
页面加载不出来的原因主要如下:
- 自己网络问题,比如网线是否插好,网卡驱动是否工作正常
- DHCP服务异常
- 服务器出问题
- 浏览器对这个网页不兼容
- 被墙了
同时可能有的面试官还会问网页卡顿慢的原因