面试总结问题总结和回答整理(仅供参考)1. TCP握手和4次挥手1.1TCP3次握手和4次挥手过程1.2为什么TCP建立连接需要3次握手连接需要1.3 TCP次挥手。 4挥手为什么会有time-wait (等待2 MSL )流程1.4如果不挥手TCP第一次会发生什么1.5 TCP第一次挥手可以传输数据2. TCP和UDP的区别3. TCP的高可靠性传输3.1 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 .计算机
面试总结
计算机网络是面试Java开发工程师的常客,平均下来基本上每次面试都会问三五个问题。 下面的问题是高频问题。 如果再问高频问题,可能是TCP的3次握手和4次挥手、URL页面跳转过程和相关协议、HTTPS的密钥交换过程
一般来说,计算机网络问题基本上包含在这一部分,但建议全面理解
总结问题和整理答案(仅供参考)1. TCP次握手和4次挥手1.1TCP3次握手和4次挥手过程三次握手:
客户机向服务端发送SYN=1的请求消息服务端向客户机发送ACK=1,发送SYN=1的确认消息的客户机向服务端发送ACK=1的确认消息四次挥手:
客户端发送FIN=1的消息,数据服务端停止发送接收到的消息后,向客户端发送ACK=1的确认消息服务端最后的数据发送完成后,向客户端发送FIN=1的消息,发送数据发送ACK=1的确认消息1.2的理由是,为什么TCP建立连接需要3次握手,断开连接需要4次挥手TCP建立连接需要3次握手
第一个握手:客户端无法确认任何内容,服务端可以确认客户端已成功发送,自己已成功接收
第二次握手:客户端可以确认自己和服务端是否正常收发,服务端仍然只能责怪客户端是否正常发送,自己是否正常接收
第三次握手:双方都能够确认自己和对方的收发正常
断开连接需要挥手4次,是因为客户端或服务端发出断开连接的通知后,只表示自己没有要发送的数据,而对方可能还有要发送的数据
前两次握手:仅表示没有向客户端发送数据,但由于服务器可能仍在发送数据,因此客户端处于半关闭状态
后两次挥手:意味着服务端也没有数据发送,客户端确认后可以断开连接
1.3 TCP挥手4次为什么会有time-wait (等待2 MSL )过程? 这是为了确保客户端发送的最后一个ACK消息到达服务器。 由于此ACK消息可能会丢失,从服务器的角度来看,我已经发送了一条FIN=1消息,请求已到期,但客户端尚未响应。 我发送的请求到期的消息应该没有收到。 然后,服务器会再次重新发送,但客户端会在此2毫秒(MSL )时段收到此重新发送的消息,发送响应消息,然后重新启动2毫秒计时器
1.4如果不挥手TCP第一次,则哪个服务器发送FIN数据包,将ACK带到客户端后,断开直接连接。 如果客户端没有收到此FIN包,则客户端将等待关闭
1.5 TCP第一次握手可以传输数据吗? 可以传输数据,但会消耗序列号
这几个问题建议通过两张动态图TCP的三次握手和四次挥手来更全面地理解
2. TCP和UDP之间的差异TCP是面向连接的,提供可靠的数据传输服务,而UDP是无连接的,尽最大努力提供的数据传输TCP面向字节流服务,UDP是面向消息分段的TCP面向点服务多对多等服务TCP开销大、速度慢、UDP开销小3. TCP可信传输3.1 TCP如何确保可信传输校验和: 发送端将发送数据前发送的数据包的二进制数相加,然后逆运算计算校验和,进行校验和填充,接收端在收到数据后同样计算数据求出校验和。 与发送侧的比较确认重发:接收侧在接收到从发送侧发送的数据时,向发送侧发送确认消息的超时重发3360发送侧在发送了数据后,在到达未接收确认消息的时间时,重发刚才发送的数据的流程控制装置在接收侧赶不上发送侧的数据的处理的情况下,能够提示发送侧降低发送速率,防止分组丢失。 TCP使用的流控制协议是可变大小的滑动窗口协议拥塞控制单元:简单来说,在网络拥塞时减少数据的发送。 详细而言,在3.2 3.2 TCP的拥塞控制TCP的拥塞控制中采用了4个
种算法: 慢开始,拥塞避免,快重传和快恢复这里推荐大家一个我觉得写的挺好的一个博客: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:服务器内部错误,无法处理请求
HTTP请求报文由请求行,请求头,以及请求正文组成
HTTP响应报文由响应行,响应头,以及响应正文组成
详细解释请见博客HTTP请求、响应报文格式
HTTP请求报文包含的方法有GET,POST,PUT,DELETE,OPTIONS,HEAD,CONNECT等
GET和POST的区别:Get主要用来获取资源,Post主要用来传输数据
这里主要知道HTTP1.0和1.1的区别就行,同时需要对HTTP2.0的改进有一定了解就行
HTTP1.0和1.1 的区别(详情见HTTP1.0和HTTP1.1和HTTP2.0的区别)
简单来说分为以下过程(详情请见HTTPS加密过程):
客户端向服务端请求信息服务端将自己的证书公钥发送给客户端客户端验证服务端的公钥是否有效,有效则生产一个随机值,然后用证书的公钥加密这个随机值发送给服务端服务端用证书私钥解密得到这个随机值作为密钥对传输内容进行加密并发送给客户端客户端收到后用之前生成的随机值密钥对内容进行解密 9. HTTP的缓存机制HTTP缓存根据是否需要重新向服务端发送请求主要分为两大类:强制缓存和对比(协商)缓存
这个在实际面试过程中问的还是很少很少,如果想详细了解的推荐大家去看HTTP缓存机制详解
跳转网页的过程主要为以下几步:
输入URL后浏览器使用DNS协议获取域名对应的IP地址客户端与服务端建立TCP连接客户端发送HTTP请求服务端收到请求后返回HTTP报文浏览器渲染解析报文这里面试官通常还会问两个问题
DNS协议的域名解析过程URL跳转网页过程中涉及到的协议关于上述问题推荐博客:从输入URL到页面加载发生了什么 11. 计算机网络四层协议,五层协议,七层协议
四层协议:网络接口层,网际层,运输层,应用层
五层协议:物理层,数据链路层,网络层,运输层,应用层
七层协议:物理层,数据链路层,网络层,运输层,会话层,表示层,应用层
其中五层协议最好知道每层协议的作用与功能
cookie和session都是用来跟踪浏览器用户身份的会话方式
cookie和session的区别:
浏览器如果禁用cookie怎么使用session:
可以通过对URL进行重写,把sessionID附加在URL路径的后面 13. 页面加载不出来的原因
页面加载不出来的原因主要如下:
自己网络问题,比如网线是否插好,网卡驱动是否工作正常DHCP服务异常服务器出问题浏览器对这个网页不兼容被墙了同时可能有的面试官还会问网页卡顿慢的原因