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

【Linux-网络编程】

Linux-网络编程

  • ■ 网络结构
    • ■ C/S结构
    • ■ B/S结构
  • ■ 网络模型
    • ■ OSI七层模型
    • ■ TCP/IP四层模型
  • ■ TCP
    • ■ TCP通信流程
    • ■ TCP三次握手
    • ■ TCP四次挥手
  • ■ 套接字:socket = 主机IP + 主机上的进程(端口号)
  • ■ TCP传输文件

■ 网络结构

■ C/S结构

客户机-服务器(client-server)结构。服务器完成对数据的管理,客户机完成与用户的交互任
务。

■ B/S结构

B/S结构(浏览器、服务器模式)是web兴起后的一种网络结构模式,

■ 网络模型

■ OSI七层模型

在这里插入图片描述

属性描述
应用层:网络服务与最终用户的一个接口。这一层为用户的应用程序(例如电子邮件、文件传输和 终端仿真) 提供网络服务。
表示层:即带来格式化的表达和变换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层承担。
会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求。
传输层:定义了一些传输数据的协议和端口号。
主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这 一层数据叫做段。
传输层负责端到端的传输(源主机和目的主机)。
传输层可选择TCP或UDP协议
网络层:路由器 路由器需要将进来的数据包拆掉网络层和数据链路层两层首部并重新封装.
IP协议不保证传输的可能性,数据包在传输过程中可能丢失,可靠性在上层协议或应用程序中提供支持。
数据链路层:交换机
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。这一层的数据叫做比特。

■ TCP/IP四层模型

在这里插入图片描述

在这里插入图片描述

如果两台计算机在不同的网段中。那么数据从一台计算机到另一台计算机传输中要经过一个或多个路由器。
在这里插入图片描述

■ TCP

■ TCP通信流程

在这里插入图片描述

■ TCP三次握手

在这里插入图片描述
第一次握手:
    1.客户端将SYN标志位置为1
    2.生成一个随机的32位的序号seq=J ,这个序号后边是可以携带数据(数据的大小)
第二次握手:
    1.服务器端接收客户端的连接:ACK=1
    2.服务器会回发一个确认序号: ack=客户端的序号+数据长度(上图中假设传输数据为0,仅SYN占据了一个字节)+SYN/FIN(按一个字节算)
    3.服务器端会向客户端发起连接请求: SYN=1
    4.服务器会生成一个随机序号:seq =K
第三次握手:
    1.客户单应答服务器的连接请求:ACK=1
    2.客户端回复收到了服务器端的数据:ack=服务端的序号+数据长度+SYN/FIN(按一个字节算)

seq为序号,ack为确认序号。仅当SYN=1的时候,序号seq才有用。同理,仅当ACK=1的时候,确认序号ack才有用。

为什么是3次握手呢?
通过3次握手才能够确定客户端的发送数据、数据数据的功能正常。服务器端的接收数据和发送数据正常。2次握手显然无法证明,比如客户端端发送SYN连接请求,服务器端回应ACK报文并发送,那么只能证明客户端发送数据正常,接收数据的能力不能确定。4次握手也可以达到,但是3次就能搞定,多花费一次没有必要。并且在三次握手的过程中,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸。

■ TCP四次挥手

在这里插入图片描述

  1. 客户端发送FIN位表示关闭连接的请求
  2. 服务器应答客户端的关闭连接请求
  3. 服务器处理完缓冲区中的数据后(做出了相应的应答),向客户端发送FIN表示关闭连接
  4. 客户端应答服务器的关闭连接请求

■ 套接字:socket = 主机IP + 主机上的进程(端口号)

标识网络中的唯一一个进程
socket实际上是一个文件描述符,只不过文本描述符走的是io,而socket走的是网络;

■ TCP传输文件

  1. 先发送文件名,和文件大小,在发送文件内容,当接收到大小和文件一样大小一样就知道文件发送完成。
  2. 接收端为新建文件,在将内容追加到文件中, 就算文件发送完成。
http://www.lryc.cn/news/318990.html

相关文章:

  • win10虚拟机安装驱动教程
  • SpringBoot实战项目——博客笔记项目
  • 【海贼王的数据航海】排序——直接选择排序|堆排序
  • Flutter 的 switch 语句补遗
  • Linux动态库*.so函数名修改
  • adb shell 指令集
  • 【电子通识】CH340C与CH340G的区别
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的吸烟检测系统(深度学习+Python代码+PySide6界面+训练数据集)
  • Apache Paimon 使用之 Lookup Joins 解析
  • GO语言-切片底层探索(下)
  • 物理隔离条件下,如何安全高效地进行内外网文件导入导出?
  • 代码随想录 贪心算法-难度题目-区间问题
  • 地理数据 vs. 3D数据
  • Redis删除
  • 力扣细节题:字符串中的最大奇数
  • Unity PS5开发 天坑篇 之 申请开发者与硬件部署01
  • 十四届蓝桥杯省赛Java B组 合并区域
  • SpringBoot高级
  • 机试:偶数分解
  • 一周学会Django5 Python Web开发-Jinja3模版引擎-安装与配置
  • python前端开发
  • web学习笔记(三十三)
  • flask库
  • 专业无网设备如何远程运维?向日葵远程控制能源场景案例解析
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的稻田虫害检测系统详解(深度学习+Python代码+UI界面+训练数据集)
  • 实现upt下客户端用tftp文件传输协议编写客户端发送下载文件
  • 什么软件可以改ip地址
  • C#,文字排版的折行问题(Word-wrap problem)的算法与源代码
  • VUE+VScode+elementUI开发环境
  • 第十四届蓝桥杯省赛真题 Java A 组【原卷】