今天来总结一下面试中常常遇到的有关计算机网络的面试题,主要有如下知识点:git
OSI与TCP/IP各层的结构与功能,都有哪些协议?
TCP三次握手和四次挥手
TCP和UDP协议的区别
TCP协议如何保证可靠传输
在浏览器中输入url地址到返回页面这过程发生了什么
各类协议与HTTP协议之间的关系
HTTP长链接、短链接
HTTP 1.0和HTTP 1.1的主要区别是什么?
URI和URL的区别是什么?
HTTP和HTTPS的区别
学习计算机网络时咱们通常采用折中的办法,也就是中和 OSI 和 TCP/IP 的优势,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。github
结合互联网的状况,自上而下地,很是简要的介绍一下各层的做用。面试
应用层
应用层(application-layer)的任务是经过应用进程间的交互来完成特定网络应用。在互联网中应用层协议不少,如域名系统DNS
,支持万维网应用的HTTP
协议等等。咱们把应用层交互的数据单元称为报文。浏览器
运输层
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通讯提供通用的数据传输服务。缓存
运输层主要使用如下两种协议:服务器
网络层
在 计算机网络中进行通讯的两个计算机之间可能会通过不少个数据链路,也可能还要通过不少通讯子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。
在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,因为网络层使用IP
协议,所以分组也叫IP数据报 ,简称数据报。网络
数据链路层
数据链路层(data link layer)一般简称为链路层。两台主机之间的数据传输,老是在一段一段的链路上传送的,这就须要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。app
物理层
物理层(physical layer)的做用是实现相邻计算机节点之间比特流的透明传送,尽量屏蔽掉具体传输介质和物理设备的差别。 ide
总结如下就是下面这张图学习
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。
为何要三次握手
三次握手的目的是创建可靠的通讯信道,说到通信,简单来讲就是数据的发送与接收,而三次握手最主要的目的就是双方确认本身与对方的发送与接收是正常的。
三次握手就能确认双方收发功能都正常,缺一不可。
为何TCP连接须要三次握手,两次不能够么,为何?
为了防止已失效的连接请求报文忽然又传送到了服务端,于是产生错误。
客户端发出的链接请求报文并未丢失,而是在某个网络节点长时间滞留了,以至延误到链接释放之后的某个时间才到达Server。这时,Server误觉得这是Client发出的一个新的链接请求,因而就向客户端发送确认数据包,赞成创建链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就创建了。因为client此时并未发出创建链接的请求,因此其不会理睬Server的确认,也不与Server通讯;而这时Server一直在等待Client的请求,这样Server就白白浪费了必定的资源。若采用“三次握手”,在这种状况下,因为Server端没有收到来自客户端的确认,则就会知道Client并无要求创建请求,就不会创建链接。
断开一个 TCP 链接则须要“四次挥手”:
为何要四次挥手
任何一方均可以在数据传送结束后发出链接释放的通知,待对方确认后进入半关闭状态。当另外一方也没有数据再发送的时候,则发出链接释放通知,对方确认后就彻底关闭了TCP链接。
UDP 在传送数据以前不须要先创建链接,远地主机在收到 UDP 报文后,不须要给出任何确认。虽然 UDP 不提供可靠交付,但在某些状况下 UDP 确是一种最有效的工做方式(通常用于即时通讯),好比: QQ 语音、 QQ 视频 、直播等等
TCP 提供面向链接的服务。在传送数据以前必须先创建链接,数据传送结束后要释放链接。 TCP 不提供广播或多播服务。因为 TCP 要提供可靠的,面向链接的传输服务(TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开链接用来节约系统资源),这一难以免增长了许多开销,如确认,流量控制,计时器以及链接管理等。这不只使协议数据单元的首部增大不少,还要占用许多处理机资源。TCP 通常用于文件传输、发送和接收邮件、远程登陆等场景。
在HTTP/1.0中默认使用短链接。也就是说,客户端和服务器每进行一次HTTP操做,就创建一次链接,任务结束就中断链接。当客户端浏览器访问的某个HTML或其余类型的Web页中包含有其余的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会从新创建一个HTTP会话。
而从HTTP/1.1起,默认使用长链接,用以保持链接特性。使用长链接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长链接的状况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经创建的链接。Keep-Alive不会永久保持链接,它有一个保持时间,能够在不一样的服务器软件(如Apache)中设定这个时间。实现长链接须要客户端和服务端都支持长链接。
HTTP协议的长链接和短链接,实质上是TCP协议的长链接和短链接。
URI的做用像身份证号同样,URL的做用更像家庭住址同样。URL是一种具体的URI,它不只惟一标识资源,并且还提供了定位该资源的信息。
Http协议运行在TCP之上,明文传输,客户端与服务器端都没法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。两者之间存在以下不一样:
Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。