学习计算机网络准备面试的同时做了一些笔记,分享出来希望能够帮助大家快速掌握计算机网络常遇到的问题。
笔记主要选自《图解HTTP》与《图解TCP/IP》以及网络面经,由于本人也是处于学习阶段,同时笔记是Word转MD上传,格式与知识点有误处望请指正。
计算机网络
一、协议层次以及服务类型
OSI七层模型
开放式通信系统互联参考模型 每一层实现各自的功能和协议,并完成相邻层的接口通信 某一层的服务就是该层以及其下各层的一种能力
1.应用层
通过应用程序间的交互来完成特定的网络应用。 协议定义了应用进程之间的交互规则,通过不同的应用层协议为不同的网络应用提供服务 eg.域名系统DNS,支持万维网的HTTP协议,电子邮件系统采用的SMTP协议等。在应用层交互的数据单元称之为报文。
2.表示层
使通信的应用程序能够解释交换数据的含义 向上为应用层提供服务,向下接受来自会话层的服务。 该层提供的服务主要包括数据压缩,数据加密以及数据描述,使得应用程序不必担心在各台计算机中表示和存储的内部格式差异
3.会话层
负责建立、管理和中止表示层实体之间的通信会话 提供了数据交换的定界和同步功能,包括了建立检查点和恢复方案的方法
4.传输层
为两台主机进程之间的通信提供服务。应用程序利用该服务传送应用层报文。 该服务并不针对某一特定的应用,多种应用可以使用同一个传输层服务。 由于一台主机可以同时运行多个线程,因此传输层有复用和分用的功能。 复用:多个应用层进程可以同时使用传出层的服务 分用:传输层把收到的信息分别交付给应用层中的相应进程。
5.网络层(IP层)
两台计算机之间传送数据时其通信链路往往不止一条,所传输的信息甚至可能经过很多通信子网。 网络层的主要任务时选择合适的网间路由和交换节点,确保数据按时成功传送。 发送数据时,网络层把传输层产生的报文或用户数据报封装成分组和包向下传输到数据链路层。 网络层使用的协议是**无连接的网络协议(Internet Protocol)**和许多路由协议
6.数据链路层(链路层)
两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点传送帧。每一帧包括数据和必要的控制信息。通过控制信息我们可以知道一个帧的起止比特位置,此外也能使接收端检测出所有收到的帧有无差错,若发现差错,书路链路层能够简单地丢弃掉这个帧,以免继续占用网络资源。
7.物理层
作为OSI参考模型中最低的一层,物理层的作用是实现计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。 该层的主要任务是确定与传输媒体的接口的一些特性(机械特性、电气特性、功能特性、过程特性)
TCP/IP参考模型
应用层
将OSI参考模型中的应用层、表示层、会话层的功能合并到一个应用层实现 通过不同的应用层协议为不同的应用提供服务 eg.FTP、Telnet、DNS、SMTP等
1.HTTP头部包含哪些信息(***)
本质上是一个传递额外重要信息的键值对
通用头部
是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
请求头部
是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
响应头部
便于客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如Server头部
实体头部
实体头部提供了有关实体及其内容的大量信息,从有关对象类型的信息,到能够对资源使用的各种有效的请求方法。总之,实体头部可以告知接收者它在对什么进行处理。请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。
2.Keep-Alive和非Keep-Alive的区别,对服务器性能有影响吗?(***)
1.非Keep-Alive:
在早期的HTTP/1.0中,浏览器每次发起HTTP请求 都需要与服务器创建一个新的TCP连接,服务器完成处理请求以后立即断开TCP连接,服务器不跟踪每个客户,也不记录过去的请求。创建和关闭连接会消耗资源和时间,为减少资源消耗,缩短响应时间,就需要重用连接。
对于非Keep-Alive来说,必须为每一个请求的对象建立和维护一个全新的连接。对于每一个这样的连接,客户机和服务器都要分配TCP缓冲区和变量,会给服务器带来严重的负担。
2.Keep-Alive: 在HTTP/1.1版本中默认使用持久连接,在此之前的HTTP版本的默认连接都是非持久连接 想要在旧版本上使用持久连接,需要指定connection首部字段的值为Keep-Alive,来告诉对方这个请求响应完成后不要关闭。在 Keep-Alive 方式下,服务器在响应后保持该 TCP 连接打开,在同一个客户机与服务器之间的后续请求和响应报文可通过相同的连接进行传送。甚至位于同一台服务器的多个 Web 页面在从该服务器发送给同一个客户机时,可以在单个持久 TCP 连接上进行。
3.Keep-Alive缺点: 长时间的保持TCP连接容易导致系统资源被无效占用。解决方法:正确配置Keep-Alivetimeout参数,当TCP连接传送完一个HTTP响应之后,该连接还会保持Keep-Alivetimeout秒,之后就关闭这个连接。
3.长连接和短连接的应用场景,长轮询和短轮询(****)
1.首先,http服务依靠传输层实现,长连接实际上指的是TCP连接。(https://blog.csdn.net/luzhensmart/article/details/87186401) 若要实现长连接,需要服务端和客户端的Connection都为Keep-Alive 应用场景: 长连接:多用于操作频繁,客户端连接数目较少,点对点。(即时通讯,网络游戏等) 短连接:用户数目较多的Web网站(电商网站) 2.长短轮询和长短连接的区别:
** 第一个区别是客户端和服务端,一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。
** 第二个区别就是实现的方式,连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的。
** 3.长短轮询: yyeg.电商网站实时更新商品库存量 短轮询去服务端查询的时侯,不管查询的目标是否发生变化,服务器就立即返回结果了。 长轮询查询时,服务器检测到目标未发生变化的话,会把当前请求挂起一段时间,在这个期间,服务器会检测库存量有没有变化,发生变化就立即返回,否则就一直检测到超时为止。
4.长轮询的缺点: 挂起请求同样会导致资源的浪费&#x