0
点赞
收藏
分享

微信扫一扫

Android 埋点信息分析——内存篇

工程与房产肖律师 2024-08-07 阅读 18

目录

一.   了解网络

1.1   什么是网络

1.2   网络发展

1.3   网络分类

二.   协议

三.   网络模型

3.1   OSI七层模型

3.2   IP/TCP五层(或四层)模型

3.3   网络与OS之间的关系

3.4   再识协议

四.   MAC地址

五.   网络传输基本流程

5.1   报头

5.1.1   含义

报头的各段(Segments):

5.1.2   作用

5.2   网络传输流程

5.2.1   同网段传输

5.2.2   跨网段传输

六.   IP地址

七.   端口号

八.   socket编程准备

8.1   理解socket

8.2   认识TCP与UDP协议

8.3   网络字节序

8.4   socket常见接口

8.5   sockaddr结构


一.   了解网络

1.1   什么是网络

在计算机领域中,网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。或者更为详细的说,网络是指将多台计算机或者设备通过通信线路、传输线路和网络设备连接起来,形成一个资源互通和相互通信的整体。

1.2   网络发展

  • 独立阶段:各台主机之间相互独立

 

此时数据传输,是通过物理设备(如数据线、磁带、网盘)将设备连接在一起,从而实现数据传输。

  • 网络互联阶段:通过网络将设备连接在一起

此时数据传输,变成了通过网络,将资源在网络之间传递,实现数据传输。

1.3   网络分类

此处按照网络覆盖范围,大体可以将网络分为局域网(LAN)城域网(MAN)广域网(WAN)

二.   协议

协议是一种约定或者规定。用于指导多方在特定情况下的行为和相互之间的关系。

在网络中,为了确保数据传输的稳定性、高效性,实现互联互通,也定义了属于网络的协议-----网络协议。那为什么要存在网络协议呢?以及网络协议解决了什么问题?

我们可以看到,随着网络的发展,客观事实是主机之间距离越来越远了,这就产生了问题:

  • 如何使用数据的问题
  • 可靠性问题
  • 主机定位问题
  • 数据包局域网转发的问题

那我们就需要一种解决方法来解决这些问题。即我们的网络协议,也就是说,网络协议是一种解决方案

在实际生活中,网络协议是按层划分的。为什么呢?是因为这样层与层之间是松耦合的,方便维护与随时替换。

三.   网络模型

3.1   OSI七层模型

 OSI(Open Systems Interconnection)七层模型每一层具有特定的功能和职责。下面是对OSI七层模型各层的详细解释:

具体可以看下图:

3.2   IP/TCP五层(或四层)模型

其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是 5 层协议(物理层我们考虑的比较少,我们只考虑软件相关的内容. 因此很多时候我们直接称为TCP/IP 四层模型)。

 OSI七层模型与IP/TCP五层(或四层)模型对比:

一般而言

 所以可以知道,在模型中越在高层的一般会兼容下层的功能。

3.3   网络与OS之间的关系

3.4   再识协议

下面来看一个图:

四.   MAC地址

MAC帧地址是Media Access Control Address的缩写,也称为物理地址或硬件地址它是一个用于在局域网中唯一标识网络适配器(如网卡)的48位二进制数。每个网络适配器都有一个唯一的MAC地址,它由厂商在生产时烧录到适配器中。MAC帧地址用于在局域网中寻找目标设备,它是数据链路层的一部分,用于将数据包从源设备传输到目标设备。在以太网中,MAC地址是数据包在局域网中传输所必需的信息。 

五.   网络传输基本流程

5.1   报头

5.1.1   含义

5.1.2   作用

5.2   网络传输流程

5.2.1   同网段传输

网络传输流程如下:

下面来明确一下概念:

那么不同层对应的协议: 

 

5.2.2   跨网段传输

上述是同一个网段(以太网)内传输,那么如果两台主机分别位于不同的网段呢?

跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器

根据封装与解包流程:

六.   IP地址

七.   端口号

八.   socket编程准备

8.1   理解socket

综上,IP 地址用来标识互联网中唯一的一台主机,port 用来标识该主机上唯一的一个网络进程。IP+Port 就能表示互联网中唯一的一个进程。所以,通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp,srcPort,dstIp,dstPort}这样的 4 元组就能标识互联网中唯二的两个进程。

所以,网络通信的本质,也是进程间通信,我们把 ip+port 叫做套接字 socket。

8.2   认识TCP与UDP协议

 此处我们先对 TCP(Transmission Control Protocol 传输控制协议)和UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识,后面再讨论一些细节问题。

8.3   网络字节序

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的 多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之 分. 那么如何定义网络数据流的地址呢?

 

为使网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

要深入了解这些函数,读者可自行搜索理解,本文不做说明。 

8.4   socket常见接口

 要深入了解这些函数,读者可自行搜索理解,本文不做说明。 

8.5   sockaddr结构

socket API 是一层抽象的网络编程接口,适用于各种底层网络协议,如 IPv4、IPv6,以及后面要讲的 UNIX Domain Socket. 然而, 各种网络协议的地址格式并不相同.

 sockaddr 结构:

sockaddr_in 结构:

虽然 socket api 的接口是 sockaddr, 但是我们真正在基于 IPv4 编程时, 使用的数据结 构是 sockaddr_in; 这个结构里主要有三部分信息: 地址类型, 端口号, IP 地址。

in_addr 结构:

in_addr 用来表示一个 IPv4 的 IP 地址. 其实就是一个 32 位的整数。


总结:

好了,到这里今天的知识就讲完了,大家有错误一点要在评论指出,我怕我一人搁这瞎bb,没人告诉我错误就寄了。

祝大家越来越好,不用关注我(疯狂暗示)

举报

相关推荐

0 条评论