基于ICMP的协议开发的
ip首部
ip首部
ip首部
ip首部
ip首部
类型type | 代码code | 校验和 |
标识符 | 序列号 |
可选数据
– 类型: 即ICMP的类型,其中ping的请求类型为0,应答为8.
– 代码: 进一步划分icmp的类型,用来查找产生错误的原因。
– 校验和: 用于检查错误的数据。
– 标识符: 通过标识符来确认是谁发送的控制协议,可以是进程id。
– 序列号: 唯一确定的一个报文,前面ping执行后显示的icmp_seq就是这个值。
当我们发起ping命令,ping程序实际上会组装成如图的一个ip报文,报文的目的地址为ping的目标地址
,源地址就是发送ping命令时的主机地址,同时按照icmp报文格式天上数据,在可选数据上可以填上发送时的时间戳。
ip报文通过arp协议,源地址和目的地址被翻译成mac地址,经过数据链路层后,报文被传输出去,当报文到达目的地址之后,目的地址所在的主机也按照icmp协议进行应答,之所以叫做协议,是因为双方都会遵守这个报文格式,并且也会按照格式进行发送-应答。
应答数据到达源地址之后,ping命令可以通过再次解析icmp报文,对比序列号,计算时间戳等来完成每个发送-应答的显示,最终显示的格式就像前面的例子中展示的一样。
Link encap:Ethernet HWaddr 02:54:ad:ea:60:2einet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::54:adff:feea:602e/64 Scope:Link
这里显示的是网卡的ipv4和ipv6地址,其中ipv4还显示了该网络的子网掩码以及广播地址。
通常来说,这种被称为广播(broadcast)的技术,是用udp来实现的。
netstat -alepn 查看当前所有连接详情
tcp 0 0 127.0.0.1:2379 127.0.0.1:52464 ESTABLISHED 0 27710 3496/etcd
代表的是 本地127.0.0.1的端口52464连上127.0.0.1的端口2379,状态为established,本地进程为etcd,进程为3496
只对套接字筛查
netstat Socket -x -alepn
unix 3 [ ] STREAM CONNECTED 23209 1400/dockerd /var/run/docker.sock
lsof /var/run/docker.sock
查看到底是谁打开了这个文件,比如用来查看端口占用
tcpdump -i eth0tcpdump src host hostnametcpdump 'tcp and port 80 and src host 192.168.1.25'tcpdump 'tcp and port 80 and tcp[13:1]&2 != 0'tcpdump在开启抓包的时候,会自动创建一个类型为AF_PACKET的网络套接口,并向系统内核注册。当网卡接收到一个网络报文之后,它会遍历系统中所有已经被注册的网络协议,包括其中已经注册了得AF_PACKET的网络协议。系统内核接下来就会将网卡收到的报文发送给该协议的回调函数进行一次处理,回调函数可以把接受到的报文复制一份,假装是自己接收到的报文,然后交给tcpdump程序,进行各种条件的过滤和判断,再对报文进行解析处理。
– [S]:SYN,表示开始连接
– [.]:没有标记,一般是确认
– [P]: PSH,表示数据推送
– [F]:表示推送结束
– [R]: 表示重新连接
我们可以看到最后的几个数据,他们代表的含义如下:
– seq: 包序号,就是tcp的确认分组
– cksum: 校验码
– win: 滑动窗口大小
– length: 承载的数据(payload)长度length,如果没有数据则为0
tcpdump还可以对每一条tcp数据显示,对tcp报文排查很有帮助。