Linux网络进阶 - TCP/IP协议及OSI七层模型详细步骤

Linux网络进阶 - TCP/IP协议及OSI七层模型详细步骤

发布时间:2024-10-12 01:26:59

为您提供更加详细的信息,深入探讨linux网络中的tcp/ip协议和osi七层模型,以及更高级的故障排查和优化技术。我们将逐层深入,并提供更多实际示例和高级概念。

  1. 物理层和数据链路层(网络接口层)

1.1 物理层详解

物理层涉及比特流的传输,主要关注硬件特性。

  • 网络接口卡(nic)配置:
bash

# 查看详细的nic信息
ethtool -i eth0

# 调整nic参数(如速度和双工模式)
ethtool -s eth0 speed 1000 duplex full autoneg off

  • 查看和修改网卡队列大小:
bash

# 查看当前队列大小
ethtool -g eth0

# 修改队列大小
ethtool -g eth0 rx 4096 tx 4096

  • 检查网线和物理连接:
bash

# 查看网线是否连接
cat /sys/class/net/eth0/carrier

# 查看网络接口的链路状态
ethtool eth0 | grep "link detected"

1.2 数据链路层深入

  • arp (address resolution protocol) 详解:
bash

# 查看arp缓存
ip neigh show

# 清除arp缓存
ip neigh flush all

# 添加静态arp条目
ip neigh add 192.168.1.100 lladdr 00:11:22:33:44:55 dev eth0

  • vlan (virtual lan) 配置:
bash

# 创建vlan接口
ip link add link eth0 name eth0.100 type vlan id 100

# 配置vlan接口ip
ip addr add 192.168.100.1/24 dev eth0.100

# 启用vlan接口
ip link set eth0.100 up

  • 网桥(bridge)配置:
bash

# 创建网桥
ip link add name br0 type bridge

# 将接口添加到网桥
ip link set eth0 master br0
ip link set eth1 master br0

# 配置网桥ip
ip addr add 192.168.1.1/24 dev br0

# 启用网桥
ip link set br0 up

  1. 网络层(网际层)深入

2.1 ip协议详解

  • ip地址配置和管理:
bash

# 添加ip地址
ip addr add 192.168.1.10/24 dev eth0

# 删除ip地址
ip addr del 192.168.1.10/24 dev eth0

# 配置临时ip别名
ip addr add 192.168.1.11/24 dev eth0 label eth0:0

  • 高级路由配置:
bash

# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.1

# 配置策略路由
ip rule add from 192.168.1.0/24 table 10
ip route add default via 192.168.1.1 table 10

# 配置源地址选择
ip route add 10.0.0.0/24 via 192.168.1.1 src 192.168.1.10

2.2 icmp协议深入

  • icmp类型和代码:
    • type 0: echo reply
    • type 3: destination unreachable
    • type 8: echo request
    • type 11: time exceeded
  • 使用icmp进行故障排查:
bash

# 发送自定义icmp消息
ping -c 4 -m do -s 1472 192.168.1.1 # 测试mtu

# 跟踪路由并显示as信息
traceroute -a 8.8.8.8

2.3 ipv6配置和故障排查

bash

# 启用ipv6
sysctl -w net.ipv6.conf.all.disable_ipv6=0

# 配置ipv6地址
ip -6 addr add 2001:db8::1/64 dev eth0

# ipv6路由配置
ip -6 route add 2001:db8:1::/64 via fe80::1 dev eth0

# ipv6连通性测试
ping6 2001:db8::1

  1. 传输层深入

3.1 tcp协议高级特性

  • tcp拥塞控制算法:
bash

# 查看当前拥塞控制算法
sysctl net.ipv4.tcp_congestion_control

# 修改拥塞控制算法(如使用bbr)
sysctl -w net.ipv4.tcp_congestion_control=bbr

  • tcp缓冲区调优:
bash

# 增加tcp缓冲区大小
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

# 启用tcp自动缓冲区调整
sysctl -w net.ipv4.tcp_moderate_rcvbuf=1

  • tcp快速打开(tfo):
bash

# 启用tcp快速打开
sysctl -w net.ipv4.tcp_fastopen=3

3.2 udp协议优化

  • 增加udp缓冲区大小:
bash

sysctl -w net.core.rmem_max=26214400
sysctl -w net.core.wmem_max=26214400

3.3 sctp (stream control transmission protocol) 配置

bash

# 加载sctp模块
modprobe sctp

# 使用sctp工具测试
sctp_test

  1. 应用层深入

4.1 http/2和quic协议

  • 配置nginx支持http/2:
nginx

server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# ...
}

  • 使用curl测试http/2:
bash
curl -v --http2 https://example.com

4.2 dns高级配置

  • 配置dns over tls: 编辑 /etc/systemd/resolved.conf
 

[resolve]
dns=1.1.1.1
dnsovertls=yes

  • 使用dnssec-trigger进行dnssec验证:
bash
dnssec-trigger-control status

4.3 应用层协议分析

使用wireshark进行深度数据包检查:

bash

# 捕获https流量
tshark -i eth0 -f "tcp port 443" -w capture.pcap

# 在wireshark中分析tls握手过程

  1. 高级网络诊断和性能优化

5.1 系统调优

  • 调整网络相关的内核参数:
bash

# 增加本地端口范围
sysctl -w net.ipv4.ip_local_port_range="1024 65535"

# 启用tcp时间戳
sysctl -w net.ipv4.tcp_timestamps=1

# 优化网络内存分配
sysctl -w net.core.netdev_max_backlog=250000
sysctl -w net.core.optmem_max=4194304

5.2 网络性能分析工具

  • 使用 perf 进行网络栈性能分析:
bash

perf record -g -a sleep 60
perf report

  • 使用 bcc (bpf compiler collection) 工具进行高级网络追踪:
bash

# 跟踪tcp连接延迟
tcpconnect

# 分析tcp重传
tcpretrans

5.3 网络流量控制和整形

  • 使用 tc (traffic control) 进行带宽管理:
bash

# 限制eth0的下行带宽为1mbps
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

# 使用htb进行复杂的流量整形
tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 90mbit

  1. 网络安全深入

6.1 ipsec v*n配置

使用strongswan配置站点到站点v*n:

 

# /etc/ipsec.conf
conn net-to-net
left=192.168.1.1
leftsubnet=10.1.0.0/16
right=192.168.2.1
rightsubnet=10.2.0.0/16
ike=aes256-sha2_256-modp2048!
esp=aes256-sha2_256!
keyingtries=0
ikelifetime=1h
lifetime=8h
dpddelay=30
dpdtimeout=120
dpdaction=restart
auto=start

6.2 入侵检测系统 (ids) 配置

使用suricata配置网络ids:

yaml

# /etc/suricata/suricata.yaml
vars:
address-groups:
home_net: "[192.168.0.0/16,10.0.0.0/8]"
external_net: "!$home_net"

# 启用威胁情报feed
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules
- emerging-threats.rules

6.3 安全审计

使用auditd配置系统审计:

 

# /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-a exit,always -f arch=b64 -s sethostname -s setdomainname -k system-locale

  1. 容器网络

7.1 docker网络配置

  • 创建自定义docker网络:
bash
docker network create --driver bridge --subnet 172.18.0.0/16 my_net
  • 配置docker容器使用主机网络:
bash
docker run --network host my_image

7.2 kubernetes网络策略

配置kubernetes网络策略以控制pod间通信:

yaml

apiversion: networking.k8s.io/v1
kind: networkpolicy
metadata:
name: allow-frontend-to-backend
spec:
podselector:
matchlabels:
app: backend
ingress:
- from:
- podselector:
matchlabels:
app: frontend
ports:
- protocol: tcp
port: 8080

  1. 网络监控和日志分析

8.1 使用prometheus和grafana进行网络监控

  • 配置prometheus来抓取节点导出器指标:
yaml

scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']

  • 在grafana中创建网络性能仪表板,包括:
    • 网络吞吐量
    • tcp连接状态
    • 网络错误率
    • 网络延迟

8.2 使用elk栈进行日志分析

  • 配置filebeat收集系统和应用日志:
yaml

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/nginx/access.log

  • 在logstash中处理和解析日志:
 

filter {
if [fileset][module] == "nginx" {
grok {
match => { "message" => "%{combinedapachelog}" }
}
}
}

  • 在kibana中创建可视化和仪表板,展示:
    • http响应码分布
    • 访问ip地址地理位置分布
    • 每秒请求数 (rps)
    • 平均响应时间

这个深入的概述涵盖了linux网络的许多高级方面,从底层的协议配置到高层的应用和监控。

感谢提供:05互联