一些基本概念
物理拓扑描述了物理设备的布线方式:总线拓扑,环状拓扑,星型拓扑。
逻辑拓扑描述了信息在网络中流动的方式。
一句话记忆:All People Seem To Need Data Processing.
PDU:Protocol Data Unit,协议数据单元为对等层次之间传递的数据单位;
第七层与最终用户最紧密,并与之直接交互同时也为应用程序进程提供网络服务;
第六层表示层为应用程序或是网络呈现数据;
第五层建立、管理和终止在应用程序之间的会话;及以上更高层 PDU 为消息 message;
第四层传输层处理终端系统和主机之间数据传输的协调;PDU 为数据段 segment;
第三层数据传输,选择传递数据的最佳路径;PDU 为数据包 packet;
第二层定义如何格式化数据以便进行传输以及如何控制对网络的访问;PDU 为数据帧 frame;
第一层为启动、维护以及关闭物理链路层定义了电器规范、机械规范;PDU 为 bit;
路由: 把一个数据包从一个设备发送到不同网络里的另一个设备上去。此工作由路由器完成,实现则依靠路由器中的路由表来完成。路由器只关心网络的状态并决定网络中的最佳路径。
IP 界定通信主机,源和目标,范围为互联网,即从谁到谁;MAC 地址以进行本地通信,范围为本地局域网,任何互联网通信都需要转成本地通信才能实现;Port 则界定通信的进程,范围是主机,即该进程使用哪个端口号。
TCP/IP 参考模型(Transmission Control Protocol / Internet Protocol)传输控制协议/因特网互联协议是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协议都被归类到 4 个抽象的"层"中。每一抽象层创建在低一层提供的服务上,并且为高一层提供服务。 完成一些特定的任务需要众多的协议协同工作,这些协议分布在参考模型的不同层中的,因此有时称它们为一个协议栈。可以看作一个多层组合,每层解决数据传输中的一组问题并且向使用这些低层服务的高层提供定义好的服务。高层逻辑上与用户更为接近,所处理数据更为抽象,它们依赖于低层将数据转换成最终能够进行实体控制的形式。 [1]
应用层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据的协议。 应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。
传输层(transport layer)的协议,能够解决诸如端到端可靠性(“数据是否已经到达目的地?”)和保证数据按照正确的顺序到达这样的问题。在TCP/IP协议组中,传输协议也包括所给数据应该送给哪个应用程序。
TCP/IP协议族中的网络互连层(internet layer)在OSI模型中叫做网络层(network layer),正如最初所定义的,网络层解决在一个单一网络上传输数据包的问题。
网络访问(链接)层实际上并不是因特网协议组中的一部分,但是它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。[2]
TCP 包头的相关知识:
三次握手,四次挥手放在抓包时学习。
tcpdump
-X:Hex output is useful when you want to see the content of the packets in question[3]
IP ,Internet Protocol
IP 是在 TCP/IP 协议族中网络层的主要协议,任务仅仅是根据源主机和目的主机的地址来传送数据。唯一标识 IP 网络中的每台设备及设备在网络中的位置。
A 类:1-126.X.Y.Z
网络 ID 位为高 8 为,主机 ID 位为 24
0xxxxxxx.X.Y.Z
00000000-0111111:0-127
B 类:128-192.X.Y.X
网络 ID 为高 16 位,主机 ID 位为 16
10xxxxxx.X.Y.Z
10000000.X.Y.Z-101111111.X.Y.Z:128-191
C 类:192-223.X.Y.Z
网络 ID 为高 24 位,主机 ID 位为 8
110xxxxx.X.Y.Z
11000000.X.Y.Z-11011111.X.Y.Z:192-223
D 类
多播地址
1110xxxx.X.Y.Z:224-239.X.Y.Z
E 类
11110xxx.
240-255
公共 IP 地址及私有 IP 地址:在百度直接搜索 IP 会显示公网 IP,在 Linux 终端下输入 ip addr show,会显示出私有ip。只有运营商的公网 IP 能上网,而私有 IP 用于局域网管理只有通过公网 IP 才能上网。
公共 IP 地址:
A:
1.0.0.0 - 9.255.255.255
11.0.0.0 - 126.255.255.255
B:
128.0.0.0 - 172.15.255.255
172.32.0.0 - 191.255.255.255
C:
192.0.0.0 - 192.167.255.255
192.169.0.0 - 223.255.255.255
私有 IP 地址:互联网中没有,在局域网中使用
A:
10.0.0.0 - 10.255.255.255
B:
172.16.0.0 - 172.31.255.255
C:
192.168.0.0 - 192.168.255.255
路由过程
任何跟网关的通信都是本地通信,本地通信都是基于 MAC 地址进行的。因此蓝色部分封装着主机自己的与网关网卡的 MAC 地址,接着路由器识别到目标 MAC 是自己的,就拆掉了 MAC 守护,再根据目标 IP 来进行判断。若目标 IP 是自己的地址则信息送达,若不是则查路由表(找到合适的吓一跳)进行转发。
整个过程中,IP 地址不会发生变动。而将新的 MAC 守护的目标 MAC 置为自己的某块与目标 IP 在一个网段中的网卡的 MAC 地址;对方目标路由的下一跳的 IP 所对的 MAC 作为目标 MAC。
发送给下一路由器,重复以上操作。
iproute package
不谈古老的 ifconfig 命令,说说取而代之的 iproute 包,其中两个常用命令 ip 与 ss。
rpm -qi iproute
# 查询其版本信息,应与内核版本相同 uname -r
rpm -ql iproute | fgrep "bin"
# 查询其安装生成了那些工具
ip 命令
显示或操作路由、设备的命令,输入 ip 后敲击两次 Tab 键即可补全其子命令。
SYNOPSIS:
ip [ OPTIONS ] OBJECT { COMMAND | help }
OPTIONS:
ip address
# 显示全部网络设备的 IP 地址;ip addr show (interface) 用以查询指定接口的 IP 地址
# 其子命令可以在唯一标识的情况下简写
ip link
# 用以显示链路层的信息,将抓取当前链路层可用设备的特征,可查看 MAC 地址
# ip -s link 即可查看网络接口的统计信息
ip route
# 路由表管理,第一项为默认路由
ss 命令
Socket Statistics,套接字统计,又一有效的 socket 统计工具。就在 netstat 的帮助手册上写着,请使用替代者 ss 吧。
SYNOPSIS:[3]
ss [options] [ FILTER ]
OOPTIONS:
When no option is used ss displays a list of open non-listening sockets that have established connection.
# 当不加参数时,ss 显示一份已建立的开放的非监听套接字列表
# 由 ss | wc -l 显示,我的电脑有将近 500 条记录
ss -lt
# -l 参数仅列出当前正在监听的 sockets
# -t 参数限定了只列出 TCP;-u 显示 UDP
ss --p
# 列出拥有 sockets 的进程或是 PID
不解析服务名称 -n
[root@centos7 ~]# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.6.132:42672 176.62.197.244:http
ESTAB 0 36 192.168.6.132:ssh 192.168.6.1:57271
[root@centos7 ~]# ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.6.132:42672 176.62.197.244:80
ESTAB 0 36 192.168.6.132:22 192.168.6.1:57271
[root@centos7 ~]#
-a:显示所有的链接状态
-m:每个 socket 的内存使用量
-s:概况查看
基于端口号的过滤器
less than (lt), greater than (gt), equal to (eq), not equal to (ne), less than or equal to (le), or greater than or equal to (ge) 参考[3]
[root@centos7 ~]# ss -nlt sport lt 100
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
# sport 表示源端口 dport 表示目标端口
网络配置文件
通过修改配置文件并重启网络服务,IP/NETMASK/GW/DNS 等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE,IFACE 即接口名称。路由的相关配置文件:/etc/sysconfig/network-scripts/route-IFACE。以上文件通过大量参数来定义接口的属性,因此可通过 vim 等文本编辑器直接修改,也可使用专用命令(CentOS 6:system-config-netwoek[setup],CentOS 7:nmtui)
ifcfg-IFACA 配置文件参数如下:
DEVICE:此配置文件对应的设备名称
ONBOOT:在系统引导过程中,是否激活此接口
UUID:此设备的唯一标识
IPV6INIT:是否初始化 IPV6
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有 dhcp,bootp,static,none
TYPE:接口类型,常见的有 Ethernet,Bridge
DNS1:第一 DNS 服务器指向
DNS2:备用 DNS 服务器指向
DOMAIN:DNS 搜索域
GATEWAY:默认网关
IPADDR:本机 IP 地址
NETMASK:子网掩码;CentOS 7 支持使用 prefix 以长度方式指明子网掩码
USERCTL:是否允许普通用户控制 此设备
PEERDNS:如果 BOOTPROTO 的值为“dhcp”,是否允许 dhcp server 分配的 dns 服务器指向覆盖本地手动指定的 dns 服务器指向;默认为允许
NM_CONTROLLED:是否使用 NetworkManager 服务来控制接口
HWADDR:设备的 MAC 地址
CentOS 7 重启网络服务
systemctl restart network.service
后续完成
nmcli、nmtui、tcpdump、ncat、nmap