上一篇分享了Linux的学习经验,今天就来分享下有关网络的一些基础知识,网络对于从事IT行业的人来说,都应该有所了解的,小到自己家中的网络及其相关设备,从网线到交换机到路由器甚至更专业的防火墙以及负载均衡。掌握基本的知识原理,有助于排查自己项目中的网络问题。
目前,我认为作为非网络专业人士,了解网络基础知识,并能解决自己开发或者运维工作中遇到的简单网络问题还是需要的,其余的就可以交给专业网络工程师处理。因为毕竟人的精力有限,事事精通是很难的。
有很多人推荐去读《TCP/IP详解》,其实每个人应该按照自己所从事的专业来选择去读,像我并不是网络专业,看了一点就已经有点打瞌睡了,不是不想读,实在是厚厚一本知识点不少啊。而且因为没有太多的实践,理论知识会很快遗忘。所以我基本都是用到才去查看,感觉这样还能记得牢一点。
网络协议
(图源自网络)
这里分享常见的网络协议:
HTTP(超文本传输协议):用于在Web浏览器和Web服务器之间传输数据,是Web应用程序的基础协议。
HTTPS(安全超文本传输协议):是HTTP协议的安全版本,通过SSL/TLS协议对通信数据进行加密和认证。
TCP(Transmission Control Protocol):面向连接的传输层协议,在 web 中用于 HTTP 和 WebSocket 的传输。
UDP(User Datagram Protocol):无连接的传输层协议,在 web 中用于 DNS 解析。
FTP(文件传输协议):用于在计算机之间传输文件,支持匿名访问和身份验证。
SMTP(简单邮件传输协议):用于在邮件客户端和邮件服务器之间传输电子邮件。
POP3(邮局协议版本3):用于从邮件服务器上下载邮件,支持邮件的离线阅读。
IMAP(互联网邮件访问协议):用于在邮件客户端和邮件服务器之间传输电子邮件,并支持邮件的在线阅读和管理。
DNS(域名系统):用于将域名转换成IP地址,以便计算机能够互相通信。
ICMP(Internet控制消息协议):用于在网络中传输控制信息和错误消息,如ping命令就是基于ICMP协议。
WebSocket:一种用于 web 的网络通信协议,能够实现 web 应用的实时通信。常用于即时通讯等需要实时交互的 web 应用。
SSH(安全外壳协议):用于在网络中安全地传输数据,支持加密和身份验证。
网络模型
1. OSI七层模型:是ISO制定的网络互连模型,由物理层、数据链路层、网络层、传输层、会话层、表示层、应用层7个层次组成。
- 物理层:定义传输介质和信号的电气接口特性。
- 数据链路层:定义在直接相连网络设备上传输的数据帧格式和验证机制。
- 网络层:定义数据在可扩展子网上传输的路径选择、逻辑地址和路由策略。
- 传输层:定义网络端对端的数据传输服务,包含可靠交付和错误恢复机制。
- 会话层:利用传输层服务实现会话连接,管理会话初始、终止及维持。
- 表示层:提供数据在网络上传输的编码解码方式,包含数据压缩、加密解密等机制。
- 应用层:提供网络应用服务,包含文件传输、电子邮件、数据库访问及远程登录等网络应用。
2. TCP/IP模型:由物理层、数据链路层、网络互连层、传输层、应用层5个层次组成。是实际应用中最为广泛的网络模型。
- 物理层和数据链路层:与OSI模型对应层次的功能相同。
- 网络互连层: IP协议,负责网间的数据传输。相当于OSI模型的网络层、传输层和部分会话层。
- 传输层:TCP和UDP协议,提供端对端的传输服务。
- 应用层:各种应用层协议,如HTTP、FTP、SMTP等对应于OSI模型的表示层和应用层。
3.五层模型:五层模型是一种简化版的网络模型,由物理层、数据链路层、网络层、传输层和应用层组成。相比 OSI 七层模型,五层网络模型将上层概括为一个应用层,简化了模型的层次。相比 TCP/IP 五层模型,区分的更加清晰,应用层和传输层的对应更加准确。
常用的网络检测命令
1. ping:检测网络主机是否可达,以及网络延迟。
代码语言:javascript复制 ping www.baidu.com
2. traceroute:检测数据包从源到目的地的路径和路径上的每一跳网关的IP地址。
代码语言:javascript复制 traceroute www.baidu.com
3. netstat:显示网络连接,路由表和网卡信息。
代码语言:javascript复制 # 显示所有有效TCP连接
netstat -at
# 显示所有TCP和UDP端口
netstat -au
# 显示路由表
netstat -r
4. ip:显示和操作路由,设备,策略路由和隧道。
代码语言:javascript复制 # 显示接口信息
ip addr
# 显示路由表
ip route
5. nmap: 用于端口扫描和安全审计。
代码语言:javascript复制 扫描主机网络是否存活及开放了哪些端口
nmap www.baidu.com
# 扫描局域网内所有主机开放的端口
nmap -sP 192.168.1.0/24
6. tcpdump:用于网络数据包的捕获和分析。
代码语言:javascript复制 # 抓取所有网卡数据包
tcpdump -i any
# 只抓取8080端口的数据包
tcpdump port 8080
7. lsof:列出打开的文件,其中也包括网络文件,用于确定进程打开的端口与连接。
代码语言:javascript复制 # 列出所有打开的TCP连接
lsof -iTCP
设置静态IP
1. 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件
CentOS下,网络配置文件是ifcfg-eth0,修改内容如下:
代码语言:javascript复制 DEVICE=eth0
BOOTPROTO=static # 静态IP,默认是dhcp
IPADDR=192.168.1.10 # 静态IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 网关
DNS1=8.8.8.8 # DNS服务器
ONBOOT=yes # 开机启动
然后重启网络服务:
代码语言:javascript复制 service network restart
2. 修改 /etc/network/interfaces 文件
Ubuntu下,网络配置文件是 /etc/network/interfaces,修改内容如下:
代码语言:javascript复制 auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameserver 8.8.8.8
然后重启网络服务:
代码语言:javascript复制 /etc/init.d/networking restart