reference: 阮一峰博客,谢希仁, 极客时间课程 等
1.基础知识
常用的TCPI/IP模型自下而上:网络层、链路层、网络层(ip层)、传输层(tcp/udp层)、应用层。
网络-层 | 协议 |
---|---|
应用层 | http、telnet、ftp |
传输层 | tcp、udp |
网络层 | ip、arp、icmp |
链路层 | ethernet |
物理层 |
-
链路层
协议:以太网协议
传输单位:帧,head + data
head中包含MAC地址
子网内,通过广播实现数据传送: 接收方会比较自己的MAC地址与接收方MAC地址,若不同,丢弃,若相同则接收。 -
网络层
-
协议:IP协议、ARP协议
ip地址,前部分代表网络,后部分代表主机。
子网掩码 与 ip地址 做 与运算 => 子网络 -
ip数据包:head + data
head中包含IP地址 -
ARP协议
发送网络数据,必须要知道对方的MAC地址和IP地址。接收方IP地址已知,如何获取MAC地址?- 若两台主机不在同一子网,发送方发送给网关;
- 若在同一子网,使用 ARP协议来获取接收方MAC地址。
流程:ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。
有了MAC地址和IP地址,可以建立主机到主机间的通信了。
-
-
传输层
建立端口到端口间的通信。端口:0~65525, 其中 0 ~ 1023被系统占用,用户选用 1024 ~ 65535间端口。
套接字(Socket) = ip地址 + 端口- 协议: UDP、TCP
-
应用层
- 协议:http,telnet
- 协议:http,telnet
2. trouble-shooting常用命令、工具
-
ping
用来测试两台主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。(reference: 谢希仁)
ICMP报文是装在IP数据报中,作为其中的数据部分。
关注:packet loss
丢包率 -
traceroute
同样也使用了ICMP协议,详细过程参见 谢希仁。
如果ping成功,但质量不好,可用traceroute追踪路由进一步查看。
本地不通,可使用该命令探测出是哪个路由出问题了。如果网络很卡,该命令可判断哪里是瓶颈。 -
nslookup
两种常用用法:- 解析域名对应的ip
nslookup <domain_name>
- 查看dns
nslookup
server
configration file location:
/etc/resolv.conf
- 解析域名对应的ip
-
telnet
检查port
用户用TELNET就可在其所在地通过TCP连接注册(即登录)到远地的另一台主机上(使用主机名或IP地址)。TELNET能将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,TELNET又称为终端仿真协议 。(reference: 谢希仁)
排查场景:网络没问题,但无法访问服务。检查port是否畅通,畅通长这样:
-
tcpdump
端口畅通(服务可达),依然有问题,继续抓包。
referece: tcpdump usagetcpdump -i any -n host <ip_address>
[and port 8080 -w /tmp/tcpdump.pcap]todo: heartbeat 为什么没捕获到,研究下系统中heartbeat是如何工作的。
-
netstat
-
ss(与netstat类似,暂忽略)
-
curl
-
route -n
查看网关 -
lsof
ip
ip rule
ip route
iptables
> iptables -vnL #default -t filter