网络编程入门概念篇

embedded/2024/9/22 23:59:28/

1.网络编程-概念(套接字编程)

网络体系结构

网络体系结构指的是网络的层次结构和每一层所使用的协议的集合
实现网络传输的功能非常繁杂,所以采用了分而治之的设计方法,把网络的功能划分为不同的模块,以分层的形式有机地组合在一起。
每一层地实现功能和任务是不用的,其内部实现方法对外部其他层来说是透明的。每一层都为上一层提供服务,同时使用下一层所提供的服务。

OSI模型与TCP/IP模型

OSI模型相关的协议已经非常少使用,但是模型本身非常通用。

OSI模式是一个理想化的模型,至今尚未由完整的实现

一共有七层:应表会传网数物

 

TCP 协议:

TCP协议包含两个方面
        tcp传输协议:用来检测网络传输中差错的传输控制协议
        ip 网际协议:专门负责对不同网络进行互联的互联网协议IP
(通俗的来说TCP是专门负责传输过程中的出错问题,一旦出现传输的问题TCP协议则会介入处理,并把出错的数据包重新传输直到数据安全到达为止。而IP协议则是在网络中负责不同的网络之间的通信,给网络中的每一台主机分配一个不同的IP地址

TCP / IP 模型 (协议簇)

TCP/IP协议事实上是一个工业标准。
TCP/IP协议指的是能够在多个不同的网络间实现信息传输的协议簇。该协议并不是只由 TCP 和 IP协议组成,而是由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇。只是TCP IP 协议比较有代表性所以被称为TCP/IP协议。
TCP/IP只有4层

自下而上了解TCP/IP协议:

网络接口和物理层

物理层的主要设备就是中继器和集线器(交换机/路由)
封装成帧(在数据的前后分别加上开始《纠错以及修正》和结束的标记后便构成了一帧)
每一个数据链路层都规定了所能传输的一针数据中数据的长度上限称为最大传输单元(MTU)
透明传输(指的是不管数据的二进制是如何组合都应该能够正常传输而不会被误以为是某些控制的命令,确保数据安全到达)
差错检测(在传输的二进制编码中加入适当的冗余度使得接收者可以发现在传输中是否出现了差错)
TCP /IP 协议的数据包组成: 

数据的封装与传递过程 

发送端将数据进行打包封装

接收端将数据包进行解析获取数据

 补充:什么是FTP

FTP是什么?

      其实通俗的说FTP是一种数据传输协议,负责将我们电脑上的数据与服务器数据进行交换,比如我们要将在我们电脑中制作的网站程序传到服务器上就需要使用FTP工具,将数据从电脑传送到服务器。专业的说,FTP(全称:File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录,一般我们均是将我们电脑中的内容与服务器数据进行性传输。其实电脑与服务器是一样的,只是服务器上安装的是服务器系统,并且服务器稳定性与质量要求高些,因为服务器一般放在诸如电信等机房中,24小时都开机,这样我们才可以一直访问服务器中的相关信息。

FTP服务器是什么?

       但是还有一个FTP服务器概念大家不要混淆掉了。我们可以再电脑中安装FTP工具负责将电脑中的数据传输到服务器当中,这是服务器就称为FTP服务器,而我们的电脑称为客户端。简单的说FTP服务器就是一台存储文件的服务器,供用户上传或下载文件。             
原文链接:https://blog.csdn.net/chehec2010/article/details/84581185

 2.网络编程知识储备

Socket --- 插座

在计算机通信领域,socket 被翻译为“套接字” 
是一个编程接口
是一个特殊的文件描述符
不仅仅局限于TCP/IP协议
面向连接 TCP(视频通话)
无连接 UDP (发微信消息)
很多的应用 都依赖于socket的接口例如FTP\TELNET等

什么是socket?

独立于具体协议的网络编程接口
在OSI模型中主要位于会话层和传输层之间

Socket的类型

流式套接字 (SOCK_STREAM) TCP
提供一个面向连接、可靠的数据传输服务,数据无差错、无重复、地发送并按顺序抵达。内设流量控制,避免数据流淹没前面的数据。数据被查看时字节流,无长度限制。

数据报套接字(SOCK_DGRAM) UDP
提供无连接服务,数据包以独立数据包形式被发送,不提供无差错保证,数据有可能丢失或重复到
达,顺序发送可能会乱序接收
原始套接字(SOCK_RAW)
可以直接访问较低层次的协议例如 IP\ICMP。

为什么需要socket?


普通IO操作的过程:
打开文件 >> 读/写操作 >> 关闭文件
Socket文件的操作:
在同一个机器上的两个程序可以简单的通过某一个相同的文件进行数据的交流和传输,但是如
果在网络中两个进程完全不存在统一个机器那需要如何打开?
网络协议具有多样性,如何进行统一的操作?

Socket的位置

 IP地址

IP地址是网络中主机(电脑)的标识
网络中主机想要与其他机器通信就必须拥有一个自己的IP地址
IP地址为32位(IPV4)或者128位(IPV6)
每一个数据包都必须携带目的地址IP和源IP地址,路由器依靠此信息为数据包选择最优路由(路线)

点分形式:如 192.168.100.2 在传输过程中都会被转换为一个32位无符号的整数

IPv4地址

IPv4地址的概念是在1980年代初期提出的。即使有新版本的IP地址,IPv4地址仍然是Internet用户使用最广泛的地址。通常,IPv4地址以点分十进制表示。每个部分代表一组构成8位地址方案8位地址方案8位地址方案的8位地址。如 192.168.100.2

IPv6地址

IPv6地址IPv6地址IPv6地址并不是一种全新的技术。它是Internet协议的最新版本,但它是在1998年开发的,旨在替换IPv4地址。IPv6地址使用以冒号分隔的十六进制十六进制十六进制数字。它分为八个16位块,构成一个128位地址方案。如: 

端口号 (用于区分计算机中某一个具体的程序) 

用于区分一台主机中接收到的数据包应该转交给哪一个进程进行处理。
TCP端口号与UDP端口号是相互独立的
端口号一般由IANA(Internet Assigned Numbers Authority) 统一管理
众所周知端口: 1 - 1023 (1-25之间为众所周知端口 , 256 - 1023 为UNIX系统占用)
何为总所周知端口其实就是早已固定号的端口比如80端口分配给WWW服务,21端口分配给FTP服务等
注册端口: 1024 -49151 分配给进程或者应用。这些端口号在还没有被服务器资源占用时,可以由用户的APP动态注册获得。

动态端口号:49152 - 65535 被称为动态端口号他一般不固定分配某种服务而是动态分配的。一般可以使用
65000 以上的自己就可以随便用

 

 字节序

不同的CPU 主机中,内存存储多个字节的序列分为两种,这个称为主机字节序

小端序(Little-Endian)
低序(低有效位)存储在低地址(起始地址),Intel\AMD 等采用的方式
大端序(Big-Endian)

高序(高有效位)存储在低地址 ARM采用的存储方式

例如:0x12345678
在小端序中存放时:
12 34 56 78
高地址 --------- 低地址
在大端序中存放则相反
78 56 34 12
高地址 --------- 低地址

为了避免在不同的处理器中收到的数据出现字节序带来的问题,因此网络中传输的数据必须按照网
络字节序来处理,也就是大端序。发送者在发送数据前必须先转换为网络字节序(大端序),而接收者需要在收到网络中的数据时再转换为自己合适的主机字节序

字节序转换API函数 

端口号的转换
1  头文件:
2  #include <arpa/inet.h>
3
4  函数原型:
5  uint32_t htonl(uint32_t hostlong); // 主机字节序到网络字节序 无符号长整型
6
7  uint16_t htons(uint16_t hostshort);// 主机字节序到网络字节序 无符号短整型
8
9  uint32_t ntohl(uint32_t netlong); // 网络字节序转为主机字节序 无符号长整型
10
11 uint16_t ntohs(uint16_t netshort); // 网络字节序转为主机字节序 无符号短整型
IP地址转换:
1 //头文件:
2 #include <sys/socket.h>
3 #include <netinet/in.h>
4 #include <arpa/inet.h>
5
6 函数原型:
7 // 把cp指向的字符串转换为32位的网络字节序的二进制值存于inp中
8 // cp 点分十进制的网络地址的字符串 (IP地址)
9 int inet_aton(const char *cp, struct in_addr *inp);
10
11 // 把cp指向的字符串转换为32位的网络字节序的二进制值并返回
12 in_addr_t inet_addr(const char *cp);
13 in_addr_t inet_network(const char *cp);
14
15 // 把in中的32位网络字节序的二进制地址转换为点分十进制的字符串
16 char *inet_ntoa(struct in_addr in);


http://www.ppmy.cn/embedded/110278.html

相关文章

AdaBoost算法(AdbBoost Algorithm)—有监督学习方法、非概率模型、判别模型、非线性模型、非参数化模型、批量学习

定义 输入:训练数据集 T { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T\{ (x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T{(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)},其中&#xff0c; x i ∈ χ ⊆ R n , y i ∈ y { − 1 , 1 } x_i \in \chi\subseteq R^n, y_i …

C语言深入理解指针四(17)

文章目录 前言一、字符指针变量二、数组指针变量数组指针变量是什么&#xff1f;数组指针变量怎么初始化 三、二维数组传参的本质四、函数指针变量函数指针变量的创建函数指针变量的使用 五、两段有趣的代码代码1代码2typedef关键字 六、函数指针数组总结 前言 继续&#xff0…

pv和pvc

pv和pvc pv: Persistent volume 是k8s虚拟化的存储资源&#xff0c;实际上就是存储&#xff0c;例如本地的硬盘&#xff0c;网络文件系统&#xff08;nfs&#xff09; lvm RAID oss&#xff08;ceph&#xff09; 云存储。 pvc&#xff1a; Persistent volume claim 用户对…

如何让Google收录我的网站?

其实仅仅只是收录&#xff0c;只要在GSC提交网址&#xff0c;等个两三天&#xff0c;一般就能收录&#xff0c;但收录是否会掉&#xff0c;这篇内容收录了是否有展现&#xff0c;排名&#xff0c;就是另外一个课题了&#xff0c;如果不收录&#xff0c;除了说明你的网站有问题&…

基于YOLOv8的遥感光伏板检测系统

基于YOLOv8的遥感光伏板检测系统 (价格85) 包含 [光伏板] 1个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的yolov8的权重文件&#xff0c;运用在其他检测系统上&#xff0c;如火…

JVM工作过程

将JVM工作过程粗略分为5个阶段&#xff0c;包括加载阶段、链接阶段、初始化阶段、执行阶段、回收阶段 其中&#xff0c; &#xff08;1&#xff09;加载阶段、链接阶段的解析部分主要由类加载器完成 &#xff08;2&#xff09;初始化阶段是由JVM的类加载机制在类加载过程的最后…

什么是嵌入式?行业前景如何?

目录 什么是嵌入式&#xff1f; 主要特点 常见应用场景 1. 工业自动化 2. 交通运输 3. 智能家居 4. 消费电子 5. 医疗设备 6. 航空航天 7. 物联网&#xff08;IoT&#xff09; 8. 能源管理 行业前景如何&#xff1f; 市场需求强劲 物联网&#xff08;IoT&#xff09;的爆发 汽车…

【深度学习】磁盘的转速影响

深度学习&#xff0c;确切的说是计算机视觉&#xff0c;对磁盘的转速是有要求的。 5400转&#xff0c;7200转&#xff0c;转速要大一点。有的是能调转速的&#xff0c;有的不能。 这次我买的这个服务器调不了。 (base) justinjustin-System-Product-Name:~$ sudo hdparm -I …