首先需要回顾:TCP与UDP的区别、差异、以及应用场景
TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP(21):定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2) Telnet(23):(远程登陆协议)它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3) SMTP(25):定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4) POP3(110):它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。
(5)HTTP(80)协议:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS(53):用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) RIP:路由信息协议,端口520
(2) SNMP(161):简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(69)(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
HTTP协议是TCP对应协议之一,主要用于web超文本网络访问。
DNS是UDP队员协议之一,主要用于域名解析
Http request的几种类型
HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式,具体介绍如下:
GET:向特定的资源发出请求。
【1】GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,所以相对安全性低,可以直接从包头来分析数据。且传送的数据量较小,不能大于2KB。注意在FORM(表单)中,Method默认为"GET"。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。 .POST把提交的数据则放置在是HTTP包的包体中,相对安全性高,且数据量一般不受限制(所以基本都用post来请求,先post json字段自证身份,然后接收回来的信息)。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
HEAD:请求读取由URL所标志的信息的首部。
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP
- 浏览器分析连接指向的页面URL(http://www.baidu.com)
- 浏览器向DNS请求www.baidu.com.的IP地址(需要了解DNS是UDP的对应协议之一)
- 域名系统DNS解析出百度官网的服务器IP地址
- 浏览器与该服务器建立TCP连接(默认端口80)(需要了解TCP三次握手连接过程)
- 浏览器发出HTTP请求获取指定页面。(需要了解HTTP与HTTPS的区别)
- 服务器通过HTTP响应把文件对应页面发送给浏览器。
- TCP连接释放。
- 浏览器将文件进行解析,并将web网页显示给用户。(需要了解本地解析方式)
HTTPS要了解SSL
SSL协议及完整交互过程
SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5 以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。
开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。
1 客户端发出请求(ClientHello)
首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。在这一步,客户端主要向服务器提供以下信息。
(1) 支持的协议版本,比如TLS 1.0版。
(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。
(3) 支持的加密方法,比如RSA公钥加密。
(4) 支持的压缩方法。
4.2 服务器回应(SeverHello)
服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容:
(1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
(2) 一个服务器生成的随机数,稍后用于生成"对话密钥"。
(3) 确认使用的加密方法,比如RSA公钥加密。
(4) 服务器证书。(公钥)
4.3 客户端回应
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。
如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。
(1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。
(2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
上面第一项的随机数,是整个握手阶段出现的第三个随机数,又称"pre-master key"。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"。(会话秘钥是采用对称加密方式,而这里的公钥是采用非对称加密)
4 服务器的最后回应
服务器通过私钥解密收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。
(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。
https处理的一个过程,对称加密和非对称加密
这里之前有面试官问过,用RSA以及AES两个算法,设计一套简单的加密通信逻辑,当时回答的就是这个。
- SSL原理很简单。当你的浏览器向服务器请求一个安全的网页(通常是 https://)
- 服务器就把它的证书和公匙发回来
- 浏览器检查证书是不是由可以信赖的机构颁发的,确认证书有效和此证书是此网站的。
- 浏览器使用公钥加密了一个随机对称密钥,包括加密的URL一起发送到服务器。
- 服务器用自己的私匙解密了你发送的钥匙。然后用这把对称加密的钥匙给你请求的URL链接解密。
- 服务器用你发的对称钥匙给你请求的网页加密。你也有相同的钥匙就可以解密发回来的网页了
之前那个问题,简单说就是因为RSA非对称加密,公钥是假定所有人都知道的也可以获取,密钥则不行。
所以你我双方通信,我有RSA公钥无私钥,我作为客户端。
则先抛开证书,假定你的RSA公钥是可信的,所以就是我先用RSA的公钥加密一段数据(里面包含我设置的AES的密钥),发送给你。
你拿私钥解密,得到AES的密钥,然后你有了AES的对称密钥,就可以进行加密通信了。
原理是一样,但是要说清楚~