* 源端口号帮助接收方识别数据包的来源,并将响应数据包发送回正确的源端口。
-
目的端口号:
- 目的端口号是指接收数据包的应用程序或服务所监听的端口号。它是在数据包到达接收方(服务器)时用于标识目标应用程序或服务的。
- 目的端口号帮助操作系统将接收到的数据包传递给正确的应用程序或服务。
在网络通信中,源端口号和目的端口号共同构成一个套接字(Socket),用于唯一标识一个网络连接。通过使用不同的源端口号和目的端口号,可以同时建立多个网络连接,并确保数据包能够被正确地路由到相应的应用程序或服务。
⭕总的来说:传输层协议( TCP
和 UDP
)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 “数据是谁发的, 要发给谁”
四、网络字节序
我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流同样有大端小端之分。那么如何定义网络数据流的地址呢?
网络字节序通常采用大端序(Big-Endian)表示,即数据的高位字节存储在低地址,低位字节存储在高地址。这种字节序是网络协议规定的标准字节序,确保了在不同主机之间的数据交换时能够正确地解释数据。
在网络编程中,将数据转换为网络字节序的方式是使用标准的网络字节序函数来进行转换,如htons()
(Host to Network Short)、htonl()
(Host to Network Long)等函数。这些函数可以确保数据在发送和接收时都按照网络字节序进行处理,从而保证不同主机之间的数据通信的正确性和可靠性。
总的来说,网络字节序是一种用于在网络通信中统一表示数据的字节顺序的规范,通过使用网络字节序,可以确保在不同主机之间的数据交换时能够正确地解释数据,避免因字节序不同而导致的数据解释错误问题。
五、sockaddr结构
1. sockaddr 结构
sockaddr
结构在网络编程中扮演着重要的角色,它用于表示各种类型的套接字地址,包括 IPv4、IPv6 和 UNIX Domain Socket 地址等。sockaddr
结构是一个通用的地址结构,通常会根据具体的协议和地址族进行类型转换为更具体的结构,例如 sockaddr_in
用于表示 IPv4 地址,sockaddr_in6
用于表示 IPv6 地址。
下面是 sockaddr
结构的定义:
struct sockaddr {
sa\_family\_t sa_family; // 地址族,如 AF\_INET、AF\_INET6
char sa_data[14]; // 实际存储地址信息的地方,通常不直接使用
};
sockaddr
结构中主要包含两个字段:
sa_family
:表示地址族,即地址的类型,可以是AF_INET
(IPv4)、AF_INET6
(IPv6)等。sa_data
:实际存储地址信息的数组,通常不直接使用,而是通过类型转换为更具体的结构体来操作。
在实际编程中,通常会将 sockaddr
结构转换为特定协议对应的结构体,例如 sockaddr_in
或 sockaddr_in6
,以便更方便地操作地址信息。
如果需要处理多种类型的套接字地址,可以使用 sockaddr
结构作为统一的表示方式,这样可以更灵活地处理不同类型的地址。
2. sockaddr_in 结构
sockaddr_in
结构是用于表示 IPv4 地址的套接字地址结构,它是在 sockaddr
结构的基础上针对 IPv4 地址进行了扩展和特化。在网络编程中,我们经常使用 sockaddr_in
结构来表示和操作 IPv4 地址信息。
下面是 sockaddr_in
结构的定义:
struct sockaddr\_in {
sa\_family\_t sin_family; // 地址族,始终设置为 AF\_INET
in\_port\_t sin_port; // 16 位端口号,网络字节顺序
struct in\_addr sin_addr; // IPv4 地址
char sin_zero[8]; // 用于填充,使该结构和 sockaddr 兼容
};
在 sockaddr_in
结构中,常用的字段包括:
sin_family
:始终设置为AF_INET
,表示地址族为 IPv4。sin_port
:16 位端口号,存储网络字节顺序(Big-Endian)的端口号。sin_addr
:struct in_addr
类型,用于存储 IPv4 地址。sin_zero
:用于填充,使sockaddr_in
结构和通用的sockaddr
结构大小一致。
在实际编程中,当需要使用 IPv4 地址时,可以将 sockaddr_in
结构用于存储和传递地址信息,同时通过相关函数进行地址信息的设置和获取。
以下是一个示例,演示如何使用 sockaddr_in
结构表示 IPv4 地址:
#include <arpa/inet.h>
#include <netinet/in.h>
// 创建并初始化 sockaddr\_in 结构体
struct sockaddr\_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8080); // 将端口号转换为网络字节顺序
inet\_pton(AF_INET, "127.0.0.1", &server_address.sin_addr); // 设置 IPv4 地址
// 使用 server\_address 结构体进行 Socket 编程操作
3. in_addr结构
in_addr
结构是用于表示 IPv4 地址的结构体,它通常作为 sockaddr_in
结构中的一个字段来存储 IPv4 地址信息。in_addr
结构定义如下:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-OiYjiKpK-1712594316455)]