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

Python 网络编程之TCP详细讲解

【一】传输层

【1】概念

  • 传输层是OSI五层模型中的第四层,负责在网络中的两个端系统之间提供数据传输服务
  • 主要协议包括**TCP(传输控制协议)UDP(用户数据报协议)**

【2】功能

  • **端到端通信:**传输层负责在源和目标主机之间建立、维护和终止通信。
  • 分段和重组: 将上层应用层传递下来的数据进行分段,以适应网络的传输要求,并在目标主机上将这些分段重组成完整的消息。
  • 错误检测与纠正: 提供可靠的数据传输,通过序号、确认和重传等机制实现。

【3】协议

  • TCP(传输控制协议): 提供可靠、面向连接的服务。通过三次握手建立连接,使用序号和确认号来保证数据的可靠传输,还包括流量控制和拥塞控制等机制。
  • UDP(用户数据报协议): 提供无连接、不可靠的服务。适用于对实时性要求较高的应用,如音频和视频传输。UDP较轻量,但不提供数据的可靠性和顺序性。

【4】端口

  • 传输层使用端口来标识不同的应用程序。端口分为源端口和目标端口,用于区分同一主机上的不同应用和区分不同主机上的应用。
  • TCPUDP协议都使用端口号,共有65535个端口号,其中0到1023号为众所周知的端口号,用于标识一些常见的服务。

【二】TCP协议

【1】三次握手

(1)理解过程
  • 握手是为了建立连接,建立连接是建立通道的过程,连接应该是双向的,需要发送请求和同意请求,那么理论上来说至少需要四次沟通交流才能建立连接,那为什么说是三次握手呢?
  • 我们画图来说一说:

请添加图片描述

  • 四次握手过程:
    • time0时,客户端向服务端发送连接请求
    • time1时,服务端收到了客户端发来的连接请求,此时返回同意连接的信息
    • time2时,客户端收到了服务端的同意信息,那么此时客户端向服务端发送信息的通道建成
    • time3时,服务端又需要向客户端发送消息,但是向客户端发送信息的通道并没有建成,所以向客户端发送连接请求
    • time4时,客户端收到连接请求,向服务端发送了同意信息
    • time5时,服务端收到同意信息,那么此时服务端向客户端发送信息的通道建成,双方都可以互相发送消息
  • 网络传输需要时效性,这四次握手中是不是有个很明显的浪费时间过程,服务端同意连接的时候不是也可以发发送连接吗?所以三次握手来了
  • 三次握手过程:
    • time0时,客户端向服务端发送连接请求
    • time1时,服务端收到了客户端发来的连接请求,此时返回同意连接的信息(同意客户端可以向服务端发送信息),但是服务端也需要向客户端发送信息,所以跟着发送了向客户端连接的请求
    • time2时,客户端收到了服务端同意的信息,那么客户端向服务端发送消息的通道建立完成,还看到了服务端的连接请求,所以又向服务端发送了同意连接的信息
    • time3时,服务端收到了同意连接的信息,此时双方就可以互相发送信息了
(2)正式讲解

请添加图片描述

  • 特殊文字说明:

    • SYN表示同步请求,seq表示序列号
    • ACK表示确认通知,ack表示确认号
  • 三次握手的详细步骤

    • 第一次握手:
      • 客户端向服务端发送一个TCP报文,标志位设置为SYN,表示发送连接请求
      • 报文包含一个初始序列号(ISN),用于后续数据的序列化
    • 第二次握手:
      • 服务端接收到客户端的SYN报文后,回复一个TCP报文,标志位设置为SYN和ACK
      • 报文中包含服务端的初始序列号(ISN)和确认号(ACK),确认号是客户端的序列号加一
    • 第三次握手:
      • 客户端接收到服务端的SYN和ACK报文后,向服务端发送一个TCP报文,标志位设置为ACK
      • 报文中的确认号(ACK)设置为服务端的序列号加一,还有收到的确认号当作序列化返还回去
  • 为什么要三次握手

    • 第一次握手是客户端告诉服务端他想建立连接,同时告知自己的初始序列号
    • 第二次握手是服务端收到请求后同意建立连接,并提供自己的初始序列号
    • 第三次握手是客户端收到同意后再次确认,确保双方都正确同步了序列号,连接可以安全建立

【2】四次挥手

(1)理解过程
  • 挥手是断开连接的过程,那么正常来说也应该要有四次挥手,连接的过程中可以时间优化只需要三次即可,那么为什么说是四次挥手呢?
  • 因为在服务端收到要断开的请求时,可以先向客户端发送同意断开的信息,让客户端到服务端的信息通道先关闭;但是此时服务端向客户端发送信息的通道任然可能还有数据信息在传输,此时这个通道是不能关闭的,需要服务端完成向客户端发送的所有内容,才可以关闭这条通道
(2)正式讲解

请添加图片描述

  • 四次挥手详细步骤
    • 第一次挥手:
      • 客户端向服务端发送一个TCP报文,标志位设置为FIN,表示客户端不再发送数据
      • 客户端进入FIN_WAIT_1状态,等待服务端的确认
    • 第二次挥手:
      • 服务端收到客户端发来的FIN报文后,回复一个TCP报文,标志位设置为ACK,确认客户端的FIN
      • 服务端进入CLOSE_WAIT状态,表示接收到了关闭连接的请求
    • 第三次挥手:
      • 服务端向客户端发送一个TCP报文,标志位设置为FIN和ACK,表示服务端也不在发送数据
      • 服务端进入LAST_ACK状态,等待客户端的最后确认
    • 第四次挥手:
      • 客户端接收到服务端的FIN报文后,回复一个TCP报文,标志位设置为ACK,确认服务端的FIN
      • 客户端进入TIME_WAIT状态,等待可能可能出现的延迟报文

【三】UDP协议

  • UDP是一种无连接、简单、轻量级的传输层协议

  • TCP不同,UDP不提供连接的可靠性和流控制,而是专注于尽可能快速地传输数据

  • 适用场景:实时音频和视频传输、在线游戏等

相关文章:

Python 网络编程之TCP详细讲解

【一】传输层 【1】概念 传输层是OSI五层模型中的第四层,负责在网络中的两个端系统之间提供数据传输服务主要协议包括**TCP(传输控制协议)和UDP(用户数据报协议)** 【2】功能 **端到端通信:**传输层负责…...

直饮水系统服务认证:提升水质与安全的必要举

直饮水系统作为一种便捷、卫生的饮水方式,已经越来越受到人们的欢迎。然而,随着市场的发展,直饮水系统的质量和服务也面临着一些挑战。因此,直饮水系统服务认证应运而生,成为了提升水质与安全的必要举措。 一、直饮水…...

Qt 调试系统输出报警声以及添加资源

文章目录 前言一、方法1 使用 Qsound1.添加都文件 直接报错2.解决这个错误 添加 QT multimedia3. 加入代码又遇到新的错误小结 二、第二种方法1.引入库2.添加资源2.1依次点击Qt--->Qt Resource File--->Choose2.2给资源文件起个名字,如:res&#…...

Linux下文件的创建写入读取编程

在linux下操作一个文件,首先要保证文件的存在(不存在就创建),接着打开文件(打开成功)并得到文件描述符,接着在进行读写操作,最后还需要关闭文件。如果我们对文件进行读写之后不关闭文…...

python 解析

list(pd.DataFrame) # 所有列名切片:print("显式 切片:\n", df.loc[:, "number":"sum"]) 所有行,列是从number 到sum ,前闭后开print("隐式 切片:\n", df.iloc[:, 1:3]) # 结果和上面一样转化成字典…...

谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)

问题原因 Unity应用(target SDK 34)上线到GooglePlay,有用户反馈fold5设备上(Android14系统)疯狂闪退,经测试,在小米手机Android14系统的版本复现成功了,奇怪的是apk直接安装没问题,而打包成aa…...

34.在排序数组中查找元素的第一个和最后一个位置

34.在排序数组中查找元素的第一个和最后一个位置 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为…...

js树过滤

// 递归过滤得到每一项的hidden为false的数据 function filterTree(arr) { return arr.filter(item > { if (item.children) { item.children filterTree(item.children) } if (!item.hidden) { return true } }) }...

Java多线程并发篇----第十六篇

系列文章目录 文章目录 系列文章目录前言一、线程等待(wait)二、线程睡眠(sleep)三、线程让步(yield)四、线程中断(interrupt)五、Join 等待其他线程终止前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…...

测评结果:免费的“文心一言3.5”香,但是付费的产品质量更高

文章目录 前言一、文心一言3.5生成的图片和文章1.文心一言生成的图片在文心一言3.5中输入以下内容:我的测评结果: 2.文心一言生成的文章在文心一言3.5中输入以下内容:我的测评结果: 二、ChatGPT生成的图片和文章1.ChatGPT4.0 生成…...

Matlab GUI设计基础范例(可以一步一步跟着做)

我们要做一个GUI界面,可以选择peaks、membrane和sinc三种三维图数据,选择画出surf、mesh和contour三种图像。 打开GUI 每个版本打开方式可能都不一样,但有一个是相同的,就是在命令行输入guide回车。 绘制控件 大概就绘制成这样…...

@Transactional(rollbackFor = {Exception.class})与 @Transactional区别

在Spring框架中,Transactional 注解用于标记方法或类,以表明该方法或类内包含的数据库操作应当在一个事务中执行。事务的基本原则是“原子性”,即所有操作要么全部成功,要么全部失败。 1. Transactional(不指定 rollb…...

数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q

目录 二叉树的定义: *特殊的二叉树: 二叉树的性质: 二叉树的声明: 二叉树的先序遍历: 二叉树的中序遍历: 二叉树的后序遍历: 二叉树的层序遍历: 二叉树的节点个数: 二叉…...

如何快速打造属于自己的接口自动化测试框架

1 接口测试 接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。 接口自动化相对于UI自动化来说,属于更底层的测试,这样带来的好处就是测试收益更大&#xff…...

人工智能在数据安全中的应用场景

场景一:数据资产梳理 数据资产梳理是数据安全的基础。知道企业究竟有多少数据,这些数据在哪里?有哪些类型的数据?其中哪些是敏感数据?这些数据的敏感等级分别是什么?只有明确了保护的目标,才能…...

2024.1.16每日一题

LeetCode 2719.统计整数数目 2719. 统计整数数目 - 力扣(LeetCode) 题目描述 给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件,我们称它是一个好整数: num1 &l…...

python入门,数据容器的通用操作(len,max,min,sorted)

1.len统计容器内元素个数 2.max统计元素最大元素 3.min统计元素最小元素 4.容器的转化功能 list(容器)将给定容器转化为列表 字符串转列表将字符串内的每一个元素都取了出来作为列表的每一个元素 字典则只会取出它的key,value会消失 str&…...

运筹说 第67期 | 动态规划模型的建立与求解

通过前一期的学习,我们已经学会了动态规划的基本概念和基本原理。本期小编带大家学习动态规划模型的建立与求解。 动态规划模型的建立 一 概述 建立动态规划的模型,就是分析问题并建立问题的动态规划基本方程。 成功地应用动态规划方法的关键&#x…...

大模型压缩与优化的技术原理与创新方法

目录 前言1 模型压缩简介2 知识蒸馏3 模型剪枝3.1 结构化剪枝3.2 非结构化剪枝 4 模型量化4.1 浮点表示 vs 定点表示4.2 位数选择与性能影响4.3 量化技术 5 其他模型压缩方法5.1 Weight Sharing: 参数共享5.2 Low-rank Approximation: 低秩分解5.3 Architecture Search: 神经网…...

ConcurrentSkipListMap 深度解析

ConcurrentSkipListMap是Java集合框架中的一员,它实现了ConcurrentNavigableMap接口,基于跳表(Skip List)实现,并提供了高效的并发控制。在本文中,我们将深入研究ConcurrentSkipListMap的底层实现原理、适用…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...