当前位置: 首页 > ds >正文

Linux操作系统编程——网络

网络编程

        目的:不同主机进程间通信

        需要解决的问题:

                1,主机与主机之间物理层面必须互联互通

                2,进程与进程之间在软件层面必须互联互通

                交换机:短距离网络通信,实现局域网内通信

                局域网:短距离的数据传输

                路由器:负责路由,即路径选择,将数据上传至广域网内的路由器

                广域网:多个路由器组成的数据转发集合中心。可以实现远距离数据传输

        IP地址:计算机的软件地址,用来标识计算机设备

                同一局域网中不可能出现IP地址相同的设备

        MAC地址:计算机的硬件地址(固定)

        网络的端口号:标记同一主机上的不同网络进程

网络协议

        是一种网络通信标准

OSI七层模型(理论模型)

        开放系统互联模型,规定了不同设备间网络通信的通信标准

模型功能
应用层要传呼的数据信息,例如文件传输,电子邮件
表示层数据加密、解密操作,压缩,解压缩
会话层建立数据传输通道,即会话
传输层

决定数据的传输方式:UDP、TCP。例如端口号

网络层实现数据路由,路径规划。例如路由器
数据链路层

封装成帧,点对点通信(局域网内通信),差错检测。例如交换机

物理层定义物理设备标准、电器特征,比如网线、光纤等传输介质,将数据链路层中的数字信号转为物理信号,即高低电频的方式进行数据发送,称为比特流

                注:从下到上,依次接近用户,应用层最接近用户,物理层位最底层

TCP/IP五(或者四)层模型(应用模型)

模型功能
应用层

http:超文本传输协议

https:加密版超文本传输协议(SSL加密算法)

FTP:文件传输协议(在传输层使用TCP的传输方式)

TFTP:简单文件传输协议(使用UDP传输方式)(效率高但可能数据丢失)

MQTT:消息队列遥测传输协议(物联网协议)

DNS:域名解析服务(www.***.com)将域名转为IP地址

传输层

TCP:传输控制协议,必须优先确认数据传输的通道,相对安全可靠

UDP:用户数据报协议,无需建立连接通道

网络层

IPv4:32位整型数据表示IP地址

IPv6:128位

数据链路层ARP:地址解析协议,实现IP地址和MAC地址的转换
物理层规定设备标准等

                注:四层模型就是在五层模型的基础上,将数据链路层和物理层结合起来称网络接口层

IP协议

        在Windows系统上,win+r,cmd,密令ipconfig查看

        例:192.168.0.140,点分十进制,为用户看到的表示形式。在内存中的存储形式是,192、168、0、140分别占一个字节,总共32bit

        IPv4地址的组成形式:IP地址 = 网络位 + 主机位

                网络位:该IP地址位于那个网段(局域网)内

                主机位:这个网段(局域网)第几台主机

                子网掩码为全为1的位为当前IP地址的网络位,全为0的位为主机位,例如255.255.255.0的子网掩码,对应到IP地址上,192.168.0是网络位,0为主机位,表示的是该主机位于192.168.0这个网段的第140台主机

        如果是例如192.168.0.121/24这种带有“/”的IP地址,其中24表示该IP地址网络位的位数,即3个字节

特殊的IP地址

网段号

        192.168.1.0:该主机的网段号,即IP地址网络位不变,主机位全是0.则为该IP地址的网段号,不表示某台主机

广播号

        192.168.1.255:IP地址网络位不变,主机位全为1,则为该IP地址的广播号,向广播号发送信息,所有局域网内IP都能受到此消息

网关地址

        192.168.1.1,192.168.1.2:主机位为1或2

IP地址的划分

        公有IP:由电信公司直接分配,并需要付费的IP地址, 可以直接访问internet

        私有IP:不能直接访问internet的ip地址

        为了节省ip地址

网络端口号

        端口号:16位的整型数据(unsigned short)

        范围:0-65535

        端口号功能:标记同一主机上的不同网络进程

分类

        1,任何TPC/IP实现锁提供的服务都用1-1023之间的端口号

                http:80

                FTP:20/21

                TFPT:69

                HTTPS:443

        2,端口号从1024-49151是被注册的端口号,被IANA指定的特殊服务使用

                MQTT:1833和8883

        3,49152-65535是动态或私有端口号

数据包的封装和解封过程

网络配置

        ubuntu网络联通

网络协议——UDP

        UDP:传输层,用户数据报协议

        网络编程模型

                B/S模型:browser/server(浏览器/服务器)

                        1,客户端为公用的客户端(浏览器)

                        2,一般只做服务器开发

                        3,客户端要加载的数据均来自服务器

                C/S模型:client/server(客户端/服务端)

                        1,客户端是一个专用的客户端

                        2,服务器和客户端都需开发

                        3,客户端可保存资源,本地加载,无需所有数据都请求服务器

UDP编程流程

        套接字:文件描述符,是网络通信时应用层可操作的端口

socket

        功能:创建通信的套接字

        参数:

                domin:网络层使用什么地址协议族

                        AF_INET:IPv4
AF_INET6:IPv6

                type:规定传输层的协议

                      SOCK_DGRAM : UDP协议
SOCK_STREAM:TCP协议
SOCK_RAW :原始套接字

                protocol:0为按照默认协议方式创建

        返回值:成功则为套接字,失败则为-1

sendto

        功能:向网络套接字发送数据

        参数:

                sockfd:套接字

                buf:要发送的数据的首地址

                len:要发送的字节数

                flags:0为按照默认方式发送

                dest_addr:接收方的地址信息(IP + 端口号)

                man 7 ip

                由于参数要求const struct,所以直接使用强转即可

                sin_family:地址协议族

                sin_port:端口号,必须是网络字节序(大端)由于主机字节序是小端,所以需要进行转化,由函数htons

                sin_addr:IP地址,与端口号同理,需要转网络字节序,即inet_addr

                addrlen:接收方的地址大小

        返回值:成功则为实际发送的字节数,失败则为-1

        例:

bind

        功能:绑定自己的IP地址和端口号        

        参数:

                sockfd:套接字

                addr:需要绑定的地址

                addrlen:地址大小

        返回值:成功则0失败-1

recvfrom

        功能:从套接字上接收数据

        参数:

                sockfd:套接字

                buf:存放接收数据的内存首地址

                len:希望接收的字节数

                flags:0为按照默认阻塞方式回收

                src_addr:发送方的地址信息,提前定义变量来存,如果不关注为NULL

                addrlen:发送放地址的指针,如果不关注为NULL

        返回值:成功则为实际受到的字节数,失败则为-1

http://www.xdnf.cn/news/18648.html

相关文章:

  • 第二阶段WinFrom-6:文件对话框,对象的本地保存,序列化与反序列化,CSV文件操作,INI文件读写
  • 08.21总结
  • Claude Code 三类.md文件
  • Day2--HOT100--283. 移动零,11. 盛最多水的容器,15. 三数之和
  • PCB电路设计学习2 元件原理图封装的添加 手工设计元件封装
  • 大型前端项目如何实现css 隔离:利用浏览器原生的 Shadow DOM 完全隔离 DOM 结构与样式...
  • Linux 下的网络编程
  • 学习嵌入式的第二十四天——数据结构——队列和树
  • Git 提交除某个文件外的其他所有文件
  • 微信开发者工具:更改 AppID 失败
  • 嵌入式-EXTI的工作原理和按钮实验-Day19
  • 我从零开始学习C语言(13)- 循环语句 PART2
  • QT-窗口类部件
  • K8S高可用集群
  • K8s的相关知识总结
  • 如何理解面向过程和面向对象,举例说明一下?
  • Qt5 的跨平台开发详细讲解
  • 计算机毕设选题推荐 基于Spark的家庭能源消耗智能分析与可视化系统 基于机器学习的家庭能源消耗预测与可视化系统源码
  • 告别第三方流氓工具,如何实现纯净系统维护
  • DIC技术极端环境高温案例分享——从1600℃的锆合金力学性能测试到3000℃变形测试的DIC测量
  • 手机、电脑屏幕的显示坏点检测和成像原理
  • k8s----学习站点搭建
  • C++显示类型转换运算符static_cast使用指南
  • 贪吃蛇--C++实战项目(零基础)
  • 大模型微调:从理论到实践的全面指南
  • 【链表 - LeetCode】19. 删除链表的倒数第 N 个结点
  • Laravel 使用阿里云OSS S3 协议文件上传
  • Java多线程面试题二
  • Flask电影投票系统全解析
  • WPF控件随窗体大宽度高度改变而改变