目录
一、什么是网络通信协议?
网络通信协议是计算机网络中用于规定通信数据格式、传输方式、传输速率、错误检测和纠错等方面的一套标准化的规范。为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。
简单来说,网络通信协议就是计算机网络中节点之间进行通讯时遵守的一组规则。举个例子,两个物流业务点在地域角度看是两个独立的整体,那么要何如对接才能把货物从一点输出到另一点呢?首先他们需要商定一个暗号,这个暗号的作用是可以证明货物是输出地发出来的,当前的站点可以进行接收,这个暗号可以任何形式:工牌、工服、送货单等,接下来还需要考虑用什么交通工具,可以是电车,也可以无人机等。
其中工服、工牌、送货单、电动车属于一个一个规则和规范,而他们结合起来就形成了配送的协议,而站点按照这个协议最终就可以完成货物的运输和配送。
例如,HTTP协议就是一种网络通信协议。当我们在浏览器中访问一个网站时,浏览器会向服务器发送HTTP请求,请求包含了请求的URL、请求方法等信息。而服务器会根据这些请求参数做出响应,响应包含了响应状态码、响应数据等信息。这一过程中,浏览器和服务器遵循的就是HTTP协议的规范。
二、什么是OSI七层模型、TCP/IP四层模型?
因为互联网的快速发展,每个具有独立计算服务体系的信息技术公司都会建立自己的计算机通信规则,而这种情况会导致异构计算机之间无法通信,极大的阻碍了网络通信的发展,为了解决这个问题,国际标准化组织(ISO)制定了OSI模型。
OSI模型 分为7层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
分层的好处在于清晰和功能独立性,但分层过多会使层次变的更加复杂,虽然不需要实现本层的功能,但是也需要构造本层的上下文,空耗系统资源,继而简化成TCP/IP四层模型
TCP/IP模型分为4层:数据链路层、网络层、传输层、应用层
OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 | 解释 |
应用层 | 应用层 | FTP、HTTP、HTTPS、IMAP、NTP、POP3、SMTP、SNMP、SSH、TELNET、DNS、DHCP、TFTP、AFP、SSDP ...... | 为应用程序提供服务 |
表示层 | 数据格式转化、数据加密 | ||
会话层 | 建立、管理和维护会话 | ||
传输层 | 传输层 | TCP、UDPTCP、UDP、SCTP ..... | 建立、管理和维护端到端的连接 |
网络层 | 网络层 | IP、ICMP、IGMP、ARP、RARP、OSPF、BGP、IPSec、PPTP、L2TP ....... | IP选址及路由选址 |
数据链路层 | 数据链路层 | ARP、RARP、PPP、SLIP、IEEE 802.3、Ethernet、Token Ring、FDDI、ATM、Frame Relay、ISDN ....... | 提供介质访问和链路管理 |
物理层 | 物理层 |
三、不同层级常见的通信协议
-
数据链路层(Ethernet)
建立设备间通讯的方式?
以太网协议规定接入的网络设备必须具备网卡,而网卡的标识就是mac唯一地址,两台计算机的通讯方式是MAC地址广播,类比为通信的时候先问所有人”故宫”是谁家的地址,局域网内地址是”故宫”的主机则会回复自己的mac地址,从而建立通讯
以太网协议(Ethernet): 用于实现链路层的数据传输和地址封装(MAC)
协议格式:
Destination/目的字段:标识目的通信方的MAC地址
Source/源字段:标识发送端的MAC地址
Type/类型值:标志上层协议
Type值的作用:便于网络层知道用哪种协议拆包
-
网络层(IP)
1、建立主机间通讯的方式?
由于上层是通过MAC地址广播域建立通讯,只适用于局域网内主机较少时可用;为了区分相同局域网内的直播域,不是局域内的请求需要进行转发广播,于是产生了一套IP地址,通过IPV4、IPV6定位目标所在的网络域。
IP地址之间建立通讯存在两个条件:
①目的IP在局域网内:可以直接建立通讯
②目的IP不在局域网内:需要路由去找到对应的网络路径并进行转发
2、为什么不使用mac地址在上一层完成这个需求呢?
因为mac地址只跟厂商有关,不能标识局域网内网规则,类比虽然你的身份证是黑龙江人但是人却在北京飘,身份证类比mac地址,身份证是无法证明本人到底在哪也就无法做下一步骤了
1、IP网际协议(Internet Protocol):用于网络层把上层数据包封装成 IP 数据报后进行传输,如果 IP 数据报太大,还要对数据报进行分片后再传输,到了目的地址处再进行组装还原,以适应不同物理网络对一次所能传输数据大小的要求。
协议格式:
Version/版本:用来指定IP协议的版本,IPV4的版本号就是4,IPV6的版本号就是6
Header Length/首部长度:表明IP首部的大小,单位是5个字节
Total Length/总长度: 表示IP首部和后面携带的数据部分一共有多少个字节
Time To Live/生存时间:数据报到达目的地的最大报文跳数,一般为64,每次经过一个路由,TTL–,如果TTL == 0时还没到达目的地,那么这个报文就会被丢弃
Protocol/协议:表示IP的上层是什么协议,我们熟知的TCP、UDP、ICMP等都是在IP上层的
Header Checksum/首部校验和:使用CRC进行校验,鉴别IP首部是否收到损坏,如果损坏直接丢弃
Source Address/源IP地址:表示发送端的IP
Destination Address/目标IP地址:表示接收端的IP
Protocol的作用:便于传输层知道用哪种协议拆包
传输层(TCP、UDP)
1、建立进程间通讯的方式?
TCP/IP的三次握手机制:
①客户端发送一个SYN段至服务器端, 该SYN段包含请求端的初始序号
②服务器端对客户端的SYN段进行确认,同时,为了减少网络流量,在该ACK确认报文段中,附带服务端的初始序号
③客户端对服务器的SYN段进行确认。
传输控制协议(Transmission Control Protocol):用于传输层实现主机间进程到进程的通信,其次还需要保证可靠性
协议格式:
Source Port/源端口:表示发送端源端口
Destination Port/目的端:表示目的端口
Sequence Number/序列号:在TCP的三次握手、四次挥手和数据传输过程都有用到,用来标记字节流的序号
Acknowledgment Number/确认序列号:接收方在收到数据后需要给发送方一个确认,告诉接收方收到了某一个报文
Data Offset/数据偏移:表示TCP首部长度
Destination Port的作用:便于应用层判断是那个进程的数据包,并使用特定的协议解包
应用层(HTTP、HTTPS、FTP、SMTP)
1、HTTPS协议与HTTP协议的区别
①HTTPS协议使用了SSL/TLS协议来对通信的内容进行加密和解密,从而确保通信的安全。②在HTTP协议基础上,HTTPS协议还增加了一些安全机制和措施,如数字证书、协商加密算法、会话密钥等。
③在建立HTTPS链接时,服务器会向客户端提供一个数字证书,使用数字证书可以验证服务器的身份,避免中间人攻击。客户端可以使用数字证书中的公钥对数据进行加密后发送给服务器,服务器接收到数据后,再使用自己的私钥对数据进行解密。
超文本传输协议(Hyper Text Transfer Protocol):用于应用层简单的请求-响应,实现某一类具体应用的协议,它通常运行在TCP/IP簇之上
协议格式:
请求参数解析:
HTTP协议请求示例:
POST / HTTP/1.1
User-Agent: curl/7.29.0
Host: 172.16.0.11:8989
Accept: */*
Content-Type: application/json
Content-Length: 28
{ "name": "Luck", "age": 22}
响应参数解析:
HTTP协议响应示例:
HTTP/1.0 200 OK
Server: BaseHTTP/0.6 Python/3.7.16
Date: Wed, 31 May 2023 03:12:23 GMT
Content-Type: text/plain
Hello, Luck, your age is 22.
四、好用、爱用的工具分享
Wireshark:开源网络协议分析软件
Wireshark可以捕获局域网或互联网数据包,并对数据包进行详细的分析,包括解析各种网络协议,如TCP、UDP、HTTP、FTP等,以及应用层协议,如SMTP、POP3、DNS等。该软件还提供了强大的过滤器,可根据各种条件来过滤和搜索数据包,使用户可以更加精确地查找需要的信息,也可以用来进行网络故障排除、网络安全分析、网络协议分析、网络性能优化等多种应用,是一款十分实用的网络工具。使用该软件,用户可以实时地捕获和分析网络数据,找出潜在的问题所在。
官网链接:Wireshark · Go Deep
数据抓包命令:
# tcpdump抓包生成pcap流量包
tcpdump -i ens0 -s0 -w test.pcap
# 抓eth1的包
tcpdump -i eth1 -w /tmp/xxx.cap
# 抓 127.0.0.1的包
tcpdump -i eth1 host 127.0.0.1 -w /tmp/xxx.cap
# 抓127.0.0.1的80端口的包
tcpdump -i eth1 host 127.0.0.1 and port 80 -w /tmp/xxx.cap
# 抓127.0.0.1的icmp的包
tcpdump -i eth1 host 127.0.0.1 and icmp -w /tmp/xxx.cap
# 抓127.0.0.1的80端口和110和25以外的其他端口的包
tcpdump -i eth1 host 127.0.0.1 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
# 抓vlan 1的包
tcpdump -i eth1 port 80 and vlan 1 -w /tmp/xxx.cap
# 后台抓包
nohup tcpdump -i eth1 port 110 -w /tmp/xxx.cap &
# 设置抓包端口的协议tcp、udp
Tcpdump -i any tcp port xx -w /tmp/11.cap