Linux 网络编程 和 字节序的概念

网络编程概述

不同于之前学习的所有通讯方法,多基于Linux内核实现,只能在同一个系统中不同进程或线程间通讯,Linux的网络编程可以实现真正的多机通讯!

两个不相关的终端要实现通讯,必须依赖网络,通过地址 来找到对方,所谓地址包含的两个重要概念就是 IP地址端口号

一台拥有IP地址的主机可以提供许多服务,比如Web服务,FTP服务,SMTP服务等,这些服务完全可以通过一个IP地址来实现,所以还需要一个端口号来确定访问通道

服务器一般是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号是21,每个Telnet服务器的TCP端口号是23 等等...

当通过地址找到彼此之后,数据的交流格式就叫协议。协议有很多种,比如http, tcp, udp等等,他们都有各自的数据格式。

其实之前学习的单片机和PC机的通讯就是基于串口协议,也就是8位数据位,是否奇偶校验位等等...

  • TCP协议:面向连接的 ,发送数据前需要保证连接,可靠但数据量小,只能1对1通讯
  • UDP协议:面向报文的 ,不关心对方是否准确收到,不可靠但数据量大,支持N对M的交互通讯

而不管是TCP协议还是UDP协议,都可以结合socket网络编程来学习。

字节序

字节序(Byte Order)是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。

概念回顾:1个字节 = 1个Byte = 8个bit = 8位

常见序:

  • Little endian:小端字节序:将低续字节存储在起始地址
  • Big endian:大端字节序:将高序字节存储在起始地址

注意!!

网络字节序 = 大端字节序

x86系统的CPU = 小端字节序

所以网络字节序和电脑的字节序是相反的!

这是在网络编程中需要注意的很重要的一点!

相关推荐
wangjialelele38 分钟前
Linux mmap 机制:从 read/write 底层流程到手写 malloc 内存分配
linux·运维·服务器·mmap
草莓熊Lotso41 分钟前
【Linux网络】UDP Socket 编程全解析:从回显服务到通用字典服务,从零实现工业级代码
linux·运维·服务器·数据库·c++·单片机·udp
一只积极向上的小咸鱼3 小时前
Codex 在 VS Code + ModelArts 场景下的登录与配置总结
linux·运维·windows
Waay7 小时前
Linux Shell 知识点考评(一):grep 文本搜索(附答案)
linux·运维·服务器
jamon_tan7 小时前
Linux下串口RAW模式设置
linux
碧海银沙音频科技研究院8 小时前
基于VMware虚拟机ubuntu开发博通BK7258方法
linux·运维·ubuntu
云边有个稻草人10 小时前
【Linux系统】进程地址空间
linux·虚拟地址空间·进程地址空间·虚拟地址空间是怎么实现的?·为什么要有虚拟地址空间?·怎么理解虚拟地址空间?
Oflycomm10 小时前
工业以太网四大主流协议(EtherCAT/PROFINET/EtherNet/IP/Modbus)技术参数深度对比
网络·网络协议·tcp/ip·欧飞信·plc模组
yong999010 小时前
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
开发语言·网络·c#
kobesdu11 小时前
【ROS2实战笔记-18】ROS2 通信的隐秘控制:DDS 配置参数如何决定系统性能
网络·人工智能·笔记·机器人·开源·ros·人形机器人