互联网校招面试必备——计算机网络 | 掘金技术征文

本文首发于个人我的博客:尾尾部落css

OSI,TCP/IP,五层协议的体系结构

每一层的做用:

  • 物理层:经过媒介传输比特,肯定机械及电气规范(比特Bit)
  • 数据链路层:将比特组装成帧和点到点的传递(帧Frame)
  • 网络层:负责数据包从源到宿的传递和网际互连(包Packet)
  • 传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
  • 会话层:创建、管理和终止会话(会话协议数据单元SPDU)
  • 表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
  • 应用层:容许访问OSI环境的手段(应用协议数据单元APDU)

每一层的协议:

  • 物理层:RJ4五、CLOCK、IEEE802.3 (中继器,集线器,网关)
  • 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
  • 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
  • 传输层:TCP、UDP、SPX
  • 会话层:NFS、SQL、NETBIOS、RPC
  • 表示层:JPEG、MPEG、ASII
  • 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

TCP对应的应用层协议

  • FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务即是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
  • Telnet:它是一种用于远程登录的端口,用户能够以本身的身份远程链接到计算机上,经过这种端口能够提供一种基于DOS模式下的通讯服务。如之前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
  • SMTP:定义了简单邮件传送协议,如今不少邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,因此在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
  • POP3:它是和SMTP对应,POP3用于接收邮件。一般状况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就能够不以Web方式登录进邮箱界面,直接用邮件程序就能够收到邮件(如是163邮箱就没有必要先进入网易网站,再进入本身的邮-箱来收信)。
  • HTTP:从Web服务器传输超文本到本地浏览器的传送协议。

UDP对应的应用层协议

  • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
  • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。因为网络设备不少,无链接的服务就体现出其优点。
  • TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务。

IP地址的分类

  • A类地址:以0开头, 第一个字节范围:0~127(1.0.0.0 - 126.255.255.255);
  • B类地址:以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);
  • C类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);

10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用于内部)面试

ARP协议

ARP地址解析协议,简单说就是,在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。它的工做原理以下:算法

  1. 首先,每一个主机都会在本身的ARP缓冲区中创建一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,若是有,则直接发送数据,若是没有,就向本网段的全部主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
  3. 当本网络的全部主机收到该ARP数据包时,首先检查数据包中的IP地址是不是本身的IP地址,若是不是,则忽略该数据包,若是是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,若是已经存在,则覆盖,而后将本身的MAC地址写入ARP响应包中,告诉源主机本身是它想要找的MAC地址。
  4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。若是源主机一直没有收到ARP响应数据包,表示ARP查询失败。
  5. 若是目标IP与本身不在同一个网段,这种状况须要将包发给默认网关,因此主要获取网关的MAC地址。若是arp高速缓存有默认网关的MAC地址,直接发送IP数据报道默认网关,再由网关转发到外网;若是arp高速缓存没有默认网关的MAC地址,仍是发送ARP广播请求默认网关的MAC地址,缓存该地址,而且发送数据报到网关。

HTTP协议

HTTP是一个属于应用层的面向对象的协议,因为其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP协议的主要特色可归纳以下:浏览器

  • 支持客户/服务器模式。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
  • 灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快。

TCP三次握手和四次挥手的全过程

三次握手:(我要和你创建连接,你真的要和我创建连接么,我真的要和你创建连接,成功)缓存

  • 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时本身也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程当中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP链接一旦创建,在通讯双方中的任何一方主动关闭链接以前,TCP 链接都将被一直保持下去。安全

四次挥手:(我要和你断开连接;好的,断吧。我也要和你断开连接;好的,断吧):服务器

  • 第一次挥手:客户端主动关闭方发送一个FIN,用来关闭客户端到服务端的数据传送,也就是客户端告诉服务端:我已经不会再给你发数据了(固然,在fin包以前发送出去的数据,若是没有收到对应的ack确认报文,客户端依然会重发这些数据),可是,此时客户端还能够接受数据。
  • 第二次挥手:服务端收到FIN包后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
  • 第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,也就是告诉客户端,个人数据也发送完了,不会再给你发数据了。
  • 第四次挥手:客户端收到FIN后,发送一个ACK给服务端,确认序号为收到序号+1,至此,完成四次挥手。

第3次握手失败会怎么办?

第三次失败,只有客户端处于成功状态(由于第2次服务器返回了ACK),服务器端没有接收到客户端的 ACK。 这要分几种状况讨论:微信

  • In other words, if the ACK is dropped but the next packet is not dropped, then everything is fine. 也就是说客户端发出的 ACK 丢失了,发出的 下一个数据包 没有丢失,则服务端接收到下一个数据包(这个数据包里也会带上 ACK 信息),可以进入正常的 ESTABLISHED 状态
  • 若是服务端和客户端都没有数据发送,或者服务端想发送数据(可是发不了,由于没有收到客户端的 ACK),服务器都会有定时器发送第二步SYN+ACK数据包,若是客户端再次发送ACK成功,创建链接。
  • 若是一直不成功,服务器确定会有超时设置,超时以后会给客户端发RTS报文,进入CLOSED状态,防止SYN洪泛攻击。

为何TCP连接须要三次握手,两次不能够么,为何?

为了防止已失效的连接请求报文忽然又传送到了服务端,于是产生错误。 客户端发出的链接请求报文并未丢失,而是在某个网络节点长时间滞留了,以至延误到连接释放之后的某个时间才到达Server。这是,Server误觉得这是Client发出的一个新的连接请求,因而就向客户端发送确认数据包,赞成创建连接。若不采用“三次握手”,那么只要Server发出确认数据包,新的连接就创建了。因为client此时并未发出创建连接的请求,因此其不会理睬Server的确认,也不与Server通讯;而这时Server一直在等待Client的请求,这样Server就白白浪费了必定的资源。若采用“三次握手”,在这种状况下,因为Server端没有收到来自客户端的确认,则就会知道Client并无要求创建请求,就不会创建连接。cookie

为何链接的时候是三次握手,关闭的时候倒是四次握手?

TCP是全双工模式,关闭链接时,当主机B收到主机A的FIN报文时,仅仅表示主机 A再也不发送数据了可是还能接收数据。此时,主机B也未必所有数据都发送给A了,因此B能够当即close;也能够发送一些数据给A后,再发送FIN报文给对方来表示赞成如今关闭链接,所以,主机BACK和FIN通常都会分开发送。网络

TCP的拥塞处理

计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种状况就叫作拥塞。拥塞控制就是防止过多的数据注入网络中,这样可使网络中的路由器或链路不致过载。注意,拥塞控制和流量控制不一样,前者是一个全局性的过程,然后者指点对点通讯量的控制。拥塞控制的方法主要有如下四种:

  • 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增长拥塞窗口的大小;

  • 拥塞避免:拥塞避免算法让拥塞窗口缓慢增加,即每通过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增加。

  • 快重传:快重传要求接收方在收到一个 失序的报文段 后就当即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到本身发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当当即重传对方还没有收到的报文段,而没必要继续等待设置的重传计时器时间到期。

  • 快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减少”算法,把ssthresh门限减半,可是接下去并不执行慢开始算法:由于若是网络出现拥塞的话就不会收到好几个重复的确认,因此发送方如今认为网络可能没有出现拥塞。因此此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,而后执行拥塞避免算法。

TCP协议如何来保证传输的可靠性

TCP提供一种面向链接的、可靠的字节流服务。其中,面向链接意味着两个使用TCP的应用(一般是一个客户和一个服务器)在彼此交换数据以前必须先创建一个TCP链接。在一个TCP链接中,仅有两方进行彼此通讯;而字节流服务意味着两个应用程序经过TCP连接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。 对于可靠性,TCP经过如下方式进行保证:

  • 数据包校验:目的是检测数据在传输过程当中的任何变化,若校验出包有错,则丢弃报文段而且不给出响应,这时TCP发送数据端超时后会重发数据;
  • 对失序数据包重排序:既然TCP报文段做为IP数据报来传输,而IP数据报的到达可能会失序,所以TCP报文段的到达也可能会失序。TCP将对失序数据进行从新排序,而后才交给应用层;
  • 丢弃重复数据:对于重复数据,可以丢弃重复数据;
  • 应答机制:当TCP收到发自TCP链接另外一端的数据,它将发送一个确认。这个确认不是当即发送,一般将推迟几分之一秒;
  • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段;
  • 流量控制:TCP链接的每一方都有固定大小的缓冲空间。TCP的接收端只容许另外一端发送接收端缓冲区所能接纳的数据,这能够防止较快主机导致较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

从输入网址到得到页面的过程

  1. 浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操做系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,若是要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具备权威性);若是要查询的域名不禁本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具备权威性)。若是本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
  2. 浏览器得到域名对应的IP地址之后,浏览器向服务器请求创建连接,发起三次握手;
  3. TCP/IP连接创建起来后,浏览器向服务器发送HTTP请求;
  4. 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
  5. 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
  6. 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

Session 与 Cookie 的对比

实现机制:Session的实现经常依赖于Cookie机制,经过Cookie机制回传SessionID; 大小限制:Cookie有大小限制而且浏览器对每一个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关; 安全性:Cookie存在安全隐患,经过拦截或本地文件找获得cookie后能够进行攻击,而Session因为保存在服务器端,相对更加安全; 服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,若是session过多会增长服务器的压力。 Application(ServletContext):与一个Web应用程序相对应,为应用程序提供了一个全局的状态,全部客户均可以使用该状态。

交换机和路由器分别的实现原理是什么?分别在哪一个层次上面实现的?

交换机用于局域网,利用主机的MAC地址进行数据传输,而不须要关心IP数据包中的IP地址,它工做于数据链路层。路由器识别网络是经过IP数据包中IP地址的网络号进行的,因此为了保证数据包路由的正确性,每一个网络都必须有一个惟一的网络号。路由器经过IP数据包的IP地址进行路由的(将数据包递交给哪一个下一跳路由器)。路由器工做于网络层。因为设备如今的发展,如今不少设备既具备交换又具备路由功能,二者的界限愈来愈模糊。

TCP和UDP的区别

  • TCP的优势: 可靠,稳定 TCP的可靠体如今TCP在传递数据以前,会有三次握手来创建链接,并且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开链接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据以前,要先建链接,这会消耗时间,并且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,并且要在每台设备上维护全部的传输链接,事实上,每一个链接都会占用系统的CPU、内存等硬件资源。 并且,由于TCP有确认机制、三次握手机制,这些也致使TCP容易被人利用,实现DOS、DDOS、CC等攻击。
  • UDP的优势:快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,因此它在传递数据时很是快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是没法避免攻击的,好比:UDP Flood攻击…… UDP的缺点: 不可靠,不稳定 由于UDP没有TCP那些可靠的机制,在数据传递时,若是网络质量很差,就会很容易丢包。 基于上面的优缺点,那么: 何时应该使用TCP: 当对网络通信质量有要求的时候,好比:整个数据要准确无误的传递给对方,这每每用于一些要求可靠的应用,好比HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在平常生活中,常见使用TCP协议的应用以下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输 ………… 何时应该使用UDP: 当对网络通信质量要求不高的时候,要求网络通信速度能尽可能的快,这时就可使用UDP。 好比,平常生活中,常见使用UDP协议的应用以下: QQ语音 QQ视频 TFTP …… 有些应用场景对可靠性要求不高会用到UPD,好比长视频,要求速率
TCP UDP
链接 面向链接 面向无链接
可靠性 可靠,无差错,不丢失,不重复 尽最大努力交付,即不保证可靠交付
模式 流模式(字节流) 数据报模式(报文)
链接 点到点 支持一对一,一对多,多对一和多对多的交互通讯
首部开销 20字节 8个字节
逻辑通讯信道 全双工的可靠信道 不可靠信道
速度
对系统资源要求 较多 较少

HTTP和HTTPS

  • HTTP:是互联网上应用最为普遍的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可使浏览器更加高效,使网络传输减小。
  • HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。

HTTPS协议的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全;另外一种就是确认网站的真实性。

Http和Https的区别

Http协议运行在TCP之上,明文传输,客户端与服务器端都没法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。两者之间存在以下不一样: 端口不一样:Http与Http使用不一样的链接方式,用的端口也不同,前者是80,后者是443; 资源消耗:和HTTP通讯相比,Https通讯会因为加减密处理消耗更多的CPU和内存资源; 开销:Https通讯须要证书,而证书通常须要向认证机构购买; Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

HTTPS采用混合加密机制

因为公有密钥的机制相对复杂,致使其处理速度相对较慢。因而HTTPS利用了二者的优点,采用了混合加密的机制。咱们知道,共享(对称)密钥未能解决的问题是如何可以安全地把密钥发送给对方。只要解决了这个问题就能够进行安全地通讯。因而,HTTPS首先是经过公有密钥来对共享密钥进行加密传输。当共享密钥安全地传输给对方后,双方则使用共享密钥的方式来加密报文,以此来提升传输的效率。

步骤1:向服务器发起请求。 步骤2-3:取出公有密钥及证书并发送给客户端。 步骤4:客户端判断公有密钥是否有效,无效则显示警告。有效则生成一个随机数串,并以今生成客户端的共享密钥。 步骤5:用步骤3获得的公有密钥对该随机数串加密,发送到服务器。 步骤6:服务器获得加密报文,用私有密钥解密报文,获得随机数串,并以今生成服务器端的共享密钥。此时客户端和服务端拥有相同的共享密钥,能够用该共享密钥进行安全通讯。 步骤7-8:服务器对响应进行加密,客户端对报文进行解密。

HTTPS的优势

尽管HTTPS并不是绝对安全,掌握根证书的机构、掌握加密算法的组织一样能够进行中间人形式的攻击,但HTTPS还是现行架构下最安全的解决方案,主要有如下几个好处: (1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器; (2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程当中不被窃取、改变,确保数据的完整性。 (3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增长了中间人攻击的成本。 (4)谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

HTTPS的缺点

虽说HTTPS有很大的优点,但其相对来讲,仍是存在不足之处的: (1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增长10%到20%的耗电; (2)HTTPS链接缓存不如HTTP高效,会增长数据开销和功耗,甚至已有的安全措施也会所以而受到影响; (3)SSL证书须要钱,功能越强大的证书费用越高,我的网站、小网站没有必要通常不会用。 (4)SSL证书一般须要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。 (5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么做用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家能够控制CA根证书的状况下,中间人攻击同样可行。

socket

socket是通讯的基石。支持TCP/IP等协议的基本操做单元。 应用层经过传输层进行数据通讯时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP链接或多个应用程序进程可能须要经过同一个TCP协议端口传输数据。为了区别不一样的应用程序进程和链接,许多计算机操做系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层能够和传输层经过Socket接口,区分来自不一样应用程序进程或网络链接的通讯,实现数据传输的并发服务。

参考

计算机网络之面试常考 面试/笔试第一弹 —— 计算机网络面试问题集锦

获取更多最新资讯,免费获取百G视频教程 请关注微信公众号:南强说晚安

我在参加掘金技术征文 征文活动地址

相关文章
相关标签/搜索