前 言
作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端
☕专栏简介:纯手打总结面试题,自用备用
文章简介:计算机网络最基础、重要的8道面试题
A、2xx:表示请求成功
B、3xx:表示重定向状态,需要重新请求
C、400 找不到请求的资源
D、403 没有权限访问此网站
E、404 资源不存在
F、500 服务器内部错误、拒绝访问
解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
数据链路层:
在计算机网络中由于各种干扰的存在,物理链路是不可靠的。该层的主要功能就是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层的数据叫做帧。
网络层:
计算机网络中如果有多台计算机,怎么找到要发的那台?如果中间有多个节点,怎么选择路径?这就是路由要做的事。
该层的主要任务就是:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。
传输层:
当发送大量数据时,很可能会出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包。如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止。
简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输。
会话层:
虽然已经可以实现给正确的计算机,发送正确的封装过后的信息了。但我们总不可能每次都要调用传输层协议去打包,然后再调用IP协议去找路由,所以我们要建立一个自动收发包,自动寻址的功能。于是会话层出现了:它的作用就是建立和管理应用程序之间的通信。
表示层:
表示层负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式。
应用层:
应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。前端同学对应用层肯定是最熟悉的。
速记下:
应用层 人做好信息,往下发
表示层 翻译一下
会话层 打包
传输层 把包发给下层
网络层 报文:给包贴个ip地址的标签
数据链路层 帧:查表ip转mac,然后转成电信号
物理层 定义好各种信号的意思,线路和插口的格式,发送吧
最后,给大家横向对比下TCP/IP4层模型、5层模型和OSI七层模型的差别:
TCP协议是一种是一种面向连接,可靠的数据传输协议,为了在互联网上建立可靠的端到端的字节流设计。
第一次握手: 客户端向服务器端发送报文
证明客户端的发送能力正常。客户端发送一个SYN标记的包,Seq初始序列号x,发送完成后客户端进入SYN_SEND状态。
第二次握手:服务器端接收到报文并向客户端发送报文
证明服务器端的接收能力、发送能力正常;服务器返回确认包(ACK)应答,同时还要发送一个SYN包回去。ACK = x + 1,表示确认收到(客户端发来的Seq值 + 1),Seq = y, 表示让客户端确认是否能收到。发送完成后服务端进入SYN_RCVD状态。
第三次握手:客户端向服务器发送报文
证明客户端的接收能力正常。客户端再次发送确认包(ACK),ACK = y + 1, 表示确认收到服务器的包(服务端发来的Seq值 + 1)。客户端发送完毕后,进入ESTABLISHED状态,服务端接收到这个包,也进入ESTABLISHED状态, TCP握手结束。
为什么是三次握手?不是两次或者四次?
从假设的角度来分析吧,假如是两次握手,会发生什么情况呢? 服务端在发出应答消息后,它根本就不能确认客户端是否接受到消息了,那么这样意味着只有客户端可以向服务端发送数据。
假如是四次握手呢?明明已经保证了一个稳定的传输流了,为什么还要浪费性能再去发一次消息,浪费了性能。
四次挥手
第一次挥手([FIN], Seq = x)
客户端发送一个FIN标记的包,告诉服务器需要关闭连接,表示自己不用发送数据了,但是还可以接收数据。发送完成后,客户端进入FIN_WAIT_1状态。
第二次挥手 ([ACK], ACK = x + 1)
服务端发送一个ACK的确认包,告诉客户端接收到关闭的请求,但是还没有准备好。发送完成后,服务端进入CLOSE_WAIT状态,客户端收到这个包后,进入FIN_WAIT_2,等待服务器关闭连接。
第三次挥手 ([FIN], Seq = y)
服务端准备好关闭连接时,发送FIN标记的包,告诉客户端准备关闭了。发送完成后,服务端进入LAST_ACK状态,等待客户端确认。
第四次挥手 ([ACK], ACK = y + 1)
客户端接收到服务端的关闭请求,再发送ACK标记的确认包,进入TIME_WAIT状态,等待服务端可能请求重传的ACK包。
服务端接收到ACK包后,关闭连接,进入CLOSED状态。
客户端在等待固定时间(两个最大段生命周期)后,没有接收到服务的ACK包,认为服务器已关闭连接,自己也关闭连接,进入CLOSED状态。
为什么是三次握手,却是四次挥手?三次挥手不可以吗?
继续从假设的角度分析,如果是三次挥手,在服务器接收到客户端发送关闭的请求后,把SYN和ACK包一起发过去。这样会造成服务端还有数据没有发送完,造成了数据的丢失。所以中间的这一段时间,等待服务器把剩余的数据发送完是很有必要的。
TCP是可靠传输,UDP不保证传输的可靠性。
TCP是面向连接的。UDP是无连接的。
TCP会进行流量控制、网络拥塞控制,UDP则不会。
TCP传输速度较UDP慢。
TCP会对数据进行拆分;UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界;
TCP传输数据有序,UDP不保证数据的有序性;
总结来说,TCP面向连接,力求提供准确可靠的消息,进行流量控制、具有网络拥塞机制、会对数据进行分包,并保证数据的有序性,适用于文件传输、邮件等场景。UDP则面向实时传输,适用于视频语音聊天,直播等场景。
A)本地电脑会检查浏览器缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等
B)如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
C)前两个过程无法解析时,就要用到我们网络配置中的"DNS服务器地址"了。操作系统会把这个域名发送给这个本地DNS服务器。每个完整的内网通常都会配置本地DNS服务器,会查找本地DNS服务器缓存。
D)如果本地DNS服务器仍然没有命中,就直接到根DNS服务器请求解析
(1)HTTP1.0,HTTP1.1,HTTP1.2
HTTP1.0默认只提供短暂的连接,每次进行tcp请求,服务器都会在请求处理结束后立刻断开连接。下次请求重新创建连接。
HTTP1.1的TCP连接默认不关闭,支持多个请求进行复用。此时服务端是以顺序方式执行的。
HTTP/2采取了多路复用。所谓多路复用,指的是会把信息切分为更小的消息和帧,客户端和服务器都可以同时发送多个请求或者回应,并不需要按照顺序一一对应。这样,如果A,B请求同时发送给服务器,服务器发现请求A特别耗时,可以先回应A已经处理好的部分,接着优先响应请求B。
(2)长连接
在 HTTP 中响应体的 Connection 字段指定为 keep-alive,可以设置长连接。在HTTP1.0以后,长连接默认开启。
(3)HTTP与HTTPS
HTTP是运行于TCP之上的协议,是明文进行传输的,客户端和服务端都无法认证对方的身份。它的端口是80。
HTTPS是运行在SSL(Secure Socket Layer)之上的,SSL运行于TCP之上,HTTPS可以进行加密和认证。其通信证书需要向服务机构进行购买。默认端口是443.
IP 地址分为 A、B、C、D 类
记忆方法,记住几个分界点:
1.0.0.0.0 128.0.0.0.0 192.0.0.0.0 224.0.0.0 240.0.0.0
特殊的网址
(1)每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
(2)IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;
(3)IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试。
如:127.0.0.1可以代表本机IP地址,用“http://127.0.0.1”就可以测试本机中配置的Web服务器。
(1).首先DNS服务器进行域名解析
(2).TCP的三次握手
(3).Web浏览器向Web服务器发送请求。
1)HTTP请求报文由三部分组成:请求行,请求头和请求正文
2)请求行:用于描述客户端的请求方式,请求的资源名称以及使用的HTTP协议的版本号
3)请求头:用于描述客户端请求哪台主机,以及客户端的一些环境信息等
4)请求正文:当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中(GET方式是保存在url地址后面,不会放到这里)
(4).Web服务器应答.
1)HTTP响应也由三部分组成:状态码,响应头和实体内容
2)状态码:状态码用于表示服务器对请求的处理结果
3)响应头:响应头用于描述服务器的基本信息,以及客户端如何处理数据
4)实体内容:服务器返回给客户端的数据
(5)Web服务器关闭TCP连接一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接。如果添加Connection:keep-alive TCP连接在发送后仍然保持打开状态。
(6)浏览器解析html代码,并请求html代码中的资源
浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载
(7) 浏览器对页面进行渲染呈现给用户