1 网络协议的分层模型
1.1 OSI的七层模型
- OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
- 五层协议只是OSI和TCP/IP的综合,实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。
1.2 TCP/IP 协议的分层
- TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议
1.3 TCP/IP协议层报文间封装与拆封
- 数据的发送过程,可以概括为TCP/IP 的各层协议对数据进行封装的过程
- 1 当用户发送数据时,将数据向下交给传输层,这是处于应用层的操作,
- 2 应用层可以通过
调用传输层的接口来编写特定的应用程序。而 TCP/IP 协议一般也会包含一些简单的应用 程序如Telnet远程登录、FTP文件传输、 SMTP邮件传输协议等。 - 3 传输层会在数据前面加上传输层首部(
此处以TCP协议为例,传输层首部为TCP首部,也可以是UDP首部) - 4 然后向下交给网络层。同样地,网络层会在数据前面加上网络层首部(
IP首部), - 5 然后将数据向下交给链路层,链路层会对数据进行最后一次封装,即在数据前面加上(
以太网首部) - 6 然后将数据交给网卡。
- 7 最后,网卡将数据转换成物理链路上的电平信号,数据就这样被发送到了网络中。
2 物理层(以太网首部)
2.1 以太网MAC帧格式(MAC层(物理层))
- 任何上层协议ARP、UDP都是在数据段,加了相应头部,比如:
- IP协议在
MAC帧格式数据段加了IP首部 - UDP协议在
MAC帧格式数据段加了UDP首部 - ARP协议只是在
MAC帧格式数据段加了ARP数据
3 网络层(IP首部20字节/ARP协议簇28字节)
3.1 IP协议(IP首部20字节)
前20个字节和紧跟其后的可选字段是IP数据报的首部,前20个字节是固定的,后面可选字段是可有 可无的,首部的每一行以32位(4 个字节)为单位。- IP数据报
- IP首部举例
3.2 ARP协议(ARP协议簇28字节)
- ARP 协议的基本功能是通过目的设备的 IP 地址,查询目的设备的 MAC 地址,以保证通信的顺利进行。
- MAC 地址在网络中表示网卡的 ID,
每个网卡都需要并有且仅有一个 MAC 地址。在获取到目的 MAC 地址 之后,将目的 MAC 地址更新至 ARP 缓存表中,称为 ARP 映射,下次通信时,可以直接从 ARP 缓存表中 获取,而不用重新通过 ARP 获取 MAC 地址。但一般 ARP 缓存表会有过期时间,过期后需要重新通过 ARP 协议进行获取。
3.2.1 ARP查询目的设备MAC地址步骤
- 1 ARP(Address Resolution Protocol),即地址解析协议,是
根据IP地址(逻辑地址)获取MAC地址的 一种 TCP/IP 协议。在以太网通信中,数据是以“帧”的格式进行传输的,帧格式里面包含目的主机的 MAC 地址。源主机的应用程序知道目的主机的IP地址,却不知道目的主机的MAC地址。 - 2 目的主机的MAC地址直接被网卡接收和解析,
当解析到目的MAC地址非本地MAC 地址时,则直接丢弃该包数据,因此在通信前需要先获得目的的 MAC 地址,而 ARP 协议正是实现了此功能。 - 3 ARP 协议分为 ARP 请求和 ARP 应答,源主机发起查询目的 MAC 地址的报文称为
ARP请求,目的主机响应源主机并发送包含本地 MAC 地址的报文称为ARP应答
3.2.2 ARP协议簇28字节
- ARP(Address Resolution Protocol),即地址解析协议
- ARP 协议属于 TCP/IP 协议簇的一种,从图可以看出,ARP 协议位于以太网 MAC
帧格式的数据段,ARP 数据包格式如下图所示
- 28 字节的 ARP 数据位于以太网帧格式的数据段。由于以太网数据段最少为 46 个字节,
而
ARP数据包总长度为28个字节,因此在ARP数据段后面需要填充18个字节的数据,以满足以太网传输格式的要求。这个填充的过程称为 Padding(填充),填充的数据可以为任意值,但一般为 0。
4 传输层(UDP首部/TCP首部)
- 首先回答为什么还需要 UDP 协议?
事实上数据是可以直接封装在IP协议里而不使用 TCP、UDP或者其它上层协议的。然而在网络传输中同一 IP 服务器需要提供各种不同的服务,各种不同的服务类型是使用 端口号来区分的,例如用于浏览网页服务的 80 端口,用于 FTP(文件传输协议)服务的 21 端口等。TCP 和 UDP 都使用两个字节的端口号,理论上可以表示的范围为 0~65535,足够满足各种不同的服务类型。 - 然后是为什么不选择传输更可靠的 TCP 协议,而是 UDP 协议呢?TCP 协议与 UDP 协议作为传输层最常用的两种传输协议,这两种协议都是使用 IP 作为网络层协议进行传输。下面是 TCP 协议与 UDP 协议的
区别:
4.1 UDP首部(User Datagram Protocol),即用户数据报协议
- UDP 首部共 8 个字节
4.2 TCP首部(Transmission Control Protocol,传输控制协议)
- 更深入解释
4.2.1 wireshark抓包
- 此处有一个要注意的地方:当某个主机开启一个 TCP 会话时,他的初始序列号(ISN)
是随机的,可能是 0~4294967295 之间的任意值,然而,像 wireshark这种抓包工具,通常
显示的都是相对序列号与确认号,而不是实际序列号与确认号,相对序列号与确认号是和
TCP 会话的初始序列号相关联的。因为比起真实序列号与确认号,wireshark工具跟踪更小
的相对序列号与确认号会相对容易一些。
- 也可以自己选择看真实的序列号
4.2.2 三次握手
TCP传输连接--建立连接阶段(TCP三次握手)
https://blog.csdn.net/weixin_43690348/article/details/112692825