网络基础—数据传输
OSI/ISO七层模型
概述
-
OSI是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,是一种法定标准
-
为开放式互连信息系统提供了一种功能结构的框架和参考。这里所说的开放系统,实质上指的是遵循OSI参考模型和相关协议能够实现互连的具有各种应用目的的计算机系统
-
OSI采用了分层的结构化技术,共分七层:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
谐音:物联(链)网淑(输)慧(会)试(示)用
OSI七层介绍
应用层
-
应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。
-
协议:文件传输服务(FTP)、远程登录服务(ssh)、web服务(http)等。
-
功能
- 用户接口
- 实现各种服务
表示层
-
表示层是对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。
-
协议:远程登录(Telnet)等
-
功能
- 数据格式处理
- 压缩和解压缩
- 数据的加密和解密
会话层
- 会话层是用户应用程序和网络之间的接口,主要任务是:组织和协调两个会话进程之间的通信,并对数据交换进行管理。当建立会话时,用户必须提供他们想要连接的远程地址
- 协议:SMTP,DNS等
- 功能
- 会话管理:建议,维持,终止会话,支持数据交换
- 流量控制:为避免数据发送过快以至接送方来不及接收,需控制发送方的发送速度
- 差错控制:通信两节点约定检错规则,如奇偶校验码,根据规则判断数据是否1出粗
- 寻址:使用远程地址建立连接
传输层
OSI上3层:应用层、表示层、会话层的主要任务是数据处理——资源子网
OSI下3层:网络层、数据链路层、物理层的主要任务是数据通讯——通讯子网
- 传输层是OSI模型的第4层,它是通信子网和资源子网的接口和桥梁,起到承上启下的作用。将会话层传来的数据分割成报文段(报文段为组成报文的每个分组,报文是网络信息传输的基本单位)
- 协议:TCP,UDP
- 功能:
- 多路复用和解复用
- 可靠传输&不可靠传输
- 流量控制
- 拥塞控制
网络层
-
数据链路层的数据在这一层被转换为数据包 (TCP/IP协议通信传输的数据单位),然后通过路由选择(路由器)、分段组合、顺序、进/出路由等控制,选择最适当的路径,将信息从一个网络设备传送到另一个网络设备
-
一般情况下,数据链路层是解决同一网络(局域网)内节点之间的通信,而网络层主要解决不同子网间的通信
-
协议:IP,路由选择协议
-
功能:
- 路由选择
- 拥塞控制
- 差错控制
- 网络互联
数据链路层
- 接收来自物理层的位流(比特流)形式的数据,通过差错控制等方法传到网络层;同样,也将来自上层的数据,封装成 帧(帧(frame)是数据链路层的传输单元。将上层传入的数据添加一个头部和尾部,组成了帧)转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
- 功能:
- 数据组帧
- 数据链路的建立,维护,拆除,指定拓扑结构并提供硬件寻址(MAC地址)
- 差错控制
- 流量控制
物理层
- 利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。尽可能屏蔽掉具体传输介质和物理设备的差异。
- 功能
- 定义物理设备标准
- 传输比特流
数据封装过程
分层 | 基本单位 | 封装过程 | 备注 |
---|---|---|---|
应用层 | 数据 | 侬好 | 方言 |
表示层 | 数据 | 你好 | 普通话 |
会话层 | 数据 | 你好 | |
传输层 | 报文段 | TCP头部+你好 | TCP头部:源&目标的端口号 |
网络层 | 数据包 | IP头部+TCP头部+你好 | IP头部:源&目标的IP地址 |
数据链路层 | 帧 | 帧头+IP头部+TCP头部+你好+帧尾 | 帧头:源和目标的MAC地址; 帧尾:校验字 |
物理层 | 比特流 | 比特流 |
TCP/IP协议模型
概述
-
TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成一种事实标准。
-
TCP/IP协议簇是一组不同层次上的多个协议的组合,该协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求
层 | 协议 | OSI七层模型 |
---|---|---|
应用层 | FTP+HTTP+DNS+SSH等 | 会话层+表示层+应用层 |
运输层 | TCP+UDP | 运输层 |
网络层 | ICMP+IP+IGMP | 网络层 |
链路层 | ARP+RARP | 物理层+数据链路层 |
TCP/IP协议介绍
链路层
- ARP:地址解析协议IP-MAC,以广播的形式通过IP地址获取MAC地址
- RARP:逆地址解析协议MAC-IP,以广播的形式通过MAC地址获取IP地址
网络层
- IP:一种网络层协议,提供的是一种不可靠的服务,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。同时被TCP和UDP使用
- ICMP:IP协议的附属协议。主要是用来提供有关通向目的地址的路径信息。ping和traceroute工具,它们都使用了ICMP协议。
- IGMP:是Internet组管理协议。它用来把一个UDP数据报多播到多个主机。该协议运行在主机和组播路由器之间。
传输层
-
TCP:传输控制协议。为两台主机提供高可靠性的数据通信。TCP通过三次握手建立连接,通讯完成时要断开连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用带重传的肯定确认技术来实现传输的可靠性。也就是TCP数据包中包括序号(seq)和确认(ack),所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
-
UDP:用户数据报协议。则为应用层提供一种非常简单的服务。它是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP通讯时不需要接收方确认,不保证该数据报能到达另一端,属于不可靠的传输,可能会出现丢包现象。
应用层
- 应用层上的各种协议负责其相应的服务,不详细介绍。
TCP/IP三次握手&四次挥手(断开 )
相关概念
-
序列号:Seq序列号,占32位,发送方发送数据时用该序列号标记发送数据
-
确认号:Ack确认序列号,占32位,有ACK标志位为1时,确认序列号才有效,Ack=Seq+1
-
标志位:
- ACK=1:确认序列号有效
- SYN=1:请求连接
- FIN=1:断开连接
-
网络连接状态:可使用netstat命名查看
字段 状态 CLOSED 初始(无连接)状态 LISTEN 监听状态,等待远程机器的连接请求 SYN_SEND 在TCP三次握手中,主动连接端发送了SYN包后,进入该状态,等待对方的ACK包 SYN_RECV 在TCP三次握手中,主动连接端收到ACK包后,进入该状态 ESTABLISHED 完成TCP三次握手,主动连接端进入该状态。此时,TCP三次握手已经建立,可以进行通信 FIN_WAIT_1 在TCP四次断开时,主动关闭端发送FIN包后,进入该状态 FIN_WAIT_2 在TCP四次断开时,主动关闭端收到ACK包后,进入该状态 TIME_WAIT 在TCP四次断开时,主动关闭端发送了ACK包之后,进入该状态 CLOSE_WAIT 在TCP四次断开时,被动关闭端收到FIN包后,进入该状态 LAST_ACK 在TCP四次断开时,被动关闭端发送FIN包后,进入该状态,等待对方的ACK包
三次握手
TCP三次握手的过程如下:
-
客户机A端发送SYN(请求连接)包和自己的序列号x给服务器B端;
-
服务器B端收到SYN包后,发送一个ack=x+1(确认序列号)ACK=1(确认序列号x有效)和SYN(请求连接)包和自己的序列号y给客户机A端;
-
客户机A端发送**ack=y+1(确认序列号)ACK=1(确认序列号有效)**给服务器B端,握手动作完成。
A&B是两个幼儿园小朋友,这天午休,除A&B外,其他小朋友都在休息
A小声说:B,你能听见我说话吗?我们来聊天吧
B听到A的话,小声回:我能听见你说话,A,你能听见我说话吗?
A听到B的话,回:我也能听见你说话
A&B开始吧啦吧啦。。。
四次挥手
TCP四次断开的过程如下:
-
客户机A端发送一个FIN包(断开连接)和自己的序列号u给服务器B端请求断开连接;
-
服务器B端收到FIN包后,发送一个ack=u+1(确认序列号)ACK=1(确认序列号x有效)和自己的序列号v客户机A端;
-
服务器B端发送了ACK包后,再发送一个**FIN包(断开请求)**给客户机A端确认断开;
-
客户机A端收到FIN包后,发送一个ACK包,当服务器B端收到ACK包后,四次断开动作完成,连接断开。
A&B打电话,A想说的话已经说完了。
A告诉B,我无话可说了
B听到A的话,B回复:知道了,我还有话要说,你等一下
B吧啦吧啦。。。
B想说的话也说完了,告诉A:我也无话可说了
A听到B的话,回复:知道了,那挂断吧
抓包工具
wireshark
安装wireshark
[root@server1 ~]# yum install -y wireshark*
[root@server1 ~]# wireshark
(wireshark:8636): Gtk-WARNING **: 12:37:31.225: cannot open display:
报错:(wireshark:8636): Gtk-WARNING **: 12:37:31.225: cannot open display:
原因:最小化安装,没有安装图形化界面
解决:
centos图形化安装 [root@server1 ~]# yum groups install -y 'GNOME 桌面' 设置图形化开机自启 [root@server1 ~]# systemctl set-default graphical.target 关机-->处理器-->虚拟化引擎-->勾选虚拟化Inter VT-x/EPT或AMD-V/RVT(V) 选择未列出(如果没有用户:设置一个普通用户-->注销)-->使用root登录即可 右键-->打开终端
[root@server1 ~]# wireshark
使用
-
选择网卡
-
查看数据
-
简单使用(Windows去ping我的虚拟主机)
C:\Users\高xx>ping 192.168.226.10
正在 Ping 192.168.226.10 具有 32 字节的数据:
来自 192.168.226.10 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.226.10 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.226.10 的回复: 字节=32 时间<1ms TTL=64
192.168.226.10 的 Ping 统计信息:
数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms
Control-C
^C
信息详解
TCP的三次握手
TCP的四次挥手
tcpdump
使用wireshark工具抓包需要图形化界面,生产环境下很难用其来抓包
生产环境下常用tcpdump工具抓包,但是tcpdump抓出来的包不好分析
所以,生产环境下常用tcpdump抓包,导成文件,放入wireshark中分析
查看arp缓存 (同一网段主机的MAC地址)
[root@server1 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.226.2 ether 00:50:56:e9:53:8e C ens33
192.168.226.1 ether 00:50:56:c0:00:08 C ens33
清空缓存
[root@server1 ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.226.2 ether 00:50:56:e9:53:8e C ens33
192.168.226.1 ether 00:50:56:c0:00:08 C ens33
[root@server1 ~]# arp -d 192.168.226.1
[root@server1 ~]# arp -d 192.168.226.2
[root@server1 ~]# arp -n
抓包并保存在tcpdump.txt文件中
[root@server1 ~]# tcpdump -i ens33 -nn host 192.168.226.10 -w tcpdump.txt
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C0 packets captured
4 packets received by filter
0 packets dropped by kernel
#参数说明:
-i :指定网络接口
-n :显示IP地址,不查主机名。当DNS不起作用时常用到这个参数
-nn:显示IP地址和端口
-w : 指定的文件用于保存
[root@server1 ~]# ls
anaconda-ks.cfg tcpdump.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
打开wireshark分析
- 其他用法(了解)
获取主机10.1.1.1接收或发出的ssh(22端口)包
[root@server1 ~]# tcpdump tcp port 22 and host 192.168.226.10
监听本机udp协议的123端口(ntp服务)
[root@server1 ~]# tcpdump udp port 123
查看server1(主机名)发送的所有数据
[root@server1 ~]# tcpdump -i ens33 src host server1
查看server1(主机名)接收的所有数据:
[root@server1 ~]# tcpdump -i ens33 dst host server1