计算机网络基础知识
一、网络架构
OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP五层模型:应用层,传输层,网络层,数据链路层,物理层
TCP/IP四层模型:应用层,传输层,网络层,网络接口层
二、UDP和TCP的区别(传输层)
1)TCP面向连接(如打电话要先拨号建立连接;TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达(TCP的可靠体现在在TCP在传输数据之前,会有三次握手来建立连接,而且数据传递时,有确认,窗口,重传,拥塞控制机制,数据传送完成后还会断开连接用来节约系统资源,会增加许多开销,一般TCP用于文件传输、发送、接收邮件、远程登陆等场景);TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;每一条TCP连接只能是点到点的;TCP首部开销20字节;TCP的逻辑通信信道是全双工的可靠信道
2)UDP是无连接的,即发送数据之前不需要建立连接;UDP尽最大努力交付,即不保证可靠交付;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议,QQ语音,QQ视频,直播等;UDP支持一对一,一对多,多对一和多对多的交互通信;UDP的首部开销小,只有8个字节;UDP则是不可靠信道
三、HTTP和HTTPS的区别
1)http是直接和tcp通信,https=http+ssl加密
2)http端口号为80,https端口号为443
3)https基于传输层、http基于应用层
4)https对于搜索引擎更友好,利于seo,百度、谷歌等搜索引擎优先索引https网页
ssl加密:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。
所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。
四、从输入URL到浏览器显示页面发生了什么?
1)DNS解析
2)TCP建立连接
3)发送HTTP请求
4)服务器处理请求:若有缓存直接读缓存,若无缓存返回响应内容
5)TCP断开连接
6)浏览器开始渲染页面
五、TCP报文格式
![]()
1.计算机通过端口号识别访问哪个服务,比如http;源端口号进行随机端口,目的端口决定哪个程序进行接收
2.数据序号和确认序号用于保障传输数据的完整性和顺序
3.另外,TCP的连接、传输、断开都受到6个控制位指挥
a.PSH:缓存区将满,立刻速度传输
b.RST:连接中断,重新连接
c.URG:紧急信号
e.ACK:1表示确认号
f.SYN:同步序号位,TCP建立连接设置为1
4.用户数据存储了应用层生成的HTTP报文
六、TCP三次握手和四次挥手
客户端–发送带有 SYN 标志的数据包–一次握手–服务端
服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端
Q:为什么要三次握手?
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是
双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发
送正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,
对方发送接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
断开一个 TCP 连接则需要“四次挥手”:
客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
服务器-关闭与客户端的连接,发送一个FIN给客户端
客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
Q:为什么要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送
的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接
七、HTTP请求/响应
HTTP报文大致可分为报文首部和报文主体两块
![]()
请求报文
![]()
1.GET获取资源
2.POST向服务器端发送数据,传输实体主体
3.PUT传输文件
4.HEAD获取报文首部
5.DELETE删除文件
6.OPTIONS询问支持的方法
7.TRACE追踪路径
Q:如何理解get和post的区别?
1)get请求参数跟在url后面,有长度限制(浏览器长度限制,如果是内部的get请求则不限制长度),post请求参数封装在请求头中,无长度限制。
2)get请求参数暴露,安全性保密性没有post高
3)get请求会被浏览器缓存起来,post请求内容不会被缓存
响应报文
![]()
状态码:
1xx (临时响应)
2xx (成功)
3xx (重定向)
301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
4xx (客户端请求错误)
404 服务器上无法找到资源
400 请求报文语法错误
401 需要认证
403 服务器拒绝访问对应的资源
404 服务器上无法找到资源
405 (方法禁用)禁用请求中指定的方法。
415 (不支持的媒体类型)请求的格式不受请求页面的支持。
5xx (服务器错误)
500 服务器故障
502 (错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503 服务器处于超负载或者停机维护
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
八、cookie和session的区别?cookie从哪里来?cookie失效时间由哪些方法控制?
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为session
其他信息如果需要保留,可以放在cookie中
能通过Web Server或者客户端浏览器来获取到Cookie。多数浏览器能够配置允许用户访问Cookies,但是注意不同的站点之间的Cookie是不能共享的。
Cookie有一个属性expires,设置其值为一个时间,那么当到达此时间后,此cookie失效
九、http缓存机制是怎样的,如何合理地缓存http?
缓存的优点:
- 减少了不必要的数据传输,节省带宽
- 减少服务器的负担,提升网站性能
- 加快了客户端加载网页的速度
- 用户体验友好
缺点:
- 资源如果有更改但是客户端不及时更新会造成用户获取信息滞后,如果老版本有bug的话,情况会更加糟糕。
1)强缓存基本原理是:所请求的数据在缓存数据库中尚未过期时,不与服务器进行交互,直接使用缓存数据库中的数据。
2)当强缓存过期未命中或者响应报文Cache-Control中有must-revalidate标识必须每次请求验证资源的状态时,便使用协商缓存的方式去处理缓存文件。
协商缓存主要原理是从缓存数据库中取出缓存的标识,然后向浏览器发送请求验证请求的数据是否已经更新,如果已更新则返回新的数据,若未更新则使用缓存数据库中的缓存数据。
协商缓存与强制缓存的不同之处在于,协商缓存每次读取数据时都需要跟服务器通信,并且会增加缓存标识。在第一次请求服务器时,服务器会返回资源,并且返回一个资源的缓存标识,一起存到浏览器的缓存数据库。当第二次请求资源时,浏览器会首先将缓存标识发送给服务器,服务器拿到标识后判断标识是否匹配,如果不匹配,表示资源有更新,服务器会将新数据和新的缓存标识一起返回到浏览器;如果缓存标识匹配,表示资源没有更新,并且返回 304 状态码,浏览器就读取本地缓存服务器中的数据。