【从零开始的嵌入式生活】网络编程1——网络基础

简介: 【从零开始的嵌入式生活】网络编程1——网络基础

文章目录

网络发展历史和分层

internet的历史

网络的体系结构

网络各层协议

网络接口与物理层

网络层(IP层)

传输层

应用层

网络的封包和拆包

一些预备知识

SOCKET

基础知识

类型

IP地址

IPV4地址

特殊IP地址

端口号

字节序

IP地址转换函数:

in_addr_t inet_addr(const char *cp);

inet_pton()/inet_ntop()

写在最后

网络发展历史和分层

internet的历史

1.DARPA提出“资源共享计算机网络”,目的在于让DARPA的所有电脑互联起来,即“阿帕网”,也就是Interne的最早雏形。

2.第一份TCP协议的出现,伴随着很多的问题,存在着 数据包丢失 不能有效的纠正的问题

TCP/IP协议分成了两个不同的协议:

TCP:用来检测网络传输中差错的传输控制协议(可靠传输)

IP:专门负责对不同网络进行互联的互联网协议(不可靠传输)

网络的体系结构

网络采用分层的思想:


1.每层实现不同的功能,对上层的数据做透明分层

2.每一层向上提供服务,同时使用下层提供的服务

上图表示的所有的分层,用的比较多的是右边的四层模型。

网络各层协议

网络接口与物理层

MAC地址:48位全球唯一,网络设备的身份标识

ARP/RARP:

ARP:IP地址⟶MAC地址

RARP:MAC地址⟶IP地址


PPP协议:ADSL、拨号协议(GPRS/3G/4G)


网络层(IP层)

IP地址

IP:Internet protocol(分为IPV4和IPV6)

ICMP:Internet控制管理协议,ping命令属于ICMP

IGMP:Internet分组管理协议,广播、组播


传输层

TCP:(Transfer Control protocol,传输控制协议)提供面向链接,一对一的可靠传输,即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。

UDP:(user Datagram protocol,用户数据报协议):提供不可靠,无连接的尽力传输协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

SCTP:是可靠传输,是TCP的增强版,能实现多主机,多链路的通信


应用层

网页访问协议:HTTP/HTTPS

邮件发送接收协议:POP3(收)/SMTP(发)、IMAP(可接收邮件的一部分)

文件传输:FTP

远程登录:Telnet、ssh

嵌入式相关:


NTP:网络时钟协议

SNMP:简单网络管理协议(实现对网络设备集中式管理)

RTP/RTSP:用传输音视频的协议(安防监控)

网络的封包和拆包


一些预备知识

SOCKET

基础知识

socket是一个编程的接口,是一种特殊的文件描述符(对它执行IO的操作函数,如read()、write()、close()等操作函数)给


socket代表网络编程的一种资源


类型

流式套接字(SOCK_STREAM):唯一对应TCP

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接受。内设流量控制,避免数据流淹没慢的接收方。数据被看作字节流,无长度限制。

数据报套接字(SOCK_DGRAM):唯一对应UDP

提供无连接服务,数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字(SOCK_RAM):对应多个协议,发送穿透了传输层

可以对较低层次协议如:IP、ICMP直接访问

IP地址

为了区分不同的计算机。


IPV4:采用32位的整数来表述

IPV6:采用128位整数表示

mobileIPV6:local IP(本地注册的IP),roam IP(漫游IP)

IPV4地址

点分形式:192.168.7.246

32位整数

特殊IP地址

局域网IP:192.xxx.xxx.xxx 、10.xxx.xxx.xxx

广播IP:xxx.xxx.xxx.255 、255.255.255.255(全网广播)

组播:224.xxx.xxx.xxx~249.xxx.xxx.xxx

端口号

为了区分一台主机接收到的数据包应该交给哪个任务进行处理,使用该端口号区分。TCP和UDP的端口相互独立

16位的数字(1-66535)


约定的端口:1~1023(FTP:21,SSH:22,HTTP:80,HTTPS:469)

保留端口:1024~5000(不建议使用)

可以使用:5001~66535

网络里面的通信时由IP地址+端口号来决定


字节序

字节序是指不同的CPU访问内存中的多字节数据的时候,存在大小端问题。

一般来说:


x86/ARM:小端

powerpc/mips:ARM作为路由器时,大端模式

网络传输的时候采用大端模式


本地字节序 网络字节序


主机字节到网络字节序


u_long_htonl(u_long hostlong);

u_short htons(u_short short);

网络字节序到主机字节序


u_long ntohl(u_long hostlong);

u_short ntohs(u_short short);

IP地址转换函数:

in_addr_t inet_addr(const char *cp);

cp:点分形式的IP地址,结果是32位整数(内部包含了字节序的转换,默认是网络字节序的模式)

特点:


仅适用于IPV4

当出错时,返回-1

不能表示255.255.255.255

inet_pton()/inet_ntop()

#include<arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);


特点:


适应于IPV4和IPV6

能正确处理255.255.255.255的转换问题

参数:


af:地址协议族(AF_INET或AF_INET6)

src:是一个指针(点分形式的IP地址[主要是IPV4使用])

dst:转换的结果给到dst

写在最后

今天开始网络编程,这部分非常重要,所有文件我都放在了gitee哦,需要自取,我尽量一天一更,大家和我一起变强呀!最后三连即可提高学习效率!!!


相关文章
|
28天前
|
移动开发 网络协议 NoSQL
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
47 0
|
2月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
2月前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
55 3
|
1月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
16 0
|
2月前
|
网络协议 安全 网络安全
C语言 网络编程(四)常见网络模型
这段内容介绍了目前被广泛接受的三种网络模型:OSI七层模型、TCP五层模型以及TCP/IP四层模型,并简述了多个网络协议的功能与特性,包括HTTP、HTTPS、FTP、DNS、SMTP、TCP、UDP、IP、ICMP、ARP、RARP及SSH协议等,同时提到了ssh的免费开源实现openssh及其在Linux系统中的应用。
|
3月前
|
安全 Java 网络安全
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
44 2
|
3月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
3月前
|
网络协议 Java 关系型数据库
16 Java网络编程(计算机网络+网络模型OSI/TCP/IP+通信协议等)
16 Java网络编程(计算机网络+网络模型OSI/TCP/IP+通信协议等)
85 2
|
3月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
120 0
|
4月前
|
缓存 网络协议 Java
(六)网络编程之化身一个请求感受浏览器输入URL后奇妙的网络之旅!
在浏览器上输入一个URL后发生了什么? 这也是面试中老生常谈的话题,包括网上也有大量关于这块的内容。
133 2

热门文章

最新文章