1. 网络通信协议
1.1 网络通信协议概念
通俗来说,网络协议就是网络之间沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺利地进行交流。从专业角度定义,网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。
主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等做出规定并制定标准。
常用的网络通信协议:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。
1.2 TCP/IP协议
概念:互联网相关联的协议集合起来总称为TCP/IP。
传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol)是Internet最基本、最广泛的一套协议。它定义了计算机如何连入因特网,以及数据如何在他们之间传输的标准。他的内部包含了一系列的用于处理数据通信的协议,并且采取了4层的分层结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
- OSI:Open System Interconnection 开放式系统互联参考模型
1.3 TCP和UPD协议
通信的协议比较复杂,Java提供了Java.net包,我们可以直接使用里面的类和接口来进行网络程序开发,而不用考虑通信的细节。
Java.net包中提供了2种常见的网络协议支持:TCP、UDP。
TCP:传输控制协议(Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,需要在发送端和接收端建立逻辑连接,然后才能传输数据。它提供了两台计算机之间可靠无差错的数据传输。建立一次连接需要完成三次握手后,客户端和服务端就可以开始进行数据传输了,数据传输完成之后,通过四次挥手关闭连接。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。
UDP:用户数据报送协议(User Datagram Protocol)。UDP协议是一个面向无连接的协议。传输数据时,不需要建立连接,不管对方服务是否启动,直接将数据、数据源和目的地封装在数据包中,直接发送。每个数据包的大小控制在64K以内。他是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应用在视频会议、直播等。
TCP的三次握手
三次握手:TCP协议中,在发送数据的准备阶段,客户端和服务端之间的三次交互,以保证连接的可靠。
1. 客户端 - 发送带有SYN标志的数据包 - 1次握手 - 服务端
2. 服务端 - 发送带有SYN/ACK标志的数据包 - 2次握手 - 客户端
3. 客户端 - 发送带有ACK标志的数据包 - 3次握手 - 服务端
为什么要进行三次握手?
目的:建立可靠的通信信道,说到通信,简单来说,就是数据的发送与接收,而三次握手最主要的目的就是**双方确认自己与对方的发送与接收是正常的。
第一次握手: Client什么都不能确认;Server确认了对方发送正常,自己接收正常。
第二次握手: Client确认了自己发送、接收正常,对方发送、接收正常。Server确认了:对方发送正常,自己接收正常。
第三次握手: Client确认了自己发送、接收正常,对方发送、接收正常。Server确认了:自己发送、接收正常,对方发送、接收正常。
TCP四次挥手
断开一个TCP连接需要进行四次挥手:
1、 客户端 - 发送一个FIN,用来关闭客户端到服务端的数据传送。
2、 服务端 - 收到这个FIN, 发回一个ACK,确认序号为收到的序号+1。和SYN一样,一个FIN占用一个序号。
3、 服务端 - 关闭与客户端的连接,发送一个FIN给客户端。
4、 客户端 - 发送ACK报文确认,并将确认序号设置为收到序号+1.
为什么需要进行四次挥手:任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后,进入半关闭状态。当另一方也没有数据再发送时,则发出连接释放通知,对方确认后,就完全关闭了TCP连接。
1.4 输入URL地址到显示网页经历了哪些过程,会使用到哪些协议?
过程:
-
浏览器查询域名对应的IP地址。
DNS查找过程:浏览器缓存 -》主机HOST -》路由器缓存 -》DNS缓存 -》根域名解析服务器
-
浏览器给Web服务器发送一个HTTP请求,Cookies会随着请求发送给服务器。
-
服务器处理请求:获取参数和Cookies,处理请求生成一个html响应体
-
服务器返回HTML。
-
浏览器渲染HTML。
使用的协议:
- DNS协议:获取域名对应的IP
- HTTP协议 - 应用层:使用HTTP协议访问网页,建立可靠连接与传输数据需要依靠TCP协议与IP协议
- TCP协议 - 传输层:与服务器建立连接,并传输数据
- IP协议 - 网络层:建立TCP协议之后,发送数据在网络层依靠IP协议
1.5 HTTP1.0与HTTP1.1的区别是什么?
-
长连接
在HTTP1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP是基于TCP/IP协议的,每次断开和建立都需要经历三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用长连接来发多个请求。
HTTP1.1起,默认使用长连接,默认开启
Connection: keep-alive。HTTP1.1的持续连接方式有流水线(pipelining)方式和非流水线方式。
- 流水线方式:客户在收到HTTP的响应报文之前,就能接着发送新的请求报文,其实就是并行发送请求。
- 非流水线方式:客户在收到前一个人响应后,才能继续发送下一个请求,其实就是串行发送请求。
- 错误响应码: 在HTTP1.1中新增了24个错误状态响应码
- 缓存处理:在HTTP1.0中缓存判断标准单一,HTTP1.1引入了更多的缓存控制策略。
- 带宽优化及网络连接的使用:HTTP1.0不支持断点续传功能,存在一些浪费带宽的现象。HTTP1.1加入了断点续传的支持。允许只请求资源的某个部分,充分利用带宽和连接,避免浪费带宽。
1.6 HTTP和HTTPS的区别是什么?
- 端口: HTTP的URL由"http:/" 起始且默认使用端口80,而HTTPS的URL由"https://" 起始且默认使用端口443。
- 安全性和资源消耗: HTTP协议是运行在TCP之上的,所有传输的内容都是明文,客户端和服务端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP的安全性没有HTTPS高,但是HTTPS比HTTP更消耗服务器资源
- HTTPS = HTTP + 加密 + 认证 + 完整性保护。
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等。
非对称加密:密钥成对出现,且根据公钥(public key)无法推知私钥,根据私钥也无法推知公钥,加密解密使用不同的密钥。公钥加密需要私钥解密,私钥加密需要公钥解密,相比对称加密速度慢,典型的非对称加密算法有RSA、DSA等。