当前位置: 首页 > 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. 接收端为新建文件,在将内容追加到文件中, 就算文件发送完成。

相关文章:

  • 【漏洞复现】大华智慧园区综合管理平台SQL注入漏洞
  • 【vue baidu-map】实现百度地图展示基地,鼠标悬浮标注点展示详细信息
  • 配置vscode环境极简版(C/C++)(图文)
  • 在idea中配置tomcat服务器,部署一个项目(下载教程加链接)
  • KONG - API转发流程梳理
  • 深入探索Java并发编程:ArrayBlockingQueue详解
  • Python最常用的库
  • 从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型
  • C# RAM Stable Diffusion 提示词反推 Onnx Demo
  • 基于 Spark 的电商用户行为分析系统
  • AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤
  • 大语言模型(LLM)Token 概念
  • 如何配置Apache的反向代理
  • Linux动态库*.so函数名修改
  • 动态规划 Leetcode 377 组合总和IV
  • 【译】理解JavaScript:new 关键字
  • docker python 配置
  • ECS应用管理最佳实践
  • Git初体验
  • JavaScript函数式编程(一)
  • passportjs 源码分析
  • React的组件模式
  • Redis 懒删除(lazy free)简史
  • socket.io+express实现聊天室的思考(三)
  • Vim Clutch | 面向脚踏板编程……
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 初探 Vue 生命周期和钩子函数
  • 给初学者:JavaScript 中数组操作注意点
  • 全栈开发——Linux
  • 软件开发学习的5大技巧,你知道吗?
  • 用jquery写贪吃蛇
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (3)(3.5) 遥测无线电区域条例
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)JAVA使用POI操作excel
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (五)MySQL的备份及恢复
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • **python多态
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net 简单实现MD5
  • .netcore 获取appsettings
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /etc/sudoer文件配置简析
  • @ConfigurationProperties注解对数据的自动封装
  • @Documented注解的作用
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Android]竖直滑动选择器WheelView的实现
  • [Angular] 笔记 20:NgContent