主要参考于这个博主https://blog.csdn.net/justloveyou_的一些文章,并根据自己的面试经验做了相关的补充。
层次结构
计算机网络的体系结构:
1,OSI七层:结构清楚,理论完整,复杂不实用,层次划分不合理,功能重复出现。
- 应用层:应用进程之间相互通信和交互,DNS、HTTP、FTP、SMTP,交互的数据称为报文
- 表示层:信息的加密,解密,压缩,解压缩等。
- 会话层:不同机器上的用户之间建立和管理会话。
- 运输层:为两台主机的进程之间的通信提供通用的数据传输服务。一台主机可以运行多个线程,所以具有复用和分用的功能。复用指的是多个应用层进程可以同时使用下面运输层的服务,分用指的是运输层把收到的信息分别交付给应用层中相应的进程。主要用TCP和UDP两种协议。
- 网络层:负责为分组交换网上的不同主机提供通信服务。把运输层产生的报文或者数据报封装成分组和包进行传送。交互的数据称为IP数据报。另一个任务就是选择合适的路由。
- 数据链路层:两台主机之间的数据传输。将网络层交下来的IP数据报组装成帧,在两个相邻节点的链路上传送帧。每一帧包括数据和必要的控制信息(同步信息,地址信息,差错控制等),数据链路层可以检错还可以纠错。
- 物理层:传送的数据单位为比特,实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。
2,TCP/IP四层:
- 应用层:
- 运输层:
- 网络层:
- 网络接口层
3, 五层:OSI和TCP/IP折中,简介又将概念阐述清楚。
- 应用层:
- 运输层:
- 网络层:
- 数据链路层:
- 物理层:
不同层次涉及到的设备:
- 物理层:网卡,网线,集线器,中继器,调制解调器
- 数据链路层:网桥、交换机
- 网络层:路由器
- 传输层及以上:网关
路由器:连通不同的网络,选择信息传送的线路。
交换机:进行报文交换的机器,可以进行地址学习,采用存储转发的形式来交换报文。
集线器:采用广播的形式来传输信息。
交换机和路由器的区别:
- 工作层次不同: 数据链路层、网络层
- 数据转发对象不同:根据MAC地址转发数据帧、根据IP地址转发IP数据包/分组。MAC地址固化在网卡的ROM中,不能被修改,IP地址描述主机所在的网络。可以修改。
- 分工不同:交换机用来连接局域网中的电脑,组建局域网(不能访问外网),路由器负责让主机连接外网,连接不同的网络。
- 冲突域和广播域:交换机分割冲突域,不分割广播域,路由器分割广播域。
- 路由器一般具有防火墙的功能,能够对一些网络数据包选择性过滤。
集线器与交换机的区别:
- 工作层次:物理层;数据链路层
- 宽带影响:共享;独享
- 数据传输:广播发送(局域网内所有电脑都可以接收到消息);有目的的发送(MAC地址)
- 传输模式:半双工;全双工或半双工;
应用层
HTTP协议
超文本传输协议,所有的www文件都必须遵守这个标准。
Http和Https的区别
- 应用层、传输层
- 不安全(明文传输,无法验证相互的身份)、安全(SSL(安全套接层)+HTTP,增加了加密和认证机制的http)
- 端口号:80、443
- 不需要申请证书,需要申请证书
- 资源开销小、由于加密需要消耗更多的资源
HTTPS认证过程
有单向验证和双向验证之分
单向验证就是server端将证书发送给客户端,客户端验证server端证书的合法性等,例如百度、新浪、google等普通的https网站,
双向验证则是不仅客户端会验证server端的合法性,同时server端也会验证客户端的合法性,例如银行网银登陆,支付宝登陆交易等。
SSL缺省只进行server端的认证,客户端的认证是可选的。
- 服务器把自己的公钥登录至数字证书认证机构。
- 数字证书机构把自己的私有密钥向服务器的公开密码部署数字签名并颁发公钥证书。
- 客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签名。以确认服务器公钥的真实性。
- 客户端将自己的对称加密的密钥用服务器的公钥加密以后传给服务器,。
- 服务器用私有密钥对报文解密,得到对称密钥,进行数据传送。
Https应用场景
银行网站、支付网关、购物网站、登录页、电子邮件以及一些企业部门的网站应该使用 HTTPS。
影响 HTTP 网络请求的因素
1,带宽:
如果说我们还停留在拨号上网的阶段,带宽可能会成为一个比较严重影响请求的问题,但是现在网络基础建设已经使得带宽得到极大的提升,我们不再会担心由带宽而影响网速,那么就只剩下延迟了。
2,延迟:
网络波动和延迟
DNS 查询(DNS Lookup):浏览器需要知道目标服务器的 IP 才能建立连接。将域名解析为 IP 的这个系统就是 DNS。这个通常可以利用DNS缓存结果来达到减少这个时间的目的。
浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能有 4 个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
服务器本身的原因:跨域服务,服务器超负荷,配置过低等。
建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。
如何网络诊断:
Ping:查看连通性
Traceroute:用于检查您本地设备发送数据包到远程服务器所经过所有网关的地址及时间。 使用这个命令,可以检查访问服务器是因为哪里的网关速度慢而影响了访问速度。
http和https的端口号是否可以修改,怎么修改?
可以修改。
http通过Apache安装目录下的httped.conf文件,将listen后面的80改为想要的端口号;
https通过Apache安装目录下的httped-ssl.conf文件,将所有的443改为你想设置的端口号;
最后重启Apache。
对称加密和非对称加密
对称加密是指加密和解密使用同一个密钥,问题:如何将密钥安全的发送给对方。
非对称加密:加密用公钥,解密用私钥。问题:效率慢。
解决方法:还是用对称加密发送文件,但是使用非对称加密发送对称加密的密钥。
Get与POST的区别
两种http的方法。
- get从服务器获取资源;post更新服务器资源。
- get是幂等的,多次读取统一资源,得到相同的数据;post不是幂等的,会改变服务器资源。
- get请求的参数附在URL之后,即放在http报文的请求行中,以?分割URL和参数,参数之间用&相连,ascii编码;post请求把提交的数据放在http请求报文的请求体中,标准字符集编码。
- get提交的数据明文出现在url中,不安全,post包装在请求体中。
- get请求的长度受限于浏览器或服务器对于url长度的限制,post请求没有大小限制。
Get请求中为什么要URL编码:
Get请求中会对url中非西文字符进行编码,目的是避免歧义,比如参数中含有&时,误认为&为参数连接的标志。
Http的其他请求方法:
Get: 发送请求来获得服务器上的资源
Post: 向服务器提交资源让服务器处理
Head: 获取http的头信息,主要用来检查资源或超链接的有效性或是否可以可达、检查网页是否被串改或更新,获取头信息等
Put:和post类似,html表单不支持,发送资源与服务器,并存储在服务器指定位置,要求客户端事先知道该位置;
Delete:请求服务器删除某资源。
Connect:就是把服务器作为跳板,去访问其他网页,然后把数据返回回来,连接成功后,就可以正常的get、post了。
Options:获取http服务器支持的http请求方法,
Trace:回显服务器收到的请求,主要用于测试或诊断。
从输入网址到获得页面的过程,其中涉及到的协议
- 浏览器查询DNS,获取域名对应的IP地址。
- 浏览器向服务器请求建立连接,发起tcp三次握手
- 浏览器向服务器发送http请求
- 服务器接收并处理http请求,将结果返回给浏览器。
- 浏览器显示页面。
DNS,TCP,IP,OSPF,ARP,RARP,HTTP
常见状态码及原因短语:
1)1xx:请求处理中,请求已被接受,正在处理
2)2xx:请求被成功处理
200:请求成功,一般用于get和post
201:成功请求并创建了资源。
3)3xx:重定向