本章重点介绍了 TCP/IP协议族中的各种协议,比如ARP协议,ICMP协议, DNS协议,同时展示了使用tcpdump 进行通信过程中的抓包方法,同时还介绍了arphost 命令的使用方法,这里使用知识点的方式来记录这一章节的内容

  1. TCP/IP 协议族体系结构和主要协议,分别介绍了应用层,传输层,网络层还有数据链路层 Pasted image 20241201215306.png

  2. 数据链路层: 实现网卡接口的网络驱动程序,让数据在物理媒介上传输,同时隐藏底层物理网络的电气特性,重要协议比如ARP协议和RARP协议,作用都是实现 IP协议和物理地址(MAC地址)之间的转换 , 这里可以粗略的把数据链路层的作用概括为把 IP地址转换为物理地址

  3. 网络层: 作用是完成数据包的选路和转发(其实分为控制平面和数据平面,依赖于控制平面的算法来实现选路和负载均衡等功能) , 最核心的协议就是IP协议,同时典型的协议还有ICMP协议, ICMP 协议的格式如下,注意ICMP协议需要IP协议的支持,也就是需要利用IP协议进行包装,ICMP协议的格式如下: Pasted image 20241201215934.png 其中类型表示报文的作用(反映差错还是重定向) , 代码表示细分条件

  4. 传输层: 为主机之间提供端到端的通信,典型协议比如TCP协议和UDP协议,各个层级之间的关系如下: Pasted image 20241201220144.png传输层的协议说明:

    1. TCP协议: 提供可靠传输,面向连接的基于流的服务,TCP的读写缓冲区都存在于内核空间中从而使得读写更加快捷,同时内核中页存储者许多TCP的其他的状态比如连接状态信息等,并且会保存发送的数据(滑动窗口)
    2. UDP协议: 提供无连接的,不可靠的,基于数据报的服务,可以理解为只是单独发送一次,UDP在内核中的缓冲区在发送数据之后就会把数据丢弃,不会保存数据
  5. 应用层: 利用传输层协议提供的服务,处理应用程序的逻辑,应用层协议如下(可以通过查看/etc/services文件查看知名的应用层协议):

    1. ping程序,底层使用 ICMP协议
    2. telnet协议: 远程登录协议
    3. ssh协议
    4. DNS协议,域名解析协议
  6. 以太网帧的封装过程: Pasted image 20241201233603.png TCP 报文段的封装过程: Pasted image 20241201233639.png 发送TCP报文的过程如下:

    1. 首先把数据从用户空间复制到内核空间的TCP发送缓冲区中
    2. 之后把缓冲区中的数据和TCP头部信息封装成IP数据报中的数据
    3. 利用IP报文头部信息和报文信息封装以太网帧,利用物理媒介传递数据报 以太网帧的格式如下: Pasted image 20241201233941.png
  7. 分用: 表示底层的协议封装的数据报中需要包含使用的上层协议,比如以太网中需要包含上一层使用的协议(ARP还是IP协议),根据协议来确定需要报数据交给内核中的哪一个模块

  8. ARP协议 , 作用: 把IP地址转换为物理地址,ARP报文结构如下: Pasted image 20241201234444.png ARP协议的工作过程:

    1. 首先利用自己的以太网地址(MAC地址)和IP地址来构建数据报报
    2. 之后广播数据报(把目的端以太网地址使用ff:ff:ff:ff:ff:ff) 即可
    3. 目的主机接收到信息之后改变操作并且把自己的IP地址填充到数据报中发送回去
  9. ARP高速缓存,存储着最近经常访问的主机的IP地址到物理地址的映射关系,可以使用如下命令查看ARP 缓存和删除缓存

arp -a # 查看高速缓存
arp -d IP # 删除对应的高速缓存
arp -s IP MAC # 添加对应的缓存项
  1. 可以使用tcpdump命令进行通信过程中的抓包,参考: 利用tcpdump抓包 ,这里记录tcpdump的常用形式:
# tcpdump 命令的基本格式如下:
tcpdump options proto dir type
# options 选项,比如 -i interface
# proto 协议 比如 ip,ip6,tcp,udp,icmp等
# dir 数据流向 dst/src
# type 类型过滤器 net host 等

# 下面是对于 proto , dir , type 等类型的过滤器的说明
# dir -> 根据数据流向过滤
# type -> 根据种类过滤 比如 host(主机) port(端口) net(网段)
tcpdump src net 192.168.10.0/24
tcpdump src port 80 or 8880
tcpdump src portrange 80-8880
# 根据协议 proto 进行过滤
tcpdump icmp # 查看 icmp报文
tcpdump 'ip proto tcp'
tcpdump 'ip6 proto tcp' # 表示 ip6 中的 tcp
# 重要的选项
tcpdump -i interface 指定网卡
# 另外 tcpdump 中还包含条件组合的功能,此时如果出现特殊符号比如 () , 需要使用 () 保卫
tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'
# tcpdump 实战使用
tcpdump -i eth0 -ent '(dst 192.168.0.2 and src 192.168.0.10) or (dst 192.168.1.2 and src 192.168.1.3)'
# 利用 tcpdump 观察 DNS 通信过程,其中 -s 指定包的大小 , port domain 表示只是抓取使用域名服务的包
sudo tcpdump -i wlp0s20f3 -nt -s 500 port domain 

  1. DNS协议的工作原理: DNS的作用: 域名解析协议,DNS报文如下,具体的内容可以参考书籍 P13-14: Pasted image 20241203163408.png
  2. 由于传输层,网络层数据链路层协议都是在 kernel中实现的,所以需要提供一组系统调用来供用于使用,socket 就是这样一组系统调用
  3. host 用于利用DNS请求进行域名的查询,比如 host -t A www.baidu.com其中,-t 表示查询的记录类型