学习笔记第三十天

2024-08-23 21:28
文章标签 学习 笔记 十天 第三

本文主要是介绍学习笔记第三十天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络通信基础
1. 物理层面
  • 信息通路:包括有线(如光纤、铜缆)和无线(如5G、4G、星链)连接。
2. 软件/逻辑层面
  • 需要建立逻辑上的通信通路,涉及网络编程和协议。
网络编程与OSI模型
OSI七层模型
  1. 物理层:定义物理连接的特性,如电气和机械特性,传输比特流。
  2. 数据链路层:负责节点间数据的成帧、传输和错误控制,传输帧数据。
  3. 网络层(网际层):处理网络间的数据传输,如IP协议,传输数据包。
  4. 传输层:提供端到端的可靠数据传输服务,如TCP或不可靠的数据传输服务,如UDP。
  5. 会话层:管理和维护两个节点间的会话。
  6. 表示层:数据的表示、加密和压缩等。
  7. 应用层:提供网络应用服务,如HTTP、FTP、SMTP等。
TCP/IP模型
  • 实际应用中常用的是TCP/IP模型,包括四层:应用层、传输层、网络层、网络接口层(或数据链路层)。
操作系统角度
  • 用户层:应用层,程序员接触的地方。
  • 内核层:包括传输层、网络层、数据链路层、物理层,操作系统已经实现这些层次,如TCP/IP协议栈。
IP地址与端口号
  • IP地址:用于标识网络中的一台主机,通常为32位(IPv4)或128位(IPv6)整型数值,表示方式为点分十进制(IPv4)。
  • 端口号:用于标识主机中的一个具体进程,与IP地址结合构成进程的网络地址。
网络编程协议
TCP(传输控制协议)
  • 特点
    1. 面向连接:通信前需建立连接。
    2. 可靠传输:保证数据无误、无丢失、无失序、无重复。
    3. 面向字节流:传输数据时不区分应用层消息的边界。
  • 适用情况
    • 对传输质量要求高。
    • 传输大量数据。
    • QQ等即时通讯软件的登录管理等功能。
UDP(用户数据报协议)
  • 特点
    1. 不可靠:不保证数据可靠传输。
    2. 无连接:发送数据前无需建立连接。
    3. 数据报:每个UDP报文独立处理。
  • 适用情况
    • 发送小尺寸数据(如DNS查询)。
    • 实时性要求高或难以建立连接的场景(如无线网络)。
    • 广播/组播通信。
    • 即时通讯软件的点对点文本通讯、音视频通讯。
    • 流媒体传输等。
    • Socket 函数
      int socket(int domain, int type, int protocol);
    • 功能:程序向内核请求创建一个新的套接字描述符,用于网络通信。
    • 参数
      • domain:地址族,指定套接字通信的协议族。常见的值有 AF_INET(IPv4)和 AF_INET6(IPv6),以及 AF_UNIX 用于同一台机器上的进程间通信。
      • type:套接字类型。常见的值有 SOCK_STREAM(流式套接字,基于TCP),SOCK_DGRAM(数据报套接字,基于UDP),以及 SOCK_RAW(原始套接字,直接操作IP层)。
      • protocol:指定使用的协议。通常设置为0,让系统根据前两个参数自动选择协议。
    • 返回值:成功时返回一个新的套接字描述符,失败时返回-1,并设置相应的errno值。
    • Sendto 函数
      ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, 
      const struct sockaddr *dest_addr, socklen_t addrlen);
    • 功能:向指定的地址发送数据。适用于无连接的数据报套接字(如UDP)。
    • 参数
      • sockfd:套接字描述符。
      • buf:指向要发送数据的缓冲区。
      • len:发送数据的字节数。
      • flags:发送选项,通常设置为0。
      • dest_addr:指向目的地址的指针,包含IP地址和端口号。
      • addrlendest_addr参数的长度。
    • 返回值:成功时返回发送的字节数,失败时返回-1,并设置相应的errno值。
    • sockaddr_in 结构体
      struct sockaddr_in { 
      sa_family_t sin_family; /* AF_INET */ 
      in_port_t sin_port; /* 端口号,网络字节序 */ 
      struct in_addr sin_addr; /* IP地址 */ 
      }; struct in_addr { 
      uint32_t s_addr; /* IP地址,网络字节序 */ 
      };

    • sockaddr_in 结构体用于表示IPv4地址和端口号。
    • sin_family 字段通常为 AF_INET
    • sin_port 字段是端口号,使用网络字节序(大端序)。
    • sin_addr 字段是一个 in_addr 结构体,表示IP地址,也使用网络字节序。
    • 字节序转换函数
    • 主机到网络(Host to Network)
      • htonl:32位主机字节序转换为网络字节序。
      • htons:16位主机字节序转换为网络字节序。
    • 网络到主机(Network to Host)
      • ntohl:32位网络字节序转换为主机字节序。
      • ntohs:16位网络字节序转换为主机字节序。
    • 字符串转换函数
    • 主机地址字符串到网络字节序
      • inet_addr:将点分十进制的IP地址字符串转换为网络字节序的IP地址。
    • 网络字节序IP地址到主机地址字符串
      • inet_ntoa:将网络字节序的IP地址转换为其点分十进制的字符串表示形式。注意,inet_ntoa 返回的是指向静态内存的指针,因此不适合在多线程环境中使用。
    • recvfrom 函数
      ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, 
      struct sockaddr *src_addr, socklen_t *addrlen);
    • 功能:从指定的套接字接收数据,并可以获取发送方的地址信息。
    • 参数
      • sockfd:套接字描述符。
      • buf:指向接收数据的缓冲区的指针。
      • len:缓冲区的大小。
      • flags:接收选项,通常设置为0表示默认(阻塞)方式。
      • src_addr:指向sockaddr结构体的指针,用于存储发送方的地址信息。如果不需要该信息,可以设置为NULL。
      • addrlensrc_addr的大小,或者如果是输出参数,则为接收到的地址信息的实际大小。
    • 返回值:成功时返回接收到的字节数,失败时返回-1。
    • bind 函数
      int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    • 功能:将套接字与特定的IP地址和端口号绑定。在服务器端,这用于指定监听的接口;在客户端,虽然不是必需的,但可以用于指定源地址。
    • 参数
      • sockfd:通过socket函数创建的套接字描述符。
      • addr:指向sockaddr结构体的指针,通常使用sockaddr_in结构体(对于IPv4)或sockaddr_in6结构体(对于IPv6),包含IP地址和端口号。
      • addrlenaddr参数的大小。
    • 返回值:成功时返回0,失败时返回-1。
        connect函数

                        int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

                功能:该函数固定有客户端使用,表示从当前主机向目标
                            主机发起链接请求。
                参数:sockfd 本地socket创建的套接子id
                          addr 远程目标主机的地址信息。
                          addrlen: 参数2的长度。
                返回值:成功 0;
                              失败 -1;

这篇关于学习笔记第三十天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100533

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个