zoukankan      html  css  js  c++  java
  • 面试

    1. TCP三次握手/TCP建立连接的过程、TCP四次挥手/TCP关闭连接的过程

      • 三次握手过程

        • 举例:1听得到吗;2我听得到,你呢;3我也听到了
      • 四次挥手过程

        • 举例:1老师,要下课了;2好,我布置下作业;3说完了下课;4老师再见(学生=客户端,老师=服务端,下课的时候学生告诉老师要下课,同时说明了听不进去课了)

        • 第1次挥手:客户端向服务端发起,服务端收到信息后就能确定客户端已经停止发送数据。

        • 第2次挥手:服务端向客户端发起,客户端收到消息后就能确定服务端已经知道客户端不会再发送数据。

        • 第3次握手:服务端向客户端发起,客户端收到消息后就能确定服务端已经停止发送数据。

        • 第4次挥手:客户端向服务端发起,服务端收到信息后就能确定客户端已经知道服务端不会再发送数据。

      • TCP为什么不是两次/四次握手、三次挥手?见:https://www.cnblogs.com/OFSHK/p/14580166.html

      • TCP的六种标志

        • SYN(建立联机)、 ACK(确认) 、PSH(传送) 、FIN(结束)、 RST(重置) 、URG(紧急)
      • 三次握手中,TCP客户端最后还要发送一次确认的目的?

        • 防止已经失效的连接请求报文突然又传送到服务器,从而导致不必要的错误和资源的浪费。
      • 如果服务器端没有收到客户端的第三次握手会怎么样?

        • 会发生DDOS/SYN Flood攻击。也就是说客服端没有发送确认连接的信息给服务器,服务器无法完成第三次握手,但服务器会不停的重试并等待一定时间后放弃这个未完成的连接,这段时间叫做SYN timeout,大约持续30秒-2分钟左右。若是一个用户在连接时出现问题导致服务器的一个线程等待1分钟其实问题不大,但如果有人用软件大量模拟这种情况,那么服务器会去处理这些大量的半连接信息,从而会而消耗大量的系统资源和网络带宽,这样服务器就不会再有空余去处理普通用户的正常请求(因为客户的正常请求比率很小)而导致无法工作。
      • 若最终ACK丢失(第四次挥手失败)会怎样?

        • 被动关闭方将重新发送FIN(第三次挥手),主动关闭方必须维护状态信息TIME_WAIT,保证自己可以接收,然后再重发最终ACK.不能让主动方发送完报文以后立马进入CLOSE状态
      • 每个过程的状态?

      • TIME_WAIT为了解决什么问题?

        • TCP客户端最后还要等待2*MSL(最长报文段寿命)的目的:1保证客户端发送的最后一个ACK报文能够达到服务器;2防止已经失效的关闭连接报文段出现在本连接中。
      • 三次挥手中TIME-WAIT、CLOSE-WAIT (状态)是出现在什么阶段?作用是什么?

        • TIME-WAIT:出现在TCP四次挥手的最后,需要等待2*MSL(最长报文段寿命)的时间,目的:保证客户端发送的最后一个ACK报文能够达到服务器;防止已经失效的关闭连接报文段出现在本连接中。

        • CLOSE-WAIT:出现在TCP四次挥手的第一次挥手,客户端发送请求给服务器,之后服务器处于CLOSE-WAIT 被动关闭状态。作用:表示被动关闭的一方/客户端的状态

      • 最后等待时间如果MSL=0怎么办? 会发生什么情况?

      • TCP第四次挥手时,为什么要等待2MSL才进行关闭

      • accept是在三次握手的哪一步,为什么?

      • seq是怎么取的

        • seq是顺序号码(TCP连接中传送的字节流中的每个字节是都按顺序编号的)
      • 描述一下TCP是怎么发送文件的(不用说bind listen accept那些,最后只答了将文件Read进内存,然后按照缓冲区当前的index分批发送)

      • TCP有了checksum还可能会造成数据错乱吗

      • 重传模式:定时重传、请求重传、FEC 选择重传

      • SYN泛洪攻击/SYN(洪水)攻击/UDP洪水攻击

        • 属于DOS攻击的一种。主要是利用大量UDP报文,冲击目标IP地址,有时候可能会把目标服务器打瘫,但是更多时候是把服务器的带宽堵死了。(服务器带宽:如果现在有100M带宽,1个客户10M的话,就可以提供给10个客户使用(但是一般提供不了100/10这样的速度,只是理论带宽)。

        • DDOS攻击和其他类型的DoS攻击手段(诸如UDP、SYN、Fraggle)是不同类型的攻击手段。

        • DDOS攻击:若有10000个客户端都和该服务端进行连接,发送SYN,服务端收到之后,这些客户端却不再理会服务端的回复,然而此时服务端的资源却都用accept()分配了

    2. TCP和UDP。

      • 具体重要问题详情见:https://www.cnblogs.com/OFSHK/p/14572366.html

      • tcp如何保证数据安全性的,磁盘如何保证数据不丢的,应对坏道情况?

      • 为什么有了TCP还需要UDP,能够保证传输的可靠性不是更好?因为TCP比UDP慢+成本更高

      • TCP的快速重传机制?在接收到相同ACK后,推断出丢失报文段起始序号,然后立即重传此报文

      • TCP什么时候发生快速重传?TCP收到3个相同的ACK会判定数据包丢失,然后重传。

      • TCP快速重传重传哪些数据包? 接收方的确认号是N,那么发送方就发序列号为N(起始)的M字节(M由双方协商的MSS决定)。这个详情可以见公众号:车小胖网络。

      • 电梯里面暂时断网用TCP还是UDP

      • TCP具有超时重传策略?如果一直超时怎么办?如何解决?

      • 快速重传和超时重传

      • 接收端没收到报文时发送端如何重传?

      • 如何判定tcp报文/包是否发送完整/成功?

        • TCP提供确认(ACK)机制。(该机制可以在通信过程中不对每一个TCP数据包发出单独的确认包,而是在传送数据时把确认信息一起传出,并且可以一次确认多个数据报,大大提高了网络利用率和传输效率。)
      • TCP粘包和半包问题?解决过粘包问题吗?怎么拆包解包的?还有其它更多的解决方案吗? https://www.cnblogs.com/OFSHK/p/14580161.html

      • TCP数据报文的结构(应用程序+TCP/UDP报文头部+IP报文头部+以太网头部)

      • ARP协议的工作原理和流程,路由器是如何转发的?(路由表的工作原理)

      • 点对点和端对端

      • TCP的面向连接中连接”指什么?

        • 这里的的“连接”只是抽象的连接,即服务端和客户端进行指定端口的数据传输,由于TCP协议是对端传送数据的。所以两端在通讯时,就相当于通过抽象的信道,将两个端口进行连接,从而形成抽象的“连接”。
    3. DNS解析:DNS解析是由专门的域名解析服务器来完成的,是把域名指向网站空间IP

    4. DNS解析全过程

    5. DNS被劫持了怎么办

    6. 浏览器输入url回车到页面展示的全过程(讲的越详细越好)

      1. 浏览器输入域名/URL。(我们先默认浏览器是用http协议)

      2. DNS解析。浏览器查找域名对应的IP(浏览器 在DNS服务器上 查找输入的URL对应的IP地址)

      3. 浏览器根据IP和目标服务器在80端口上建立TCP连接

      4. 浏览器通过HTTP协议发送GET请求(有些服务会做重定向处理,这样子浏览器多走一步,去跟踪重定向地址)

      5. 服务器处理请求

      6. 服务器响应请求,返回状态码 200 ok 、报文、HTML响应

      7. 释放TCP连接(TCP四次挥手)

      8. 浏览器渲染并显示页面HTML

    7. 从按下键盘到屏幕上出现字符中间的过程?

      1. 键盘被按下后,产生了硬件中断信号。

      2. 计算机高级中断控制器IOAPIC选择CPU处理核心以及软件中断编号,并发送给中断描述符表IDT处理。

      3. 计算机根据IDT选择中断处理函数。

      4. 处理函数处理并通知端口驱动获取按键的信息。

      5. 端口驱动将数据封装,以IRP形式传递给上层处理程序。

      6. 等待输入的进程获得数据,处理并交给目标进程。

      7. 目标进程显示输入。

    8. 短连接是什么?每次发送请求都要重新建立tcp请求,即三次握手,非常浪费性能、

    9. 讲一下 HTTP协议

      • HTTP有哪几个版本以及各自的区别/HTTP1.0、1.1、2.0、3.0之间的区别

        1. HTTP1.0:无状态、无连接、无host头域、不允许断点续传、不能只传输对象的一部分要传输整个对象

        2. HTTP1.1:长连接、请求管道化、增加缓存处理(新的字段如cache-control)、增加Host字段,支持断点传输等

        3. HTTP2.0:二进制分帧、头部压缩、多路复用

        4. HTTP 3.0:减少了tcp三次握手时间、优化了重传策略 降低后续重传计算的消耗、更合适的流量控制

      • 请求行、请求头、请求体、响应行、响应头、响应体都包括什么

      • HTTP头部信息?= HTTP的首部有哪些?

        1. 通用首部:表示一些通用信息,如date表示报文创建时间

        2. 请求首部:请求报文独有,如cookie、If-Modified-Since

        3. 响应首部:响应报文独有,如set-cookie、Last-Modified

        4. 实体首部:描述实体部分,如allow用来描述可执行的请求方法、content-type描述主体类型、content-Encoding描述主体的编码方式

      • HTTP的长连接是怎么实现的

        • 由服务器端决定什么时候返回数据
      • 项目中用的Socket是长连接吗,它是怎么实现长连接的

      • 项目中用Socket进行通信时,用什么API读写数据的,是阻塞还是非阻塞的

      • get和post区别

      • HTTP请求的各种方法

        • get:请求指定的页面信息并返回响应主体,一般用于数据的读取

        • post:向指定资源提交数据,请求服务器去处理

        • head:获取服务器的响应头信息,常用于客户端查看服务器的性能

        • options:请求服务器返回该资源所支持的所有HTTP请求方法,常用于客户端查看服务器的性能

      • HTTP怎么解决TCP粘包问题的

      • 常用的状态码 1xx、2xx、3xx、4xx、5xx讲一下;HTTP 301状态码表示什么意思?还有什么其它的状态码? https://barryyeee.github.io/InterviewGuide/Chapter3/HTTP.html

    10. 讲一下HTTPS协议

      • HTTP和HTTPS区别

      • HTTPS连接的过程

      • HTTPS加密过程

      • SSL的基本原理?SSL的工作原理分为三部分:握手协议、记录协议、警报协议

      • 了解什么加密算法

      • 对称加密算法:数据加密算法DES

      • 非对称加密算法了解吗:RSA算法

      • CA证书的验证过程

      • Session和Cookie异同

        • 共同点:都是用来跟踪浏览器用户身份的会话方式

        • 区别:

          • cookie数据保存在浏览器,session数据保存在服务器

          • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑安全性使用session

          • session会在一定时间内保存在服务器上,当访问增多是会占用服务器性能,考虑性能使用cookie

      • 如何解决分布式session问题

    11. 常见路由算法

    12. 交换机路由器区别和工作方式

    13. 在网络通信当中,如何确认对方是否在线?

    14. socket

      • 用过Socket编程吗?进行Socket编程的具体步骤是怎么样的?见:https://www.cnblogs.com/OFSHK/p/14574589.html

      • 同一个计算机上的应用能使用Socket进行通信吗?

        • 可以。回答这个问题我们首先需要知道Socket的工作机制才行(自行查找,或见上个小问题的链接)。具体实现过程如下:

          1. 服务端:将Socket绑定在本地IP的某个端口,如5000,然后启动监听并开始接受客户端;

          2. 客户端:创建Socket以后,连接到本地IP的5000端口即可;

          3. 最后确认连接,双方收发数据。

      • webSocket

    15. 网络模型

    16. 写过Web编程/编程吗?怎么分派请求的?

    17. 讲一下web服务器常见的端口号

      • HTTP80、HTTPS443、Apache8080、FTP21、SSH22、MySQL3306、Redis6379
  • 相关阅读:
    IntelliJ Idea 常用快捷键列表
    管理Django1.9静态文件static
    django模板中如何导入js、css等外部文件
    Struts2+hibernate 结合,实现登陆校验
    python统计文档中词频
    Hibernate连接各种数据库的配置
    hibernateDAO层基本的增删改查
    vue2.0+element+node+webpack搭建的一个简单的后台管理界面
    WEB 前端开发插件整理
    机器学习之条件随机场(八)
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14580170.html
Copyright © 2011-2022 走看看