(一)基础概念
1 HTTP
1.1 HTTP & HTTPS
HTTP超文本传输协议是用来在Internet上传送文本的传送协议,采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险。HTTPS是使用SSL协议加密的HTTP协议,相对于HTTP更加安全。
由于HTTP使用明文传输,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文就可以直接读懂其中的意思,因此HTTP协议不适合传输一些如身份证号、银行卡等敏感信息。为了解决HTTP这一缺陷,可使用HTTPS,为了数据传输的安全性,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠CA证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTP与HTTPS的区别主要是以下三点:
- HTTP是超文本传输协议,是明文传输,HTTPS是SSL加密传输协议
- HTTP使用80端口,HTTPS使用443端口
- HTTP连接是无状态的,HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议
1.2 Cookie & Session
Cookie&Session是为了解决HTTP无状态的问题:
- Session是一种在C/S之间保持状态的服务端的解决方案,服务器使用散列表来保存用户登陆状态信息(Map<sessionId, session>),当客户端请求打过来时,若不包含sessionId,则会要求用户登陆,登陆成功会生成一个与之相关联的sessionId并记录用户登陆后操作的状态,同时服务端保存到散列表中并返回给客户端保存,当客户端再次请求时会自动带上该sessionId,当服务端确认该sessionId存在则用户可直接访问服务器无须登陆并且可看到之前在服务器上操作的状态信息。其中,sessionId的载体是cookie,客户端用cookie保存了sessionId,当我们请求服务器时,会把这个sessionId一起发给服务器从而完成验证。
- Cookie是一种用来在C/S之间保持状态的客户端的解决方案,当验证通过后服务器会发给客户端一段特殊文本信息(包括sessionId,上限为4KB),这些信息以文本的方式存放在客户端,客户端每次向服务器发送请求的时候都会带上这些特殊的信息从而实现免登陆。
2 TCP & UDP
2.1 区别
- TCP是面向连接的协议,在收发数据前,必须与对方建立可靠的连接。UDP是一个非连接的协议,传输数据之前源端和终端不建立连接。我们经常用ping命令来测试两台主机之间TCP/IP通信是否正常,其实"ping"命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包正常被确认则及时反馈回来以证明网络是通的并反映当前网络延时。
- UDP不保证可靠交付,有可能出现丢包、乱序等情况,但是TCP是一种可靠的传输服务,确保数据准确可靠的传给对方。
2.2 TCP的三次握手四次挥手
使用TCP协议收发数据前需要通过三次握手才能建立稳定连接。
三次握手:使用了TCP的标志位-SYN和ACK,过程如下:
- 第一次握手:客户端发送SYN(SYN=j)包到服务器,并进入SYN_SEND状态,等待服务器确认
- 第二次握手:服务端收到SYN包,必须确认客户端的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k)即SYN+ACK包,此时服务器进入SYN_RECV状态
- 第三次握手:客户端接收到服务端的SYN+ACK包,向服务器发送确认包ACK(ACK=k+1),此包发送完毕,完成三次握手
若在握手过程中某个阶段莫名中断, TCP 协议会再次以相同的顺序发送相同的数据包以重新建立连接。
四次挥手:由于TCP连接是全双工的,每个方向都必须单独进行关闭并通过目的方确认。
关闭原则:当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。
具体过程:
- 客户端A发送一个FIN(finish),用来关闭客户端A到服务器B的连接
- 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
- 服务器B发送一个FIN,用来关闭服务器B与客户端A的连接
- 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
在TCP连接中,服务器端的SYN和ACK向客户端发送是一次性发送的,而在断开连接的过程中,B端向A端发送的ACK和FIN是分两次发送的,因为在B端接收到A段的FIN后,B端可能还有数据要传输,所以先发送ACK,等B端处理完自己的事情后就可以发送FIN断开连接了。
有疑问欢迎留言