网络协议分类:
OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
应用层 ( Application ) | 应用层 | HTTP, TFTP, FTP, NFS, WAIS, SMTP |
表示层 ( Presentation ) | Telnet, Rlogin, SNMP, Gopher | |
会话层 ( Session ) | SMTP, DNS | |
传输层 ( Transport ) | 传输层 | TCP, UDP |
网络层 ( Network ) | 网络层 | IP, ICMP, ARP, RARP, AKP, UUCP |
数据链路层 ( Data Link ) | 数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层 ( Physical ) | IEEE 802.1A, IEEE 802.2 到 IEEE 802.11 |
-
TCP协议 属于传输层( Transmission Control Protocol 传输控制协议),是因特网中的传输层协议。使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。三次握手,四次挥手。
eg:
// tcpserver.js 首先通过node打开此js文件,在通过 node 打开 tcptest.js文件
const net = require('net');
// 创建一个TCP协议
var server = net.createServer(function() {
console.log('some on connect');
});
// 设置监听端口
server.listen('3400');
// 监听链接事件
server.on('connection',function(socket){
socket.write('游戏登录成功');
// 监听客户端发来的数据
socket.on('data',function(data) {
console.log(data);
socket.write('给你爆一套神装');
});
});
// tcptest.js
var net = require('net');
var client = net.Socket();
// 连接tcp服务器
client.connect(3400,'192.168.3.49',function() {
setTimeout(() => {
client.write('我杀了一个boss');
}, 2000);
});
client.on('data', function(data) {
console.log(data.toString());
})
2. http:属于应用层 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
HTTP请求由状态行、请求头、请求正文三部分组成:
状态行:包括请求方式Method、资源路径URL、协议版本Version;
请求头:包括一些访问的域名、用户代理、Cookie等信息;
请求正文:就是HTTP请求的数据。
eg:
// httptest.js 需要在cmd 中通过 node httptest.js 命令执行,然后打开 http:localhost:4000 来查看结果
const http = require('http');
const fs = require('fs');
http.createServer(function(req, res) {
fs.readFile('./httpstest.pptx', function(err,data) {
// 当下一行代码被注释掉的时候,下载的文件就不能还原原来的文件格式,影响阅读
// res.writeHead(200,{'Content-type': 'application/vnd.openxmlformats-officedocument.presentationml.presentation'});
res.end(data);
});
}).listen(4000);
3. https: 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护;通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:(自己理解:网站安全)
eg:
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容;
- 验证身份:通过证书认证客户端访问的是自己的服务器;
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改;
// httpstest.js 首先通过注释的代码生成私钥,公钥,证书,然后通过 node 运行此js文件,浏览器打开 https://localhost:3500/,结果如下图:
/**
* * 生成私钥 /path/to/private.pem 为路径
* ! openssl genrsa 1024 > /path/to/private.pem
* * 根据私钥生成公钥
* ! openssl req -new -key /path/to/private.pem -out csr.pem
* * 根据私钥和公钥生成证书
* ! openssl x509 -req -days 365 -in csr.pem -signkey private.pem -out file.crt
*/
const https = require('https');
const fs = require('fs');
// 读取刚刚生成的证书
const option = {
key: fs.readFileSync('./private.pem'),
cert: fs.readFileSync('./file.crt')
};
// 开启服务,传入证书
https.createServer(option,function(req,res) {
res.writeHead(200);
res.end('hello https');
}).listen(3500);
4.FTP: 属于应用层 文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。(自己理解:上传文件和下载文件的时候会用到)
5. SMTP: 属于会话层 SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
6.DNS:属于会话层(Domain Name System,域名系统),简单的说:就是把我们输入的网站域名翻译成IP地址的系统。说白了就是把我们输入的 www.baidu.com翻译成220.181.111.188让机器理解。
7.TFTP: 属于应用层(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。
8.NFS: 属于应用层(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
9.WAIS: 属于应用层(Wide Area Information System),即广域信息查询系统。WAIS 是一个Internet系统,在这个系统中,需要在多个服务器上创建专用主题数据库,该系统可以通过服务器目录对各个服务器进行跟踪,并且允许用户通过WAIS客户端程序对信息进行查找。WAIS用户可以获得一系列的分布式数据库,当用户输入一个对某一个数据库进行查询的信息时,客户端就会访问所有与该数据库相关的服务器。访问的结果提供给用户的是满足要求的所有文本的描述,此时用户就可以根据这些信息得到整个文本文件了。
10.Telnet: 属于表示层 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
11.Rlogin: 属于表示层 远程登录(rlogin)是一个 UNIX 命令,它允许授权用户进入网络中的其它 UNIX 机器并且就像用户在现场操作一样。一旦进入主机,用户可以操作主机允许的任何事情,比如:读文件、编辑文件或删除文件等。Rlogin:远程登录命令 rlogin:Remote Login in Unix systems
12.SNMP: 属于表示层(SNMP,Simple Network Management Protocol)简单网络管理协议,由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering Task Force)定义的internet协议簇的一部分。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。SNMP已经出到第四个版本的协议,其功能较以前已经大大地加强和改进了。
13.Gopher: 属于表示层 是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它
14.UDP: 属于传输层(User Datagram Protocol)用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
15.IP: 属于网络层( Internet Protocol Address)互联网协议地址又译为网际协议地址,是分配给用户上网使用的网际协议(英语:Internet Protocol, IP)的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类,但是也有其他不常用的小分类。
16.ICMP: 属于网络层(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
17.ARP: 属于网络层(Address Resolution Protocol)地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
18.RARP: 属于网络层(Reverse Address Resolution Protocol) 反向地址转换协议,允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。 RARP 可以使用于以太网、光纤分布式数据接口及令牌环 LAN
19.AKP: 属于网络层(
20.UUCP: 属于网络层(Unix-to-Unix Copy(UNIX至UNIX的拷贝),Unix系统的一项功能,允许计算机之间以存储-转发方式交换e-mail和消息。在Internet兴起之前是Unix系统之间连网的主要方式。
21.FDDI: 属于数据链路层(Fiber Distributed Data Interface)光纤分布式数据接口,是美国国家标准学会制定的在光缆网络上发送数字和音频信号的一组协议。虽然 FDDI 逻辑上是基于 token ring-based 的基点架构,但是却不是以 IEEE 802.5 协定为基础所定义的,取而代之的是衍生自 IEEE 802.4 token bus 协定条仪。
22.Ethernet: 属于数据链路层(Ethernet)以太网,是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。
23.Arpanet: 属于数据链路层(Advanced Research Projects Agency Network)
24.PDN: 属于数据链路层( Public Data Network)公用数据网,一种由电信运营商组建的广域网,提供接入广域网的服务与技术,为用户提供高质量数据传输服务。
25.SLIP: 属于数据链路层(Serial Line Internet Protocol)串行线路网际协议,该协议是Windows远程访问的一种旧工业标准,主要在Unix远程访问服务器中使用,现今仍然用于连接某些ISP。因为SLIP协议是面向低速串行线路的,可以用于专用线路,也可以用于拨号线路,Modem的传输速率在1200bps到19200bps。
26.PPP: 属于数据链路层(Point to Point Protocol)点对点协议,为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP-IP 协议集中它是一种用来同步调制连接的数据链路层协议(OSI 模式中的第二层),替代了原来非标准的第二层协议,即 SLIP。除了 IP 以外 PPP 还可以携带其它协议,包括 DECnet 和 Novell 的 Internet 网包交换(IPX)。
27.IEEE: 属于数据链路层 IEEE 802又称为LMSC(LAN /MAN Standards Committee, 局域网/城域网标准委员会),致力于研究局域网和城域网的物理层和MAC层中定义的服务和协议,对应OSI网络参考模型的最低两层(即物理层和数据链路层)。