计算机网络知识体系(面试用)

计算机网络应用层协议有哪些?

应用层协议:

1、远程登录协议(Telnet)
2、文件传输协议(FTP)
3、超文本传输协议(HTTP)
4、域名服务协议(DNS)
5、简单邮件传输协议(SMTP)
6、邮局协议(POP3)

其中,从网络上下载文件时使用的是FTP协议,上网游览网页时使用的是HTTP协议;在网络上访问一台主机时,通常不直接输入IP地址,而是输入域名,用的是DNS服务协议,它会将域名解析为IP地址;通过FoxMail发送电子邮件时,使用SMTP协议,接收电子邮件时就使用POP3协议。

传输层协议:

1、传输控制协议 TCP
2、用户数据报协议 UDP

TCP协议:面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。

UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。

网络层协议:

1、网际协议 IP
2、Internet互联网控制报文协议 ICMP
3、Internet组织管理协议 IGMP
4、地址解析协议 ARP

HTTP\HTTPS

http通讯存在的问题

容易被监听

http通讯都是明文,数据在客户端与服务器通讯过程当中,任何一点均可能被劫持。好比,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的

被假装

http通讯时,没法保证通行双方是合法的,通讯方多是假装的。好比你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据假装成淘宝。

被篡改

hacker中间篡改数据后,接收方并不知道数据已经被更改

https解决的问题

https很好的解决了http的三个缺点(被监听、被篡改、被假装),https不是一种新的协议,它是http+SSL(TLS)的结合体,SSL是一种独立协议,因此其它协议好比smtp等也能够跟ssl结合。https改变了通讯方式,它由之前的http—–>tcp,改成http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式

防监听

数据是加密的,因此监听获得的数据是密文,hacker看不懂。

防假装

假装分为客户端假装和服务器假装,通讯双方携带证书,证书至关于身份证,有证书就认为合法,没有证书就认为非法,证书由第三方颁布,很难伪造

防篡改

https对数据作了摘要,篡改数据会被感知到。hacker即便从中改了数据也白搭。

https链接过程

  1. 客户端发起HTTPS请求

这个没什么好说的,就是用户在浏览器里输入一个https网址,而后链接到server的443端口。

  1. 服务端的配置

采用HTTPS协议的服务器必需要有一套数字证书,能够本身制做,也能够向组织申请。区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。若是对公钥和私钥不太理解,能够想象成一把钥匙和一个锁头,只是全世界只有你一我的有这把钥匙,你能够把锁头给别人,别人能够用这个锁把重要的东西锁起来,而后发给你,由于只有你一我的有这把钥匙,因此只有你才能看到被这把锁锁起来的东西。

  1. 传送证书

这个证书其实就是公钥,只是包含了不少信息,如证书的颁发机构,过时时间等等。

  1. 客户端解析证书

这部分工做是有客户端的TLS来完成的,首先会验证公钥是否有效,好比颁发机构,过时时间等等,若是发现异常,则会弹出一个警告框,提示证书存在问题。若是证书没有问题,那么就生成一个随机值。而后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,否则看不到被锁住的内容。

  1. 传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端获得这个随机值,之后客户端和服务端的通讯就能够经过这个随机值来进行加密解密了。

  1. 服务段解密信息

服务端用私钥解密后,获得了客户端传过来的随机值(私钥),而后把内容经过该值进行对称加密。所谓对称加密就是,将信息和私钥经过某种算法混合在一块儿,这样除非知道私钥,否则没法获取内容,而正好客户端和服务端都知道这个私钥,因此只要加密算法够彪悍,私钥够复杂,数据就够安全。

  1. 传输加密后的信息

这部分信息是服务段用私钥加密后的信息,能够在客户端被还原。

  1. 客户端解密信息

客户端用以前生成的私钥解密服务段传过来的信息,因而获取了解密后的内容。整个过程第三方即便监听到了数据,也一筹莫展。

CA证书原理

1.客户端向服务端发送自己支持的加密算法

2.服务端向客户端返回包含其RSA公钥的数字证书

3.客户端使用网上公布的CA公钥检验数字证书(目的:证明消息来自服务器而非黑客)

4.然后随机生成随机数(使用公钥加密),发送给服务器

数字证书我的理解就是相当于一个签名。

用CA的私钥对数字证书生成签名,然后用公钥验证数字证书是否被篡改过,如果没被篡改说明证书上的服务器和公钥是对应的。

http协议的methods有哪些

想让服务器知道我们请求的意图,那就须清楚HTTP中常用 methods(请求方法),先来列一列有哪些methods:

GET: 获取资源
HEAD: 获取报文头部
POST: 传输实体主体
PUT: 传输文件
DELETE: 删除文件
OPTIONS: 询问支持方法

GET : 获取资源

用来请求已被URI识别的资源。GET方法用作请求数据,但不会对数据产生任何影响

HEAD: 获取报文头部

跟GET方法一样,但是HEAD方法不返回报文的主体,只是返回一些相关信息,比如确认URI的有效性、资源更新的日期等信息

POST 传输实体主体

用来给服务器发送数据,比如要表单提交的数据,文件更新的数据等。所以,我们更好理解POST方法的主要目的——传输实体主体

PUT: 传输文件

用来传输文件,请求报文主体中包含文件内容,然后保存到请求URI指定了资源的存放位置
由于任何人都可以上传文件,所以PUT存在安全性问题,一般Web网站不使用它。但如果配合Web应用程序的验证机制,或架构设计采用Rest标准的同类Web网站,就能开放使用PUT方法

DELETE: 删除文件

用来删除文件,即删除按请求URI下的指定资源
和PUT方法一样,存在安全性问题,所以一般Web网站不使用 DELETE方法。但如果配合Web应用程序的验证机制,或架构设计采用Rest标准的同类Web网站,就能开放使用PUT方法

OPTIONS: 询问支持方法

用于获取请求URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值便是所支持的方法,如“GET、POST”。

讲一下get和post的区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中。

附加:

  • GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

但不推荐用GET替换掉POST来优化网页性能。

原因:

  1. GET与POST都有自己的语义,不能随便混用。
  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。