计算机网络是网络时代的基石,从大型计算机到个人电脑,再到手机,计算机网络已经成为了互联网时代的不可缺少的一部分。
目录:
局域网&广域网#
计算机如果按照网络规模来划分,主要可分为 局域网
和 广域网
。
- 局域网:主要是在一个偏小的区域内,比如一个家庭、社区或者公司,其内形成私人网络,除了这个区域的终端外, 其他终端均无法访问其内容;
- 广域网:广域网算是局域网的集合,当局域网的规模扩大,并且都互相保持访问,慢慢的这样一个巨大的集合体变成了广域网。
网络协议#
计算机网络的顶层核心之一就是网络协议
,网络协议
是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合.
通过这些规则,我们可以在网络上轻松的发送按这些规则组装好的数据,和解析所接收的数据。
常见的协议模型有两种:
- 第一个则是 ISO参考模型: (国际标准,但是复杂并且发展缓慢)
ISO七层模型 | 作用 |
---|---|
应用层 | 针对相关应用的协议,比如邮件、视频等 |
表示层 | 对应用层提供底层协议支持,比如加密、压缩等 |
会话层 | 管理通信的协议 |
传输层 | 管理两个节点之间的数据传输 |
网络层 | 地址和路由的管理 |
数据链路层 | 设备之间的数据帧传送 |
物理层 | 传送数据的物理功能和规范 |
- 第二个则是 TCP/IP协议簇:(这个更加的常用)
TCP/IP | ||
---|---|---|
应用层 | 应用程序 | HTTP,DNS,FTP,SSH,TELNET |
传输层 | 操作系统 | UDP,TCP |
网络互连层 | 操作系统 | ARP,IP,ICMP |
网络接口层 | 设备驱动,网络接口 | 以太网,WIFI,PPP |
硬件层 | 设备驱动,网络接口 |
TCP/IP协议簇 与 ISO参考模型 的区别:
- 对于
TCP/IP协议簇
来说,应用层、表示层和会话层的服务很接近,所以合并成一个层次:应用层
;- 网络层 和 数据链路层 也是同理,被合并到:
网络接口层
。
TCP/IP模型的工作过程#
- 通常我们平时接触的网络应用都被应用层所承担。在需要数据传输时,应用层的将数据在传输层(端口)加上
TCP
或者UDP
数据头,进行包装; - 包装后的数据进入网络层中,网络层根据IP协议,加上IP数据头再次对数据进行包装;
- 包装后的数据被投入到链路层中,加上包含MAC地址的以太网数据头,最后正式进入以太网;
- 当目标收到这些数据后,再通过逆向操作一步步还原成应用层的数据。
IP协议 (Internet Protocol 互联网协议)#
IP协议 是 TCP/IP协议簇 的核心,处于网络层,用于将传输层的数据包装(加上IP数据头),方便其在链路层中处理,最后再投入以太网中。
IP协议方便多个单独的网络连接成一个互联网,提高的网络的可扩展性,减少了顶层网络和底层网络之前的耦合。
IP地址#
IP地址由32位二进制数据组成,分为主机标识 和 网络标识 同时提供了一套子网掩码,对应位置为“1”的时候是网络标识,“0”为主机标识
举个例子啊:
一个IP地址: 192.103.0.1 (11000000.01100111.00000000.00000001)
子网掩码:255.255.255.0(11111111.11111111.11111111.00000000)
根据
1 对应网络标识
0 对应主机标识
则 11000000.01100111.00000000(192.103.0) 为网络标识
00000001(1) 是主机标识
以上通常简化为 192.103.0.1/24 (前24位是网络标识)
ARP协议 (Address Resolution Protocl 地址解析协议)#
ARP协议是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议(根据IP地址来获取MAC物理地址)。
我们知道,在实际通信中,要给另一个主机通信,必须知道对方主机的MAC地址,但是在现有的TCP/IP协议
中,网络层和传送层通常只关心目标的主机的IP地址, 因此在链路层的数据中,数据实际上只有目标的IP地址没有MAC地址,而ARP协议
的作用就是在数据发送帧前根据这个IP地址来获取对应的MAC地址,以完成数据传输。
值得一提的是,ARP协议
获取到的MAC地址,并不一定是目标的IP的真实地址,因为两个主机并不一定在同一个局域网内,所以通常解析出来的是一台可以通往局域网外的路由器的MAC地址(此后发送主机发往目的主机的所有帧,都将发往该路由器)。这种通过情况通常也被称为 委托ARP或ARP代理(ARP Proxy)。
ARP协议常用于IPv4中,在IPv6中邻居发现协议(NDP)用于代替地址解析协议(ARP)。
ICMP协议 (Internet Control Message Protocol 互联网控制消息协议)#
ICMP协议通常用于返回的错误信息或是分析路由,可以看作错误检查和回报机制。方便我们检查网络状况和连线准确性。
通常不由网络程序直接使用,除了
ping
和traceroute
。
TCP协议 (Transmission Control Protocol 传输控制协议)#
TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP/IP协议的核心之一,在传输层提供服务。
特别: 满启动、拥塞控制、快速重传、可恢复。
运作方式
seq:顺序码
ack: 响应码
创建连接:三次握手
- 客户端–发送带有SYN标志的数据包–一次握手–服务端
- 服务端–发送带有SYN/ACK标志的数据包–二次握手–客户端
- 客户端–发送带有带有ACK标志的数据包–三次握手–服务端
发送数据:ACK ack=1+22 的原因,是因为服务端需要根据这个知道客户端收到的数据大小
关闭连接:四次挥手
- 客户端-发送一个FIN,用来关闭客户端到服务器的数据传送
- 服务器-收到这个FIN,它发回一个ACK,确认序号为收到的序号加1 。和SYN一样,一个FIN将占用一个序号
- 服务器-关闭与客户端的连接,发送一个FIN给客户端
- 客户端-发回ACK报文确认,并将确认序号设置为收到序号加1
UDP协议 (User Datagram Protocol 目标数据包报协议)#
TCP/IP中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。
特点:实效性好,工作效果高,不可恢复,不可靠性
Header构成:
校验和:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。
FTP协议 (File Transfer Protocol 文件传输协议)#
应用层协议,共分为两个部分:
- 服务端:用于储存文件
- 客户端:用于访问FTP服务器上面的文件
FTP的传输效率不错,通常用于大文件的传输。
DNS (Domain Name System 域名系统协议)#
应用层协议,是互联网的一种服务,作为将域名和IP地址相互映射的一个分布式数据库系统。
比如将访问 www.google.com 的时候,会先通过DNS服务器,将这个域名解析获取到对应的IP地址,然后通过IP地址来访问。
其实PC在命令行中可以直接通过 dig
工具来获取域名对应的IP,而dig
就会展示一次DNS解析域名的流程。
在命令行中输入:dig xxxx.com
就可以看到流程了,如果只希望知道结果,不想看流程,可以输入:dig +short xxxx.com
。
网络传输#
在计算机网络中,一份数据是如何在网络上传输的呢?比如平时发送的一张图片一个文本,是如何传输出去的呢?
网络传输场景#
在以太网中,比较常见的一个情况是:
PC —双绞线—> 交换机 —> 光纤 —> 交换机 —双绞线—> PC
PS.
网线并非直接连接PC的,而知连接 网卡 的。
每一块 网卡 都有设备商设定的唯一标识符,这个标识符就是 MAC地址(物理地址) 格式如:00-01-6C-06-A6-29
MAC 地址是可以被修改的
假如有一辆汽车,从成都寄到新加坡,如果这个流程发生在网络传输上,是怎么实现的
- 第一步:获取目标地址
路由和寻址
- 第二步:找到一条可以走到目标地址的路
数据链路
- 第三步:东西太大了,只能分拆成一个一个零件运过去
分片
- 第四步:为了防止零件丢失,需要给每个零件标上编号
序列号
- 第五步:将零件放到一个包装箱里面方便打包运输
封装
- 第六步:小心处理运输途中的堵车等事故
拥塞控制
- 第七步:检查包装箱里面的零件是否正常或者是否有丢失
错误检测和校正
- 第八步:补发有问题的零件
数据重发
- 第九步:拆开包装,重新组合零件
拆包和重组
然后,我们就在新加坡收到一辆汽车了。
为了这个运输过程能过正常运行,人们制定了一套规范来,控制整个流程,比如如何获取地址,如何拆分零件,如何包装和组合等等。
而这个规范,就是 网络协议
寻址和传输#
在数据传输中:
同网络下的简单传输: PC —> 交换机 —> PC
PC的数据被包装后,通常包含各个协议相关的数据头,其中包含了 源IP地址 | 源MAC地址 和 目标IP地址。此时的目标MAC地址时不知道的。
接着网关会向交换机发送一个 ARP Request
ARP Request的格式如下:
源 | |
---|---|
IP地址 | XXX.XXX.X.X |
MAC地址 | XX-XX-XX-XX-XX-XX |
目标 | |
IP地址 | XXX.XXX.X.X |
MAC地址 | ? |
交换机本身有一个MAC地址表。当收到 ARP Request 后就会先更新这个MAC地址。
同时开始在连接入这个交换机的PC中发送这个 ARP Request 。当有个PC发现这个 ARP Request 的目标与自己是符合的时候,变会将自己的MAC地址填入这个 ARP Request 中,然后送回交换机。
交换机发现新的MAC地址继续更新MAC地址表。
目标MAC地址和IP地址都知道了,就可以直接将数据顺利的从PC传输到目标PC
在复杂的网络环境中(真实网络)
PC —> 交换机 —> 路由1 —> 路由2 —> … —> 路由n-1 —> 路由n —> 交换机 —> PC
此时的传输则是一步一步传输的,每一个PC/路由 —> PC/路由 都进行了一次简单传输中类似的步骤。
有些不一样的是,路由本身有一份路由表,路由表则会记录下一个传输对象(非自连就传给目标路由,直连就传给目标交换机)
在数据发送中,通常数据都是体积很大的,所以需要分片发送,然后最后在目标PC中重组。
常用端口#
常见保留端口:
端口 | 名次 | 作用 |
---|---|---|
21 | FTP | 文件传输 |
22 | SSH | 命令行远程登录 |
25 | SMTP | 邮件发送服务 |
80 | HTTP | WEB服务 |
110 | POP3 | 邮件接收服务 |
139 | SMB | SAMBA共享 |
143 | IMAP | 邮件接收服务 |
443 | HTTPS | 加密网站服务 |
3306 | MySQL | 数据库服务 |
3389 | RDP | 远程桌面服务 |
6379 | Redis | 缓存服务器 |
8080 | Proxy | 代理服务器 |
HTTP/HTTPS#
HTTP#
Http协议是建立在TCP协议基础之上的,当客户端需要从服务器获取数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接(无状态连接 即 每次都是一个新连接,数据完了后就释放相关内容,不保留状态)。
HTTPS#
HTTPS是基于SSL层的HTTP,为HTTP的安全版。
与HTTP的不同点:
- HTTPS需要到CA申请认证证书,通常均为收费证书。
- HTTPS是SSL加密传输,非HTTP那种明文传输。
- 使用的端口号也不同,HTTPS是443端口,HTTP是80端口。
HTTPS的安全#
SSL:Secure Sockets Layer (安全套接层)
TLS:Transport Layer Security (传输层安全)
SSL和TLS在传输层之上对网络连接加密从而提供网络安全
在HTTPS中,在HTTP封装后,会在 SSL&TLS 中间层加密,之后才会进入TCP层。
HTTP结构 | HTTPS结构 |
---|---|
HTTP | HTTP |
TCP | SSL&TLS |
IP | TCP |
IP |
而SSL则混合使用了 非对称加密 和 对称加密 技术对内容进行了加密。
公钥/私钥#
属于非对称加密中的术语。
在非对称加密中,使用公钥对明文加密,然后使用私钥对其解密,常见算法有RSA。
对称加密: (使用同一个秘钥的对称加密)
Comments