0%

计算机网络之网络数据帧

概述

网络数据帧,这里以典型的 http1.1 协议来分析,包含 tcp 帧格式,ip 帧格式, mac 帧格式

66MLjJ.png

一个典型的请求

以下为 http client 发起请求的过程

1. tcp建立连接

TCP client 触发三次同步握手,协商各自的sequence number,即各自数据第一个字节对应的序列号,这样就可以对发送的每一个字节数据进行编号,方便对方确认;同时还协商 window size,告知对方自己最大的接收缓冲区大小,可以用来进行流量控制,免得对方发送太快而本地没有足够缓冲区而丢弃。

2. tcp 发送请求

http 发送请求数据,实际上调用 tcp 的 write 函数,将数据写入到 connected_socket, TCP_send(1.1.1.1,80,data)

3. IP send

TCP 层完成 TCP 头、TCP payload 所有字段的封装,称之为segment,调用IP接口函数:IP_send(1.1.1.1,segment )

4. Ethernet_send

IP层检查路由表,决定出口,决定下一跳,通过ARP查询下一跳的MAC,假定为MAC2;然后IP层判定包是否需要分片,如果分片,需要把TCP segment 做切割成小片处理,假定这里不需要分片,于是IP层完成了IP packet 的所有封装,调用 Ethernet_send ( MAC2, packet)。

5. 以太网最终发送

网络接口、网卡完成所有的封装,加上Ethernet header ,所有信息都知道了,source MAC,这个是自己的MAC,Destination MAC,这个是MAC2,Ether Protocol:0x0800,然后把计算的校验码CRC放入FCS,形成了Ethernet Frame。

http 格式

tcp 数据报

在 tcp 层的帧首部,没有携带 IP 地址 和 Mac 地址的信息,但是携带了源端口和目的端口。tcp 的所有的数据,都是存放在 IP 层的数据部分的。

66QM8S.jpg

IP 数据报

IP 层携带了源IP地址和目标IP地址,但是没有携带 mac 地址。IP 层的所有数据都是放在 Mac 层的数据部分。

66Qhxe.png

Mac 帧格式

Mac 层携带了目的mac地址和源mac地址。Mac 层的数据部分可以存放 IP 数据报。

66QXRS.png

字段 含义
目的地址 接收帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。作用是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同,就会进一步处理;如果不同,则直接丢弃。
源地址 发送帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。
类型 上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为 0x0800 时,表示将数据交付给 IP 协议。
数据 也称为效载荷,表示交付给上层的数据。以太网帧数据长度最小为 46 字节,最大为 1500 字节。如果不足 46 字节时,会填充到最小长度。最大值也叫最大传输单元(MTU)。 在 Linux 中,使用 ifconfig 命令可以查看该值,通常为 1500。

参考

浏览器敲下一个回车,发送了什么

以太网数据帧格式(结构)图解