计算机网络------系统学习
计算机网络----概念
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
计算机网络----性能指标
1、速率
计算机发送出的信号都是数字形式的。比特(bit)来源于binary digit,意思是一个”二进制数字“,因此一个比特就是二进制数字中的一个1或0。比特也是信息论中使用的信息量的单位。网络技术中的速率指的是数据的传送速率,它也称为数据率或比特率。速率的单位是bit/s(比特每秒)(或b/s,有时也写作bps,即bit per second)。
当提到网络的速率时,往往指的是额定速率或标称速率,而并非网络实际上运行的速率。
2、带宽
带宽本来指某个信号具有的频带宽度。信号的带宽是指该信号所包含的各种不同频率成分所占据的频率范围。这种意义的带宽的单位是赫兹(或千赫、兆赫、吉赫等),在过去很长的一段时间,通信的主干线路传送的是模拟信号(即连续变化的信号)。因此表示某信道允许通过的信号频带范围就称为该信道的带宽。
3、吞吐量(TPS)
吞吐量表示在单位时间内通过某个网络的实际数据量。系统的吞吐量与请求对CPU的消耗,服务器内存使用,IO等都有关系。
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
QPS(TPS):每秒处理的请求数
并发数:同时处理的请求数
响应时间:平均响应时间
三者的关系:QPS(TPS)=并发数/平均响应时间
4、时延
时延是指数据从网络的一端传送到另一端所需的时间。时延是个很重要的性能指标,它有时也称为延迟或者迟延。
网络中的时延是由一下几个不同的部分组成的:
(1)发送时延
发送时延是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。因此发送时延也叫做传输时延。发送时延的计算公式是:
发送时延=数据帧长度(bit)/发送速率(bit/s)
(2)传播时延
传播时延是电磁波在信道中传播一定的距离需要花费的时间。传播时延的计算公式是:
传播时延=信道长度(m)/电磁波在信道上大的传播速率(m/s)
电磁波在自由空间的传播速率是光速。即3.0*10^5km/s。
发送时延发生在机器内部的发送器中,与传输信道的长度没有任何关系。传播时延发生在机器外部的传输信道媒体上,而与信道的发送速率无关。信号传送的距离越远,传播时延就越大。
(3)处理时延
主机或路由器在收到分组时需要花费一定时间进行处理,例如分析分组的首部,从分组中提取数据部分、进行差错检验或查找合适的路由等,这就产生了处理时延。
(4)排队时延
分组在进行网络传输时,要经过许多路由器。但分组在进入路由器后要先在输入队列中排队等待,在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。排队时延的长短取决于网络当时的通信量。当网络的通信量很大时会发生队列溢出,使分组丢失,这相当于排队时延无穷大。
这样数据在网络中经历的总时延就是以上四种时延之和:总时延=发送时延+传播时延+处理时延+排队时延。
一般来说,小时延的网络要优于大时延的网络。
5、时延带宽积
把传播时延和带宽相乘,就可以得到:传播时延带宽积,即:
时延带宽积 = 传播时延 * 带宽
6、往返时间RTT
在计算机网络中,往返时间RTT是一个重要的性能指标。这是因为在许多情况下,互联网上的信息不仅仅单方向传输而是双向交互的。因此,我们有时很需要知道双向交互一次所需的时间。
7、利用率
利用率有信道利用率和网络利用率等。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道利用率是零。网络利用率则是全网络的信道利用率的加权平均值。信道利用率并非越高越好。这是因为,根据排队论的理论,当某信道的利用率增大时,该信道引起的时延也就迅速增加。
信道或网络的利用率过高会产生非常大的时延。
计算机网络----专业名词
协议:
协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
协议由语法,语义,同步组成:
语法:规定了传输数据的格式。
语义:规定了所要完成的功能。
同步:规定了执行操作的条件和顺序。
接口:
接口是同一节点内相邻两层间的交换信息的连接点,是一个系统的内部规定。
服务:
服务是指下层为相邻上层提供功能调用,也就是一种垂直服务。
OSI七层模型
应用层:
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层:
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、EBCDIC、加密格式等
会话层:
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层:
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层:
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)
数据链路层:
建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层:
建立、维护、断开物理连接。(由底层网络定义协议)
TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。
OSI分层(7层)
物理层、数据链路层、网络层、运输层、会话层、表示层、应用层
TCP/IP分层(4层)
网络接口层(包含物理层和数据链路层)、网络层、运输层、应用层
五层协议(5层)
物理层、数据链路层、网络层、运输层、应用层(合并了表示和会话层)
本博客主要讲解应用层,传输层,和网络层。
应用层
应用层简单点说就是网络服务与用户的直接交互,也就是为用户程序提供服务。
常用服务 | 协议 | 端口 |
---|---|---|
DNS | UDP | 53 |
FTP(传输请求) | TCP | 21 |
FTP(传输数据) | TCP | 20 |
TFTP | UDP | 59 |
TELNET | TCP | 23 |
HTTP | TCP | 80 |
HTTPS | TCP | 443 |
SMTP | TCP | 25 |
DNS
DNS是用于将域名转换成对应的IP地址的一个服务。
例如我们可以将域名:www.bilibili.com 转化为
IP: 222.188.43.131
FTP:
FTP提供了不同主机系统间的文件传输服务。
FTP使用的Server/Client方式。
一个FTP的Server可以接受处理多个Client端的请求,Server主要分为两个部分:主进程用于接受请求,剩余的从属进程用于处理Client请求(这样将接受和处理分开进行,可以使得效率提升)。
FTP是建立两个TCP连接完成服务,一个TCP连接(端口号:21)用于传输请求部分,另一个TCP连接(端口号:20)用于传输数据。
TFTP
也是一个文本传输服务,只不过使用的是UDP进行传输。
我们知道UDP的特点是具有一对一,一对多,多对多通信,这样在需要向多台主机传输文件时候就十分方便。
但是UDP也具有不可靠的特点,所以很有可能导致文件传输失败的情况发生。为了解决这个问题,TFTP使用类似等待回应的策略,在发送完文件以后,就等待对方发送确认信息,在规定时间内没有收到信息则再次发送文件。
TELNET
TELNET有点类似于一个聊天软件,开启后会在当前主机的telnet两个客户端和目标主机的telnet服务。
HTTP
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
如果一个浏览器想要向服务器请求数据,那么他需要做两件事。
1.与服务器建立TCP连接。
2.发送请求数据给服务器。
第一步是建立通信的基础,不需要多讲解。
第二步这个请求数据包含哪些内容?首先就是你究竟是向服务器请求获取数据还是请求提交数据,下一步就是请求的位置等等等。
上述图片很形象的介绍了浏览器和服务器通过HTTP协议实现的交互过程。
这里说明HTTP协议主要包含三个部分:请求行,请求头,数据内容。
请求行:服务器端定义的不同url对应不同的服务,我们通过访问url来获取页面和资源。
请求头:包含一些格式问题,比如使用(text,json,),连接,长度,用户代理等等。
数据内容:提交给服务器进行处理的数据。
HTTP特点:
无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作。(目前可以通过cookie和session对用户信息进行保存)
无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
基于请求和响应:基本的特性,由客户端发起请求,服务端响应
简单快速、灵活
通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
HTTPS
因为HTTP协议通信是使用明文传输,并且请求和响应并不会进行确认,所以导致如果黑客攻击后获取到传输报文,那么就相当于直接信息泄露(尤其是针对私密信息,例如银行卡号,密码)。所以这里推出了HTTPS协议。
HTTPS(安全套接字超文本传输协议)。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立安全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
HTTPS工作流程:
1.访问服务器
2.服务器从数字签名中获取公钥和私钥。
3.服务器响应给浏览器自己的公钥。
4.浏览器生成一个随机数,用该随机数作为(对称加密)**,将该随机数用公钥进行加密,
5.将加密后的随机数传输给服务器。
6.服务器用私钥解密,获取到**。
7.开始进行传输(数据使用对称加密)。
可以发现HTTPS使用了混合加密方式,使得数据传输变得十分安全,但是相对的缺点也就在于加载时间的增加和成本的增加。
SMTP
简单邮件传输协议。
传输层
TCP
1、TCP 的主要特点:
(1)面向连接。进行数据传输前,必须建立TCP连接,保证通信双方都可以发送和接收信息
(2)只支持点对点通信。
(3)可靠交付。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达。
(4)全双工通信。允许通信双方的应用进程在任何时候都能发送数据。
(5)面向字节流。TCP 将应用层传送下来的数据块看作字节流,每一个字节都有对应的编号。
三次握手
首先我们需要确认的是,服务器是被动连接,客户端是主动连接。
第一次握手: 客户端向服务器发送信息(包含自己信息的起始序号)。相当于告诉服务器我想要建立连接。此时SYN = 1 ACK = 0,代表这个是一个连接。
第二次握手:服务器端回复客户端(包含自己的起始序号)。相当于服务器告诉客户端我知道了。此时SYN = 1 ACK = 1,代表这是一个响应。
第三次握手:客户端告知服务器端我下面要开始传输了并且告知第一个数据的位置。此时ACK = 1,TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。
老生常谈的问题:为什么非要三次,不能是两次?
首先我们要知道的就是网络传输是无法真正可靠的,因为当这一方发送给那一方信息的时候,如果那一方不回复的话,那么这一方永远不知道对面是否收到。
首先针对于两次握手。
第二次握手后只能够保证客户端收到了服务器的连接通知,即保证客户端可以收到服务器的消息。
但是服务器端并不知道自己是否发送成功,这样就无法保证客户端是否能够接收服务器端的信息,说明这样的连接是不可靠的。
只有三次握手才能够保证两方是连通的。
四次挥手
第一次挥手:客户端发送给服务器。相当于告知服务器我想要关闭连接。此时FIN = 1,代表客户端已经发送完所有信息。
第二次挥手:服务器发送给客户端。相当于告知客户端我收到了你要关闭的信息。此时ACK = 1,FIN = 0,代表客户端还有信息需要发送给客户端。
第三次挥手:服务器发送给客户端。相当于告知客户端可以关闭了。此时FIN = 1,ACK = 1,代表服务器也发送完了。
第四次挥手:客户端等待2MSL后发送给服务器。相当于告知服务器我收到了关闭信息。
常问问题:
为什么连接需要三次握手,而断开需要四次挥手?
因为连接之前两方都没有开始数据传输,所以再确认完两方通信没问题的时候就可以直接开始传输。
但是断开连接时候,客户端申请断开,说明客户端已经发送完了,但是此时服务器很有可能仍有数据需要发送给客户端,所以这里只能先提前告诉客户端收到了信息,让客户端等一会,等服务器发送完了再通知客户端断开。所以相比连接多了一次挥手。
为什么第三次挥手后客户端需要等待2MSL再进行第四次挥手
因为当第三次挥手服务器给客户端发送FIN = 1断开请求时,如果这个报文丢失了,那么客户端还可以等待2MSL,服务器通过超时重传再发送一次,客户端收到后再进行第四次挥手。
UDP
UDP 的主要特点是:
(1)无连接
(2)尽最大努力交付,即不保证可靠传输
(3)面向报文,UDP对应用层交下来的报文,既不合并,也不拆分,而是在添加 UDP 的首部后,便直接交给了网络层
(4)无拥塞控制
(5)支持一对一、一对多、多对多的交互通信
(6)UDP的首部开销小