网络基础知识

网络基础知识 知识量:6 - 28 - 111

2.5 IP与以太网的包收发操作><

包的基本知识- 2.5.1 -

TCP模块在执行连接、收发、断开等各阶段操作时,需要将数据封装成包以便发送给通信对象。包是由头部和数据两部分构成的,头部包含目的地址等控制信息,可以理解为快递包裹的面单;头部后面就是委托方要发送给对方的数据,相当于快递包裹里的货物。

在发送方,网络设备会负责创建包,创建包的过程就是生成含有正确控制信息的头部,然后再附加上要发送的数据。这个过程是由TCP模块完成的,但TCP模块还需要指定通信对象的IP地址。收到委托后,IP模块会将包的内容当作一整块数据,在前面加上包含控制信息的头部,这个头部包含了MAC地址和IP地址。

IP头部中包含很多控制信息,其中最重要的是包将发送到哪里的IP地址,这是由应用程序提供的;IP头部中还需要填写发送方的IP地址,需要IP模块利用路由表进行判断,即判断发送使用的网卡。

包收发操作- 2.5.2 -

包的收发操作主要包括以下几个步骤:

  1. TCP模块委托IP模块将数据封装成包,并通过网络发送给通信对象。IP模块会添加相应的头部信息,包括目的地址等控制信息,以及数据部分。

  2. IP模块会根据TCP模块提供的通信对象的IP地址,以及路由表中的信息,确定包的传输方向,并将包发送到最近的转发设备,即路由器。

  3. 路由器会根据头部中的信息判断接下来应该发往哪个方向,并进行转发。这个过程可能需要经过多个转发设备的接力,最终到达接收方的网络设备。

  4. 接收方收到包后,会根据头部信息进行相应的处理,然后将数据部分发送给TCP模块。TCP模块根据通信对象的IP地址和端口号,将数据正确地发送给通信对象。

IP头部- 2.5.3 -

IP头部是IP协议数据包的重要组成部分,它包含了发送方和接收方的IP地址,以及其他控制信息。IP头部固定20字节长,不论IP数据包的大小如何。IP头部包含以下几个主要字段:

  • 版本(Version):这个字段用来表示IP协议的版本号。对于IPv4,版本号是4;对于IPv6,版本号是6。

  • 头部长度(Header Length):这个字段用来表示IP头部的长度。它是以32位(4字节)为单位的长度,最小长度为5(即20字节,因为45=20),最大长度为15(即60字节,因为415=60)。

  • 总长度(Total Length):这个字段用来表示整个IP数据包的长度,包括头部和数据部分。总长度字段以字节为单位,范围从最小20字节到最大65535字节(即2的16次方-1)。

  • 标识(Identification):这个字段用来标识数据包中的分段。当数据包被分段时,这个字段帮助接收方重新组合原始数据包。

  • 标志(Flags):这个字段用来控制分段的行为。标志字段中的三个位表示是否允许分段、是否禁止分段和是否最后一个分段。

  • 段偏移量(Fragment Offset):这个字段用来表示分段在原始数据包中的位置。它帮助接收方将分段正确地重新组合成原始数据包。

  • 生存时间(TTL):这个字段用来表示数据包在网络中可以经过的最大跳数(路由器数量)。每经过一个路由器,TTL值减1,当TTL值为0时,数据包被丢弃。这个机制用来防止数据包在网络中无限循环。

  • 协议(Protocol):这个字段用来表示IP数据包中封装的数据所使用的协议类型。例如,TCP、UDP等。

  • 头部校验和(Header checksum):这个字段用来检查IP头部的错误。它通过计算IP头部的各个字节之和,然后取反得到校验和值。接收方通过同样的方式计算校验和,如果两个校验和值不相等,说明IP头部在传输过程中发生了错误。

  • 源地址(Source Address)和目的地址(Destination Address):这两个字段分别用来表示发送方和接收方的IP地址。这两个地址都是32位或128位,取决于使用的是IPv4还是IPv6。

MAC头部- 2.5.4 -

MAC头部,即媒体访问控制头部,包含以下字段:

  • 帧控制位:用于标识当前帧的类型(例如,数据帧、确认帧等),这有助于接收端正确解析和处理接收到的帧。

  • 序列编号:在无线网络中,由于传输过程中可能会发生丢包现象,因此每个帧都需要有一个序列编号,以便接收端能够按正确的顺序重新组合收到的帧。

  • 目的和源PAN地址:这些地址用于识别通信的设备,类似于IP地址在网络中的作用。

  • 目的和源本机地址:这些地址通常指的是MAC地址,用于标识网络中的设备。在以太网中,MAC地址用于识别网络接口卡(NIC)。

  • 安全字段:该字段用于启用或禁用安全功能,例如加密或校验和,以确保数据在传输过程中的完整性。

  • 帧悬停位:该位用于指示当前帧之后是否还有未传完的帧。这有助于连续发送拆分后的数据,以提高传输效率。

  • 要求回复ACK位:该位用于要求接收方在接收到数据后发送确认回复(ACK),以确保数据已被成功接收。

  • PANID压缩字段:该字段用于表示PANID的模式,即网络标识符,用于区分不同的网络或子网。

  • 目的地址和源地址模式:这些字段指示目的地址和源地址在MAC帧头部的长度,因为目的地址和源地址在MAC帧头处是可变的。

查询目标路由器的MAC地址- 2.5.5 -

可以通过ARP查询目标路由器的MAC地址,可以按照以下步骤进行:

  1. 在计算机上打开命令提示符或终端窗口。

  2. 输入“arp -a”命令,这将显示计算机上存储的所有ARP缓存条目,包括目标路由器的MAC地址。

  3. 在ARP缓存中查找目标路由器的MAC地址。通常,目标路由器的MAC地址将以类似“00-11-22-33-44-55”的形式显示。

注意:如果目标路由器的MAC地址不在ARP缓存中,可以尝试通过其他方法获取其MAC地址。例如,可以通过扫描网络或使用网络抓包工具来捕获数据包并查找目标路由器的MAC地址。

以太网的基本知识- 2.5.6 -

以太网是一种计算机局域网技术,基于IEEE 802.3标准,规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术,逐步取代了其他局域网技术如令牌环、FDDI和ARCNET。以太网采用多路访问技术,在同一时刻只能有一个站点发送数据,存在多个终端,即多路访问。以太网采用CSMA/CD(载波监听多路访问/冲突检测)技术来实现数据的发送和接收。以太网的数据传输速率快,从半双工到全双工,从10Mbps到10Gbps,支持多种传输介质,如光纤、双绞线等。以太网具有开放性和标准化的特点,可以方便地与其他网络进行连接和互连。

将IP包转换成电或光信号- 2.5.7 -

IP包需要被转换成电或光信号才能发送出去,这是因为IP包只是存放在内存中的一串数字信息,无法直接发送给对方。为了在网络上进行传输,需要将数字信息转换为电或光信号。这一过程由网卡完成,网卡会将IP包封装成以太网帧的形式,并添加以太网头部和帧校验序列。然后,网卡会将数据转换为电信号或光信号,以便在物理介质中传输。在发送数据时,还需要根据实际情况判断是否需要将数据分割成多个帧进行传输。

向集线器发送网络包- 2.5.8 -

集线器(Hub)是一种网络设备,用于将多个计算机或网络设备连接在一起。它可以将接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。集线器采用CSMA/CD介质访问控制机制,工作于OSI参考模型的物理层。它通常采用RJ45接口与各主机相连,可以连接多台电脑。集线器具有纯硬件网络底层设备的特点,基本上不具有类似于交换机的"智能记忆"能力和"学习"能力。它也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送。

向集线器发送网络包的过程如下:

  1. 首先,源设备将IP数据包发送给集线器。集线器是一种网络设备,用于连接多个计算机或网络设备,可以将数据包转发给目标设备。

  2. 集线器接收到数据包后,将其转发给目标设备。在转发过程中,集线器会根据目标设备的MAC地址进行地址解析,将数据包发送给正确的目标设备。

  3. 目标设备接收到数据包后,会进行后续操作,例如执行相应的应用程序或返回响应包等。

  4. 如果需要将响应包返回给源设备,目标设备会将响应包发送回集线器。集线器会根据源设备的MAC地址进行地址解析,将响应包发送回正确的源设备。

接收返回包- 2.5.9 -

当一个网络帧到达网卡时,网卡会将其放入收包队列中。然后通过硬中断,运行中断处理程序,为网络帧分配内核数据结构(sk_buff),并将其拷贝到缓冲区中。接下来,通过软中断,告诉内核收到了新的网络帧。内核协议栈从缓冲区中取出网络帧,通过网络协议栈,从下到上的逐层处理这个网络帧。

在链路层检查报文的合法性,找出上层的协议类型,然后去掉帧头、帧尾后交给网络层。网络层取出IP头,判断网络包的下一步走向,是交给上一层还是转发出去。如果这个包是发送给本机,则取出上层协议的类型,去掉ip头,然后交给传输层处理。传输层取出TCP头或UDP头中的端口号后,根据源IP地址、源端口号、目的IP地址、目的端口号,找出所对应的socket,并把数据拷贝到socket所对应的接收缓存中。最后应用程序就可以通过socket接口,读到新接收到的数据了。

将响应包从IP传递给TCP- 2.5.10 -

服务器的响应包从IP传递给TCP的过程如下:

  1. 当服务器接收到一个请求包时,它会处理该请求并生成一个响应包。该响应包被封装在一个IP数据报中,并发送到客户端。

  2. 当IP数据报到达客户端时,它会被传递给TCP协议层进行处理。TCP协议层会检查IP数据报中的目标端口号,以确定该数据报应该传递给哪个应用程序或进程。

  3. 如果IP数据报中的目标端口号与某个应用程序或进程绑定,则TCP协议层会将该数据报传递给相应的应用程序或进程。这个过程被称为"拆包"或"解封装"。

  4. 应用程序或进程接收到响应包后,会进行进一步的处理,例如解析数据并执行相应的操作。