思维导图(复习范围)
计算机网络体系结构
OSI七层结构概念非常清晰,理论比较完整,但是他不实用,也很复杂。
TCP/IP是一个四层的结构,一般应用广泛。
五层体系结构则是综合了这两个模型的优点,比较易懂,和四层的区别就是把网络接口层换成数据链路层和物理层。
五层体系中应用层是通过两个应用之间的的通信交互来完成特定网络应用,协议有域名解析DNS,HTTP协议。
运输层是提供数据传输服务给两台主机,协议有tcp或者udp协议。
网络层是选择合适的网络路由和交换节点,把运输层的数据分组进行传输,协议有ip协议。
数据链路层是把数据封装成帧进行传输,物理层是比特流形式传输。
应用层协议
- 基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH、pop3
- 基于UDP的应用层协议:DNS、TFTP(简单文件传输协议)、SNMP:简单网络管理协议
TCP与UDP
TCP是可靠的,面向连接的传输服务,所以一般用于文件传输,远程登录等场景。UDP则相反,是不可靠的,尽力把数据传输过去,不考虑是否发错,无连接的服务。用于语音,视频,直播等场景。
TCP特点
1.是有连接的,每次通信都要通过三次握手来建立连接,四次挥手来释放链接。
2.全双工通信,双方都可以随时进行发送,两端都有缓存
3.是点对点的连接,只能一对一
4.可靠的传输,不会有丢失,错误,乱序。
UDP特点
1.无连接的
2.尽最大努力进行数据传输,不考虑发送是否正确
3.面向报文
4.没有拥塞控制,在网络拥塞的时候,不会使发送速率变低。
5.可以一对一也可以一对多。
6.UDP首部开销比TCP小,只有8个字节
三次握手与四次挥手
TCP中建立连接是用三次握手的方式,这里的ack是确认号,ACK则是确认字段,两者不太一样。
一开始客户端主动打开连接,去向服务器端发送请求报文,此时服务器端收到请求报文后,就会跟客户端进行确认,表示自己已经收到了,那客户端收到后,就会进入ESTABLISHED状态(已经建立连接)。
但是这个时候为什么客户端会再发送一次呢,假设没有第三次的请求发送,那么就是客户端发出请求,服务器端确认并发送回复,这样子就建立连接了。假设有一种情况,当客户端发送的请求因为请求报文丢失而没有收到服务器端的确认,那么就会重新发送一次请求连接报文,这个时候服务器收到并发送确认。如果客户端第一次发送的请求因为网络问题,延迟到很久之后才发送到服务器端,那么服务器端就会误以为这是一个新的连接,就会表示已经收到,发送确认报文。可实际上这个时候客户端并没有发送请求连接,那么就不会去管服务器的确认报文,服务器则一直在等着客户端发送数据,造成资源浪费。所以才要采用三次握手,让客户端再次发送一次确认报文给服务器端。
连接释放的过程是客户端先向服务器端发送信息,服务器端收到后会立马返回确认信息,但是这个时候服务器端可能还有数据要进行发送,所以服务器端要等到发送完全部数据后再发送释放连接的信息,客户端收到这个信息后,立马进行确认,同时要等待一段时间再关闭,如图的计时等待,最后服务器端收到确认信息并关闭。
为什么要等待一段时间再关闭呢,这是因为如果客户端确认的报文丢失了,那么服务器端收不到就会进行重新发送,这个时候要是客户端立马关闭就收不到了,所以要等一段时间才可以关闭。同样要是出现延迟很长时间才发送到的情况,客户端也已经关闭了,就不会去理睬。
拥塞控制
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。
先介绍一下基本概念,cwnd是发送方维护的一个根据网络动态变化的窗口,ssthresh是一个阈值,
慢开始:一开始不太清楚网络的实际情况,不能一窝蜂的把数据全部塞进去,要先试探一下,即从小到大慢慢增大cwnd,初始值为1,经过一个RTT(传输轮次),cwnd就会翻倍,这个时候如果cwnd大于ssthresh的话,那么就会转变成拥塞避免算法。
拥塞避免:让cwnd缓慢增大,即每个RTT让cwnd+1。避免增长过快然后导致网络拥塞。
如果在慢开始或者拥塞避免阶段发生了网络出现拥塞,那么ssthresh就会变为此时的发送窗口的一半(不能小于2),并且cwnd会从1重新开始。
快重传与快恢复:如果接收方收到的数据没有按序传输过来,就马上发送重复确认(让发送方马上知道有数据没有按序传输),如果发送方收到三个重复的确认,那么就会立即重传没收到的数据
此时ssthresh会减半,并且发送方认为这个时候很有可能不会网络阻塞,那么就不用cwnd从1开始,而是初始值为减半后的ssthresh,然后执行拥塞避免算法慢慢增大。
Tcp如何保证可靠传输
1.Tcp会给发送的数据包进行编号,接收方进行排序,把有序数据传送给应用层。
2.校验和,tcp会保持首部和数据的校验和,是一个端到端的校验和,如果在发送过程中校验和出现了任何变化,那么接收方就会丢弃这个报文段,并不确认收到此报文段。
3.拥塞控制:当网络拥塞时,减少数据的传输量
4.Tcp的接收端会丢弃重复数据。
5.流量控制:Tcp两个端都有固定大小的缓冲区域,如果接收方来不及处理发送方的数据,就会提醒发送方降低速率,不要发送过多数据导致数据丢失。用的是滑动窗口来实现流量控制。
6.ARQ协议(停止与等待ARQ协议,连续ARQ协议)
7.超时重传:当tcp发送方发出一个报文段之后,就启动一个计时器,如果在这个时间内没有得到接收端发回来的确认,就重新发送。
http与https
- 两者用的是不同的连接形式,http默认端口号是80,https默认端口号是443.
- https需要ca申请证书,一般很少免费证书,需要一定费用
- http传输的内容都是明文,客户端和服务器无法验证对方身份。https是运行在SSL/TLS之上的http协议。https传输的内容经过加密了,加密采用对称加密,因为传输速度快,但对称加密的密钥用服务器方的证书进行了非对称加密,因为较难破解。http的安全性没有https高,同样https比http耗费更多的服务器资源。
对称加密:密钥只有⼀个,加密解密为同⼀个密码,且加解密速度快,典型的对称加密
算法有DES、AES等;
非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),
加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称
加密速度比较慢,典型的非对称加密算法有RSA、DSA等。
http格式结构
分为请求头,请求行,请求体,也有空行在请求头和请求体中间
请求行有请求方法(get,post等),URL字段,还有http协议版本
请求头有关键字和值组成。常见的有Host:请求的主机名,User-Agent:产生请求的浏览器类型,Accept:客户端可识别的内容类型列表。
http1.0 1.1 2.0
版本 | 特性 |
---|---|
http1.0 | 默认使用短连接的方式(一次请求就建立一个tcp连接,请求完断开),也可以设置keep-alive来换成长连接,如果一个网页有多个图像资源,那么就会申请多个tcp连接,就会浪费资源 。支持get,post,head请求 |
http1.1 | 默认使用长连接的方式(一个tcp连接可以多次请求,在一定时间内保持连接)也可以设置成短连接。新增了五种请求类型。请求头部增加了host字段,请求消息和响应消息都支持host头域,如果没传还会返回一个错误状态码。新增了多个状态码 |
http2.0 | 多路复用(一个tcp连接可以处理多个请求),同时以前是基于文本解析,现在基于二进制解析,错误更少,更高效了。对header压缩,数据更少,传输速度快 |
网络状态码
状态码 | 意思 |
---|---|
1xx (信息性状态码) | 接收的请求正在处理 |
2xx (成功状态码) | 请求正常处理完毕 |
3xx (重定向状态码) | 需要进行附加操作以完成请求 |
4xx (客户端错误状态码) | 客户端无法处理请求 |
5xx (服务器错误状态码) | 服务器处理请求出错 |
get和post的区别
- get花费一个tcp数据包,post花费两个tcp数据包,速度get会快一点。
- get会把请求参数放到url上,post则是放到请求体中,这样子get就不安全,同时url长度有限制,所以get传输数据比较小
- get可以被当做书签被浏览器缓存,post不可以
WebSocket
WebSocket是应用层的协议,他是全双工通信,同时在连接上与http的短连接不同,用的是长连接。一旦连接上了,就直接在建立的一个tcp上发送多次请求,不用重复连接。