-
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才进行关闭
- 保证TCP协议的全双工连接能够可靠关闭+保证这次连接的重复数据段从网络中消失(https://www.cnblogs.com/yyxianren/p/11212445.html)
-
accept是在三次握手的哪一步,为什么?
- 被放在三次握手之后。原因:涉及到DDPS攻击。https://blog.csdn.net/Vivid_110/article/details/51000513?locationNum=5&fps=1
-
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()分配了
-
-
-
TCP和UDP。
-
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协议是对端传送数据的。所以两端在通讯时,就相当于通过抽象的信道,将两个端口进行连接,从而形成抽象的“连接”。
-
DNS解析:DNS解析是由专门的域名解析服务器来完成的,是把域名指向网站空间IP
-
DNS解析全过程
-
DNS被劫持了怎么办
-
浏览器输入url回车到页面展示的全过程(讲的越详细越好)
-
浏览器输入域名/URL。(我们先默认浏览器是用http协议)
-
DNS解析。浏览器查找域名对应的IP(浏览器 在DNS服务器上 查找输入的URL对应的IP地址)
-
浏览器根据IP和目标服务器在80端口上建立TCP连接
-
浏览器通过HTTP协议发送GET请求(有些服务会做重定向处理,这样子浏览器多走一步,去跟踪重定向地址)
-
服务器处理请求
-
服务器响应请求,返回状态码
200 ok
、报文、HTML响应 -
释放TCP连接(TCP四次挥手)
-
浏览器渲染并显示页面HTML
-
-
从按下键盘到屏幕上出现字符中间的过程?
-
键盘被按下后,产生了硬件中断信号。
-
计算机高级中断控制器IOAPIC选择CPU处理核心以及软件中断编号,并发送给中断描述符表IDT处理。
-
计算机根据IDT选择中断处理函数。
-
处理函数处理并通知端口驱动获取按键的信息。
-
端口驱动将数据封装,以IRP形式传递给上层处理程序。
-
等待输入的进程获得数据,处理并交给目标进程。
-
目标进程显示输入。
-
-
短连接是什么?每次发送请求都要重新建立tcp请求,即三次握手,非常浪费性能、
-
讲一下 HTTP协议
-
HTTP有哪几个版本以及各自的区别/HTTP1.0、1.1、2.0、3.0之间的区别
-
HTTP1.0:无状态、无连接、无host头域、不允许断点续传、不能只传输对象的一部分要传输整个对象
-
HTTP1.1:长连接、请求管道化、增加缓存处理(新的字段如cache-control)、增加Host字段,支持断点传输等
-
HTTP2.0:二进制分帧、头部压缩、多路复用
-
HTTP 3.0:减少了tcp三次握手时间、优化了重传策略 降低后续重传计算的消耗、更合适的流量控制
-
-
请求行、请求头、请求体、响应行、响应头、响应体都包括什么
-
HTTP头部信息?= HTTP的首部有哪些?
-
通用首部:表示一些通用信息,如date表示报文创建时间
-
请求首部:请求报文独有,如cookie、If-Modified-Since
-
响应首部:响应报文独有,如set-cookie、Last-Modified
-
实体首部:描述实体部分,如allow用来描述可执行的请求方法、content-type描述主体类型、content-Encoding描述主体的编码方式
-
-
HTTP的长连接是怎么实现的
- 由服务器端决定什么时候返回数据
-
项目中用的Socket是长连接吗,它是怎么实现长连接的
-
项目中用Socket进行通信时,用什么API读写数据的,是阻塞还是非阻塞的
-
get和post区别
-
get:请求指定的页面信息并返回响应主体,一般用于数据的读取
-
post:向指定资源提交数据,请求服务器去处理
-
具体见:https://barryyeee.github.io/InterviewGuide/Chapter3/HTTP.html
-
-
HTTP请求的各种方法
-
get:请求指定的页面信息并返回响应主体,一般用于数据的读取
-
post:向指定资源提交数据,请求服务器去处理
-
head:获取服务器的响应头信息,常用于客户端查看服务器的性能
-
options:请求服务器返回该资源所支持的所有HTTP请求方法,常用于客户端查看服务器的性能
-
-
HTTP怎么解决TCP粘包问题的
-
常用的状态码 1xx、2xx、3xx、4xx、5xx讲一下;HTTP 301状态码表示什么意思?还有什么其它的状态码? https://barryyeee.github.io/InterviewGuide/Chapter3/HTTP.html
-
-
讲一下HTTPS协议
-
HTTP和HTTPS区别
-
HTTPS连接的过程
-
HTTPS加密过程
-
SSL的基本原理?SSL的工作原理分为三部分:握手协议、记录协议、警报协议
-
了解什么加密算法
-
对称加密算法:数据加密算法DES
-
非对称加密算法了解吗:RSA算法
-
CA证书的验证过程
-
Session和Cookie异同
-
共同点:都是用来跟踪浏览器用户身份的会话方式
-
区别:
-
cookie数据保存在浏览器,session数据保存在服务器
-
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑安全性使用session
-
session会在一定时间内保存在服务器上,当访问增多是会占用服务器性能,考虑性能使用cookie
-
-
-
如何解决分布式session问题
-
-
常见路由算法
-
静态路由算法/非自适应路由算法:管理员手动配置路由信息
-
动态路由算法/自适应路由算法:距离-向量路由算法RIP、链路状态路由算法OSPF
-
-
交换机路由器区别和工作方式
-
在网络通信当中,如何确认对方是否在线?
-
socket
-
用过Socket编程吗?进行Socket编程的具体步骤是怎么样的?见:https://www.cnblogs.com/OFSHK/p/14574589.html
-
同一个计算机上的应用能使用Socket进行通信吗?
-
可以。回答这个问题我们首先需要知道Socket的工作机制才行(自行查找,或见上个小问题的链接)。具体实现过程如下:
-
服务端:将Socket绑定在本地IP的某个端口,如5000,然后启动监听并开始接受客户端;
-
客户端:创建Socket以后,连接到本地IP的5000端口即可;
-
最后确认连接,双方收发数据。
-
-
-
webSocket
-
-
网络模型
-
OSI七层协议模型哪七层+TCP/IP四层模型/哪五层+每层常用协议(https://blog.csdn.net/buknow/article/details/81148684?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control) 4层结构中只是把5层里的物理层和数据链路层 合在一起组成了物理层
-
HTTP在哪一层、TCP在哪一层、ARP在哪一层(应用层、传输层、数据链路层)
-
包丢了,tcp的发送端措施,除了重传机制,还有别的吗
-
数据包从一端发到另一端的流程,从协议栈的角度说,涉及到添加首部、寻址什么的,数据包从网卡出去后经历的过程
-
DNS哪个层的协议,底层用是哪个协议(DNS是应用层的协议,建立在UDP上的,所以底层是UDP协议)(补充:HTTP超文本传输协议、FTP文本传输协议、SMTP简单邮件传输协议都是在应用层上的,只不过底层是TCP协议。)
-
-
写过Web编程/编程吗?怎么分派请求的?
-
讲一下web服务器常见的端口号
- HTTP80、HTTPS443、Apache8080、FTP21、SSH22、MySQL3306、Redis6379