计算机网络
体系结构
五层体系结构由应用层,运输层,网络层(网际层),数据链路层,物理层组成。运输层最主要的协议是 TCP 和 UDP 协议,网络层最重要的协议是 IP 协议
七层体系多的是表示层和会话层
TCP/IP体系结构
应用层
应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。
常见协议有域名系统DNS,支持万维网应用HTTP协议,支持电子邮件的 SMTP协议,我们把应用层交互的数据单元称为报文
运输层
运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务
运输层主要使用以下两种协议:
- 传输控制协议 TCP(Transmission Control Protocol)–提供面向连接的,可靠的数据传输服务。
- 用户数据协议 UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。
网络层
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。
这里要注意:不要把运输层的“用户数据报 UDP ”和网络层的“ IP 数据报”弄混。另外,无论是哪一层的数据单元,都可笼统地用“分组”来表示。
数据链路层
两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议
物理层
物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异
TCP三次握手
步骤:
- 客户端 - 发送synchronize数据包给客户端 (一次)
- 服务端 - 发送SYN/ACK 包给客户端 (两次)
- 客户端 - 发送ACK包给服务端 (三次)
需要三次握手的原因
三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
四次挥手
步骤:
- 客户端 - 发送FIN包,关闭客户端到服务端的链接
- 服务端 - 收到FIN, 返回一个ACK
- 服务端 - 关闭链接,并发送一个FIN给客户端
- 客户端 - 发送ACK确认
TCP与UDP的区别
TCP 协议如何保证可靠传输
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- TCP 的接收端会丢弃重复的数据。
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制: 当网络拥塞时,减少数据的发送。
- **ARQ协议:**它通过使用确认和超时这两个机制实现可靠传输,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
ARQ协议
自动重传请求(Automatic Repeat-reQuest,ARQ),ARQ包括停止等待ARQ协议和连续ARQ协议
停止等待ARQ
它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组
如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组
优缺点:
连续ARQ
连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
优缺点:
- 优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。
- 缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。
流量控制
TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收
拥塞控制
拥塞:对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量,防止过多的数据注入到网络中,所以使得网络中路由器或者链路不过载。
与流量控制的区别:流量控制往往是点对点通信量的控制,它所做到的是抑制发送端发送的数据的速率,以便接收端来得及接收。而拥塞控制是一个全局性的过程。
四种算法
-
慢开始 当主机开始发送数据时,先探测一下网络,由小到大的增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。 -
拥塞避免 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1. -
快重传 在 TCP 传输过程中,如果发生了丢包,接收端就会发送之前重复 ACK,比如 第 5 个包丢了,6、7 达到,然后接收端会为 5,6,7 都发送第四个包的 ACK,这个时候发送端受到了 3 个重复的 ACK,意识到丢包了,就会马上进行重传,而不用等到 RTO (超时重传的时间) -
快恢复 如果发送端收到了 3 个重复的 ACK,发现了丢包,觉得现在的网络状况已经进入拥塞状态了,那么就会进入快速恢复阶段:
- 会将拥塞阈值降低为 拥塞窗口的一半
- 然后拥塞窗口大小变为拥塞阈值
- 接着 拥塞窗口再进行线性增加,以适应网络状况
HTTP状态码
DNS解析过程
HTTP长连接 短连接
HTTP协议
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?-> Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态
大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。
Cookie 被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在URL路径的后面。
Cookie与Session
Cookie 一般用来保存用户信息, 保存在客户端(浏览器端) 比如我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了
Session 的主要作用就是通过服务端记录用户的状态。当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。 服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。
HTTP长连接与短连接
HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:(有一定的保持时间)
Connection:keep-alive
同时1和1.1的区别还有
- 错误状态响应码,在HTTP1.1中新增了24个错误状态响应码
- 缓存处理
HTTP与HTTPS区别
-
端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。 -
安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
- 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
- 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
浏览器输入url会发生什么
1.DNS域名解析;
2.建立TCP连接;
3.发送HTTP请求;
4.服务器处理请求并返回响应结果;
5.浏览器解析渲染页面
6.连接结束
https://segmentfault.com/a/1190000006879700
GET和POST区别
- 原理上来说,GET请求是请求服务器发送某个资源, POST请求是向服务端提交数据
- 表现形式区别,GET请求的数据会暴露在地址栏中,而POST请求则不会
- 安全性,因为请求数据的暴露,POST的安全性比GET的高
- 传输数据大小区别,GET请求的传输数据会受到URL长度的限制,对于POST,由于不是URL传值,理论上是不会受限制的。
DNS解析域名的步骤
- 检查浏览器缓存
- 没有,检查本机的hosts文件
- 没有,检查本地DNS解析器缓存
- 没有,跳到root server域名服务器
|