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

linux学习之网络编程

一、两个模型及其对应关系

              OSI七层模型                                TCP/IP 四层模型
            --------------------------------------------------------------------------
                 应用层
                 表示层                 ---->                  应用层
                 会话层
                 
                 传输层                 ---->                  传输层 
                 
                 网络层                 ---->                  网络层 
                 
                 数据链路层             ---->              网络接口层
                  物理层 

  1. 物理层

    • 功能:主要负责处理物理介质上的信号传输,包括电缆、光纤、无线等传输介质。它定义了物理设备的电气、机械、功能和规程特性,确保数据能够在物理介质上正确地发送和接收。比如,规定了网线的接口形状、引脚定义、信号的电压等级、传输速率等。
    • 设备:常见的物理层设备有集线器、中继器等。
  2. 数据链路层

    • 功能:负责将物理层接收到的原始比特流转换为数据帧,并进行差错检测和纠正,同时还负责数据的成帧、MAC 地址寻址等功能。它通过在数据中添加帧头和帧尾等信息,使数据能够以帧为单位在物理链路上传输,并确保数据帧的正确传输和接收。
    • 设备:数据链路层的设备主要有交换机、网桥等。
  3. 网络层

    • 功能:主要负责网络中的寻址和路由选择,使数据能够在不同的网络之间进行传输。它为数据包添加源 IP 地址和目的 IP 地址等信息,通过路由算法确定数据传输的最佳路径。
    • 设备:网络层的主要设备是路由器。
  4. 传输层

    • 功能:主要负责在不同主机上的应用程序之间提供可靠或不可靠的端到端通信。它通过端口号来标识不同的应用程序进程,实现数据的分段和重组,确保数据的可靠传输。常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。
    • 协议:TCP 提供面向连接的、可靠的字节流服务;UDP 提供无连接的、不可靠的数据包服务。
  5. 会话层

    • 功能:主要负责建立、维护和管理会话连接。它可以在不同主机的应用程序之间建立会话,协调数据的传输顺序,以及在会话结束时进行连接的释放等操作。
    • 应用:比如在 Web 应用中,用户登录到网站后,会话层会建立一个会话,用于跟踪用户的操作和状态,直到用户退出登录或会话超时。
  6. 表示层

    • 功能:主要负责处理数据的表示和转换,包括数据的加密和解密、压缩和解压缩、字符编码转换等。它确保不同系统之间能够正确地理解和处理数据。
    • 应用:当用户从网络上下载一个压缩文件时,在接收端,表示层会对文件进行解压缩操作,以便应用层能够正确地读取和处理文件内容。
  7. 应用层

    • 功能:是直接为用户提供服务的一层,它包含了各种网络应用协议和服务,如 HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等,用户通过应用层的应用程序来访问网络资源和服务。
    • 应用:用户使用浏览器访问网站时,就是通过应用层的 HTTP 协议与服务器进行通信,获取网页内容等信息。

二、UDP协议(用户数据报)和TCP传输控制协议   

连接特性

  • UDP:是无连接的协议,发送数据前不需要先建立连接,就像邮寄信件一样,只管把数据报发送出去,不关心对方是否准备好接收,也不确认对方是否成功收到。
  • TCP:是面向连接的协议,在发送数据前,需要先在发送方和接收方之间建立连接,就像打电话,双方要先接通,确认可以通信后才开始说话。

可靠性

  • UDP:不保证数据的可靠传输,数据报可能会丢失、重复或乱序到达。
  • TCP:提供可靠的传输服务,通过序列号、确认应答、重传机制等保证数据无差错、不丢失、不重复且按序到达。

传输效率

  • UDP:没有连接建立和维护的开销,也没有复杂的确认和重传机制,传输速度快,效率高,适合对实时性要求高但对数据准确性要求相对较低的场景。
  • TCP:由于要保证数据的可靠性,有较多的控制机制,会带来一定的开销,传输效率相对 UDP 低一些,但在对数据准确性要求高的场景中是必要的。

数据格式

  • UDP:数据报格式简单,首部只有 8 个字节,包括源端口、目的端口、长度和校验和,数据部分就是应用层传递下来的数据。
  • TCP:首部一般为 20 字节,包含源端口、目的端口、序列号、确认号、数据偏移、保留、控制位、窗口、校验和、紧急指针等字段,比 UDP 复杂,能提供更多的控制信息。

应用场景

  • UDP:常用于实时性要求高的应用,如视频会议、实时监控、DNS(域名系统)查询等。在这些场景中,少量数据的丢失或延迟可以接受,关键是要保证数据的实时传输。
  • TCP:适用于对数据准确性和完整性要求严格的应用,如网页浏览、文件传输、电子邮件等。这些应用需要确保数据完整无误地到达目的地。

三、三次握手四次挥手

三次握手

  • 第一次:客户端发 SYN 包,含初始序列号 seq=x,向服务器请求建立连接,此时客户端进入 SYN_SENT 状态。
  • 第二次:服务器收到 SYN 包后,发 SYN+ACK 包,确认号 ack=x + 1,自己的序列号 seq=y,服务器进入 SYN_RCVD 状态。
  • 第三次:客户端收到 SYN+ACK 包后,发 ACK 包,确认号 ack=y + 1,序列号 seq=x + 1,双方进入 ESTABLISHED 状态,连接建立成功。

四次挥手

  • 第一次:主动关闭方发 FIN 包,含序列号 seq=u,请求关闭连接,进入 FIN_WAIT_1 状态。
  • 第二次:被动关闭方收到 FIN 包后,发 ACK 包,确认号 ack=u + 1,自己的序列号 seq=v,主动关闭方进入 FIN_WAIT_2 状态,被动关闭方进入 CLOSE_WAIT 状态。
  • 第三次:被动关闭方没有数据要发送时,发 FIN 包,序列号 seq=w,确认号 ack=u + 1,进入 LAST_ACK 状态。
  • 第四次:主动关闭方收到 FIN 包后,发 ACK 包,确认号 ack=w + 1,序列号 seq=u + 1,进入 TIME_WAIT 状态,一段时间后进入 CLOSED 状态。被动关闭方收到 ACK 包后,也进入 CLOSED 状态。

五、C/S 模型(客户端 / 服务器模型)、B/S 模型(浏览器 / 服务器模型)和 P2P 模型(对等网络模型五

1、B/S  http

     C/S  标准协议   自定义协议

2、B/S 客户端通用

     C/S  client专用客户

3、CS  功能复杂

      BS  功能简单

4、BS  资源从s到c

     CS  发送必要资源

六、相关函数

1、inet_addr(const  char  *IP)

    把点分十进制IP转化为大端的uint32

2、htons(50000) 

     网络转主机,转成大端

3、sockfd = socket(AF_INET,SOCK_DGRAM(数据报)|SOCK_STREAM(TCP传输控制协议),0)

     提供了一个编程接口,使得不同主机上的进程能够通过网络进行通信

4、bind(sockfd,(SA)&ser,sizeof(ser))

     将一个套接字(socket)与特定的 IP 地址和端口号进行绑定

5、accept(listfd, (SA)&cli, &len)

      从监听套接字的已完成连接队列中取出一个连接,如果该队列中没有已完成的连接,accept 函数会进入阻塞状态,直到有新的客户端连接请求到来。一旦成功取出连接,它会返回一个新的套接字描述符,这个新套接字专门用于和对应的客户端进行数据通信,而原来的监听套接字则继续监听其他新的客户端连接请求。

6、connect(sockfd, (SA)&ser, sizeof(ser))

      让客户端套接字尝试与指定的服务器地址和端口建立连接。一旦连接成功建立,客户端和服务器端之间就可以进行数据的双向传输。


http://www.kler.cn/a/524070.html

相关文章:

  • Visual Studio Code修改terminal字体
  • 《深度剖析Q-learning中的Q值:解锁智能决策的密码》
  • SSM开发(七) MyBatis解决实体类(model)的字段名和数据库表的列名不一致方法总结(四种方法)
  • 萌新学 Python 之数值处理函数 round 四舍五入、abs 绝对值、pow 幂次方、divmod 元组商和余数
  • jemalloc 5.3.0的tsd模块的源码分析
  • 文本左右对齐
  • 51c深度学习~合集3
  • R语言统计分析——ggplot2绘图2——几何函数
  • 单向循环链表的概念+单向循环链表的结点插入+单向循环链表的结点删除+程序设计与笔试题分析
  • 构建可靠的时间序列预测模型:数据泄露检测、前瞻性偏差消除与因果关系验证
  • Kafka 深入客户端 — 分区分配策略与协调器
  • Luzmo 专为SaaS公司设计的嵌入式数据分析平台
  • 【Validator】字段验证器struct与多层级验证,go案例
  • ReentrantLock锁江湖:一柄寒刃镇并发纷争
  • ts 基础核心
  • 2025-01-28 - 通用人工智能技术 - RAG - 本地安装 DeepSeek-R1对话系统 - 流雨声
  • 拟合损失函数
  • C语言练习(29)
  • PWM频率测量方法
  • langchain基础(二)
  • 【数据结构】_链表经典算法OJ:分割链表(力扣—中等)
  • 信息学奥赛一本通 1390:食物链【NOI2001】| 洛谷 P2024 [NOI2001] 食物链
  • 通过 NAudio 控制电脑操作系统音量
  • 8638 直接插入排序
  • 9.7 打造你的专属智能助手:基于 GPT Builder 定制化 ChatGPT 应用全指南
  • 智能客服系统:结合 AI 模型与数据库实现对话与知识检索