文章目录
计算机网络
以下内容主要整理自《TCP/IP详解 卷一》、《图解TCP/IP》、《图解HTTP》、《程序员面试笔试宝典》节选等,想要了解更多推荐阅读以上数据相关章节部分。
1 网络模型
1.1 OSI七层模型与TCP/IP五层模型
(图片出自《图解TCP/IP》)
OSI(Open System Interconnection,开发系统互连)七层模型与TCP/IP五层模型的区别是:
- OSI模型更注重“通信协议必要的功能是什么”;
- 而TCP/IP五层模型则更强调“在计算机上实现协议应该开发哪种程序”。
通常面试都会问到的是TCP/IP五层模型的划分:
(1)物理层:负责数据传输的硬件(比如以太网或电话线路)。
(2)数据链路层:控制物理层与网络层之间的通信,主要负责物理传输的准备(比如物理地址寻址,流量控制、重发等)。MAC地址和交换机都工作在这一层。
(3)网络层:网络层使用IP协议,将网络地址翻译成物理地址,并进行选路。
(4)传输层:主要为两台主机上的应用提供端到端的通信。常见的传输协议有TCP、UDP协议。
(5)应用层:主要负责处理特定的应用程序细节。
2 网络协议
2.1 常见网络协议
(1) TCP
TCP是面向连接的、可靠的、基于字节流的通信协议。TCP为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流量控制”、“拥塞控制”等众多机制。
(2) UDP
UDP是提供无连接的通信,不能保证数据包被发送到目标地址,典型的即时传输少量数据的应用程序通常使用UDP。
(3) HTTP
HTTP是指超文本传输协议,主要负责服务器与浏览器之间的通信。HTTP把客户端浏览器的请求发送到服务器,并把响应的网页内容由服务器返回到客户端浏览器。
【版本】
HTTP常用的有两个版本,一个HTTP1.0,另一个是HTTP1.1。区别是:
- HTTP1.0中每一个命令和应答都会触发一次TCP连接的建立和断开。
- HTTP1.1允许在一个TCP连接上发送多个命令和应答,即持久连接。
因此HTPP1.1大量地减少了TCP连接和断开操作,从而提高了效率。
【缺点】
- 通信使用明文(不加密),内容可能被窃听。
- 不验证通信方的身份,可能遭遇伪装。
- 无法证明报文的完整性,有可能被篡改。
(4) HTTPS
HTTPS从简单的来说就是安全的HTTP协议,使用了SSL协议。
HTTPS=HTTP+加密+认证+完整性保护
关于HTTPS的加密部分可以参考本文[3 加密算法]章节部分。
【缺点】
- 通信慢,因为需要进行SSL通信,所以网络负载会增加。
- 处理慢,加解密处理会大量消耗CPU即内存资源。
2.2 TCP和UDP的区别?
(1)TCP是面向连接的传输控制协议,而UDP提供的是无连接的数据服务。
(2)TCP具有更高可靠性,确保传输数据的正确性,不出现丢失和乱序。而UDP可靠性稍低。
(3)TCP对系统资源要求较多,UDP要求则较少。
(4)UDP具有较好的实时性,工作效率比TCP高。
(5)UDP的段结构比TCP的段结构简单,网络开销更小。
2.3 TCP的三次握手与四次挥手
UDP是面向无连接的通信,所以不需要检查对端是否可以通信,而是直接把UDP包发送过去。
而TCP则不同,它的连接和断开需要经过三次握手和四次断开。
在连接建立和断开的过程中,会涉及到TCP头部的两个标志位,分别是:
标志位 | 作用 |
---|---|
ACK | 确认序号 |
SYN | 同步序号用来发起一个连接 |
FIN | 发送方完成数据发送 |
(1) 三次握手(建立连接)
- 客户端发送连接请求报文(SYN=1);
- 服务器收到请求报文后,如果同意连接,则发出确认报文(ACK=1,SYN=1);
- 客户端收到确认报文后,再向服务器确认应答(ACK=1)。
最后双发建立起连接。
(2) 四次挥手(断开连接)
(1)客户端发送数据完毕后,发送一个FIN,要求断开连接。
(2)服务器收到FIN包后,发送一个ACK包,确认这一方向的连接将关闭。
(3)等待服务器的应用程序做好关闭这边时,服务器反方向发送一个FIN包给客户端,请求关闭连接。
(4)客户端确认请求,并发送ACK包。
(3) 图例
将上述过程整理为图片表示如下:
(4) 为什么是四次挥手?
由于TCP连接是全双工的,每个方向上的连接都必须独立的进行关闭和确认。
2.4 流量控制
当发送端发送的数据,接收端来不及接收时,这部分数据就会被丢弃,从来触发重传机制,会导致网络流量被浪费掉。而流量控制便是TCP提供的一种可以让发送端根据接收端的实际接收能力控制发送的数据量的机制。
发送数据量大小的限制就是窗口的大小。
在TCP首部中,专门有一个字段用来通知窗口大小,接收端主机可以将自己可以接收的缓冲区大小放入到这个字段中去通知发送端。另外发送端主机会时不时的发送一个叫做窗口探测的数据段,用于及时更新窗口大小。
2.5 拥塞控制
有了TCP窗口控制后,收发主机之间能够进行连续的发送大量数据包。但网络是一个共享的环境,如果在接发主机在通信刚开始时就发送大量数据,很有可能在网络拥堵的情况下,导致整个网络的瘫痪。所以还得考虑这个全局性的问题,即拥塞控制。
拥塞控制主要采用了四个算法,简单说来就是:
- 慢启动和拥塞避免:缓慢增加窗口的大小,使分组注入到网络中的速度更合理。
- 快重传和快恢复:收到三个重复ACK后就开启重传,并采用拥塞避免算法更快的恢复丢失的数据包。
3 加密算法
近代加密算法中加密算法是公开的,安全性通常都是靠密钥保密的方式保证的。
3.1 共享密钥加密
最快速、最简单的方式。
加密和解密同用一个密钥,也被称为对称密钥加密。
但同时密钥也必须发送给对方,在信道被他人监听,不安全的情况下,密钥就极其容易被攻击者获得,失去安全性。
3.2 公开密钥加密
每人都有一对唯一对应的密钥(一把私有密钥,一把公开密钥),私有密钥只能自己持有,而公开密钥任何人都可以知道。也被称为非对称加密。
-
发送方使用对方的公开密钥进行加密处理。
-
接收方使用自己的私有密钥进行解密。
只要自己的私钥没有泄露,攻击者想要通过密文和公钥解密密文基本是不太现实的。
3.3 混合加密机制
HTTPS采用共享密钥加密与公开密钥加密的混合加密方式。
虽然公开密钥加密安全性高,但是处理速度并不如共享密钥加密方式快,如果密钥能够安全的交换,则可以使用共享密钥方式。
通常来说,交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
3.4 数字证书
当公开密钥不正确的时候,如被攻击者篡改、调换等,同样也难保数据传输的安全性了。
为解决上述问题,就需要引入一个可信的第三方(数字证书认证机构和其相关机关),由第三方对网站的身份和公钥进行认证,如果没有问题就将其信息和公钥打包成数字证书。
服务器会将这份由可信第三方颁发的公钥证书发送刚给客户端,以进行公开密钥加密方式通信。
4 常见面试问题
由于时常见的面试问题,下列内容少量自己总结,多是摘抄或转载自网络,原文地址不可查,所以就不放链接了。不定期更新。
4.1 在浏览器输入一个URL,按下回车后会经常哪些流程?
(1)寻址:浏览器想DNS服务器请求解析该URL中域名所对应的IP地址。
(2)解析出IP地址后,根据IP地址和默认端口,与服务器建立TCP连接。
(3)浏览器发起HTTP会话请求。
(4)服务器后台操作并作出HTTP响应。
(5)浏览器解析HTTP数据,在本地窗口内渲染并显示网页。
(6)浏览器页面被关闭,HTTP会话终止。
4.2 SQL注入
SQL注入是指针对Web应用使用的数据库,执行非法的SQL语句而产生的攻击。
以用户登录作为最简单的例子:
假设输入账号=rhine,密码=123能够正常登录,不否则不能正常登录。
那么后台数据库的SQL语句拼接如下:
SELECT userName, userPwd FROM tab_user
WHERE userName='rhine' and userPWD='123';
这是正常的操作。
但当我们将刚才的输入信息改变为以下时,则输入任何密码都能登录进入系统:
当输入账号=rhine’–,密码=任意字符,则SQL语句会拼接如下:
SELECT userName, userPwd FROM tab_user
WHERE userName='rhine'--' and userPWD='adca';
SQL语句中的–之后全视为注释,导致的结果就是,后面的and条件被自动忽略。不需要密码也能登录进入系统。