【Linux-网络编程】

Linux-网络编程

  • [■ 网络结构](#■ 网络结构)
    • [■ C/S结构](#■ C/S结构)
    • [■ B/S结构](#■ B/S结构)
  • [■ 网络模型](#■ 网络模型)
    • [■ OSI七层模型](#■ OSI七层模型)
    • [■ TCP/IP四层模型](#■ TCP/IP四层模型)
  • [■ TCP](#■ TCP)
    • [■ TCP通信流程](#■ TCP通信流程)
    • [■ TCP三次握手](#■ TCP三次握手)
    • [■ TCP四次挥手](#■ TCP四次挥手)
  • [■ 套接字:socket = 主机IP + 主机上的进程(端口号)](#■ 套接字:socket = 主机IP + 主机上的进程(端口号))
  • [■ TCP传输文件](#■ 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. 接收端为新建文件,在将内容追加到文件中, 就算文件发送完成。
相关推荐
雪落漂泊6 分钟前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
俊俊几年的27 分钟前
动态规划(Dynamic Programming)详解:从入门到 LeetCode Hot 100
linux·c++·算法·leetcode·嵌入式·动态规划·c
星恒随风9 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
唐墨12314 小时前
linux kernel 比较数据大小的宏定义
linux·算法
程序开发阿元14 小时前
密码不进工具:一个独立开发者的服务器凭据管理办法
linux·ssh
AR-26710-17 小时前
Linux Day33——定时任务+lvm
linux·运维
墨痕诉清风18 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
byte轻骑兵18 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙
瓦瓦gogo19 小时前
从一个 TypeScript 函数开始理解 MCP 协议
linux·ubuntu·typescript
鱼听禅20 小时前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu