计算机网络复习总结
网络模型
- 网络模型分为 OSI七层模型和TCP/IP四层模型。七层模型太复杂,四层模型太简单,所以学习是时候常用无层模型来代替。
HTTP比你想象的重要的多!!
- HTTP是什么
HTTP的作用:规定了网络上信息传递的格式。只有大家统一了格式,那么才能进行有效的沟通。HTTP是不维护客户端的信息的!!! - HTTP的工作流程
- 假设使用的是TCP协议。
- 服务器开放计算机80端口监听客户端的请求
- 客户端发起请求(简历TCP连接)
- 交换HTTP报文(客户端发送,服务器相应)
- 关闭TCP连接
- HTTP和HTTPS的区别
- 前面说到了HTTP只是规定了信息在网络上传递的格式,但是它并没有保证一个安全性。
- HTTPS底层是使用TCP来建立可靠传递的。HTTP的话还是可以使用UDP的呢
- HTTPS采用非对称加密和对称加密的方式,保证了信息在网络上流通的时候不是透明的。
- 对称加密和非对称加密
- 对称加密就是秘钥锁消息,秘钥解消息
- 非对称加密,服务器公布公钥,想要发送消息的客户端拿这个公钥锁消息,服务器还有秘钥解消息。
- HTTP1.0和HTTP1.1
- 加入了很多新的状态码比如100在请求大资源的时候会有一个预热
- 更新了缓存机制
- 连接方式从1.0的短连接变成了长连接
- 在请求头上加入了Host字段
- 长连接和短连接
长连接和短连接是定义在TCP这个基础上的。在新的HTTP1.1中加入了字段 connect:keep-alive。这个定义之后,客户端和服务端消息发送完毕之后,这个TCP连接并不会断开,而会保持一段时间(举例Nginx中是75s)。短连接就直接断开了
websocket协议
websocket协议是相对于http协议的。它最核心的一点,它是双向的,全双工协议。什么意思举个例子
当我们要实现一个异步消息更新的时候,如果采用的是http,那可能就是定时通过js发起一个请求,从服务器拿回数据后渲染页面。而如果采用websocket就不一样,它是主动从服务器push数据到前端。
应用层常见的协议
- HTTP协议
- SMTP(简单邮件传输协议)
- FTP(文件传输协议)
- SSH(安全访问协议)
TCP
-
三次握手的流程(建立)
- 第一次握手:客户端发送带有SYN标志的数据包,服务度确定客户端发送没有问题,自己接收没有问题。
- 第二次握手:服务端发送带有SYN/ACK的数据包,客户端确认自身发送没有问题,接收没有问题,确认服务端发送接收没有问题。服务度确定自身发送没有问题,接收没有问题。
- 第三次握手:客户端发送带有ACK标志的数据包,客户端确认自身发送接收真长,服务端发送接收正常,服务端确认自身发送接收正常,客户端发送接收正常。
三次握手的目的是为了建立可靠的通信通道,说到通讯,简单来说就是数据的发送与接收而三次握手的 主最主要的目的就是双方确认自己与对方的发送与接收是正常的。其中SYN是为了告诉发送端,我接受到的信息确实是你发送的信号。
-
四次握手(断开)
- 客户端发送FIN,关闭客户端到服务端的数据传送
- 服务器收到FIN,返回ACK确认。
- 服务端发送一个FIN给客户端
- 客户端返回一个ack
-
TCP安全传输
- 校验和
- 拥塞控制
- 流量控制
为什么要四次握手,举一个很形象的例子,A和B打电话,A说完说我要结束了,B回答,我知道了。但是B可能还有话说,等B说,我说完了,A回答,知道了,这才算通话结束。
OSI七层模型
第一层:应用层,很多软件都会运行在这一层,比如qq wechat等等,这些软件页采取了不同的协议,比如www FTP等协议。主要定义软件之间交互的协议
第二层:表示层,这一层主要是数据的加工师,用于加密解密,把比特流翻译,压缩等。
第三层:会话层,为了表示层服务,有序的,安全的像表示层传递数据,会有一些校验点等问题。
第四层:传输层,负责端到端的通信在这一层,会有可靠传输,差错控制,流量控制,复用分用等功能。
第五层:网络层,很重要的一层,形成数据报,会有路由选择,流量控制,差错控制,拥塞控制等功能。
第六层:数据链路层,这一层就是把数据按组装成帧的形式传输
第七层:物理层,把比特转换成高低电平,还包括光缆等物理设备。
差错控制
起因:差错基本上都是由噪声引起的。
类型:1. 位错 2.帧错:丢失,重复,顺序颠倒
解决方案:校验码(奇偶校验码,循环冗余码),纠错码 海明码
流量控制
起因:当发送方和接收方速度不匹配的时候,就需要流量控制。因为会造成传输出错的问题。
解决方法:停止等待协议,滑动窗口协议
- 停止等待ARQ协议
首先明确ARQ是自动重传请求协议,简单来说,发送方在一段时间没收到确认帧,就会重新发送消息。
停止等待ARQ,发送一个帧,停止发送,等待对方确认,确认无误传送下一个帧。如果发送无误,接收方就会发送一个ack确认符号。如果发送有误,等待一个超时等待的时间(超时重传),发送方再次发送。 - 滑动窗口协议
可以把停止等待协议理解为特殊的滑动窗口协议。
介绍一下四个概念- 发送窗口:发送方维护的工作集,只有当最头部的帧确收到确认消息后,才能向后滑动。
- 接受窗口:接收方维护的工作集,只有当最头部的帧接收到发送方传来的帧,才会向后滑动。
- ack:传递给发送方的确认信息。
- 备份:每次发送方发完一个消息,都会进行一个备份,防止超时重传。
只有允许发送的窗口中可以发送信息。
不允许发送的窗口不允许发送
接受窗口动了发送创口才能动
- 退后N帧协议
发送方可以发送很多,但是接受方需要返回ack,发送方法到了5,但是只返回ack3,那说明 4 5全部丢失,需要退后重新发。
网络层
网络层的主要任务,就是把分组从远端传送到目的端。它会把数据切分,变化成数据报的格式。在这一层,他可以根绝算法选择路由,选择分组转发。
路由选择(路由选择算法)
- 静态路由算法,管理人员,人工配置(适用于较小的商业网络,对于大型的网络不适用)。
- 动态路由算法,路由器彼此之间交换信息,按照路由算法优化出路由表选项。RIP,OSPF都是其中经典的算法。
- RIP
RIP的话维护的是所有网络信息,但是每一个路由器都仅仅和相邻的路由器交换信息,交换的是自己的路由表。但是出现故障会有死循环的可能,所以设置了最大传播率为15次。它只适合小型网络。 - OSPF:开放最短路径协议,底层是迪杰斯特拉算法。
- RIP
拥塞控制
如果说流量控制是端到端的,那么拥塞控制就是对于全局的把握
慢开始与拥塞避免
慢开始:有一个发送的轮次,发送的报文段从1 2 4 8 16 然后达到一个阈值就会开始拥塞避免,变成16 17 18这样涨,遇到拥塞情况,且更新阈值为原来的一半
快重传与快恢复
快重传
当接受方,接收到一个失序的报文段,就会发送一个重复确认请求,接受方连续接受到3个,就会重新发送。
快恢复
他不是把把窗口设为1重新慢慢增加,而是设为阈值的一般
拥塞控制总有有4个点需要掌握
- 慢开始和拥塞避免组合。慢开始只是起点低,但是增长速度不慢,发送窗口变化为1,2,4,8…指数型上涨。当发送窗口达到规定的门限,就会变成拥塞避免算法,发送窗口的增加变成线性增加。一旦发送拥塞,就把门限放低成1,重新开始执行慢开始算法
- 快重传和快开始。快重传,当接收方收到一个无序的数据,就会发送重复确认请求,连续三个重复确认请求,就会重新传送数据。快开始是,遇到拥塞的情况,发送窗口变为原来的一半,而不是降为1
五层模型
OSI的七层模型太繁复了,而TCP/IP略显简单,所以这种选择了5层模型
应用层:同样,主要还是定义软件之间的互动协议。
运输层:主要任务是负责两台主机进程之间的通信,提供数据传输服务(TCP、UDP)
网络层:又称为IP层或者网际层,他主要负责选择合适的路由器,选择合适的交换节点,来保证数据报的传输。
数据链路层:把数据报分装成帧,专门的链路层协议,每一帧包括必要的控制信息。
物理层:实现相邻计算机节点的数据传输。
TCP是如何保证可靠传输的
- TCP会对包编号,有序发送
- 校验和
- TCP接收端会丢弃掉重复的数据
- 流量控制
- 拥塞控制
- 超时重传
- ARQ(停止等待协议)
在浏览器中输入url地址显示主页的过程
- DNS域名解析
- 连入互联网的计算机会被分配一个非权威的DNS服务器
- 现在解析一个域名,首先拿这个域名去这个非权威的DNS服务器上查找IP,如果有对应的IP就返回,如果没有,就会从配置文件中,返回13个根域名的服务器地址
- 向13台根域名服务器中的一台发起请求
- 根服务器拿到请求,会根据 com baidu www这样的顺序一遍一遍访问这个顶级域名服务器。
- 拿到IP之后就可以访问了。
- TCP连接
- 发送HTTP请求
- 服务器请求并返回HTTP报文
- 浏览器渲染页面
- TCP关闭连接
状态码
1xx 正在接受请求,正在处理
2xx 成功的状态码
3xx 重定向状态码
4xx 客户端出错出错
5xx 服务器出错
各种协议和HTTP协议之间的关系
- 首先客户端发起请求,这样需要DNS返回对应的IP地址
- HTTP协议在这个时候规定了报文如何发送等等
- TCP协议在这里将HTTP报文分割成好多段,然后可靠传输
- IP协议搜索对方地址一边中转一边传送
- 服务度用TCP协议解析
- 服务端用HTTP包裹返回报文重新返回过去
HTTP是如何用于保存用户状态的
session和cookie
session存在服务端,保密性高
cookie存在在客户端,保密性低。
URL和URI的区别
URL是一种具体的URI
URI是统一资源标志服,标识一个资源
URL是统一资源定位符,不光标识了一个资源还给了访问的路径。