Python 网络编程之TCP详细讲解
【一】传输层
【1】概念
- 传输层是
OSI五层模型中的第四层,负责在网络中的两个端系统之间提供数据传输服务 - 主要协议包括**
TCP(传输控制协议)和UDP(用户数据报协议)**
【2】功能
- **端到端通信:**传输层负责在源和目标主机之间建立、维护和终止通信。
- 分段和重组: 将上层应用层传递下来的数据进行分段,以适应网络的传输要求,并在目标主机上将这些分段重组成完整的消息。
- 错误检测与纠正: 提供可靠的数据传输,通过序号、确认和重传等机制实现。
【3】协议
TCP(传输控制协议): 提供可靠、面向连接的服务。通过三次握手建立连接,使用序号和确认号来保证数据的可靠传输,还包括流量控制和拥塞控制等机制。UDP(用户数据报协议): 提供无连接、不可靠的服务。适用于对实时性要求较高的应用,如音频和视频传输。UDP较轻量,但不提供数据的可靠性和顺序性。
【4】端口
- 传输层使用端口来标识不同的应用程序。端口分为源端口和目标端口,用于区分同一主机上的不同应用和区分不同主机上的应用。
TCP和UDP协议都使用端口号,共有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报文后,回复一个TCP报文,标志位设置为SYN和
- 第三次握手:
- 客户端接收到服务端的SYN和
ACK报文后,向服务端发送一个TCP报文,标志位设置为ACK - 报文中的确认号(
ACK)设置为服务端的序列号加一,还有收到的确认号当作序列化返还回去
- 客户端接收到服务端的SYN和
- 第一次握手:
-
为什么要三次握手
- 第一次握手是客户端告诉服务端他想建立连接,同时告知自己的初始序列号
- 第二次握手是服务端收到请求后同意建立连接,并提供自己的初始序列号
- 第三次握手是客户端收到同意后再次确认,确保双方都正确同步了序列号,连接可以安全建立
【2】四次挥手
(1)理解过程
- 挥手是断开连接的过程,那么正常来说也应该要有四次挥手,连接的过程中可以时间优化只需要三次即可,那么为什么说是四次挥手呢?
- 因为在服务端收到要断开的请求时,可以先向客户端发送同意断开的信息,让客户端到服务端的信息通道先关闭;但是此时服务端向客户端发送信息的通道任然可能还有数据信息在传输,此时这个通道是不能关闭的,需要服务端完成向客户端发送的所有内容,才可以关闭这条通道
(2)正式讲解

- 四次挥手详细步骤
- 第一次挥手:
- 客户端向服务端发送一个
TCP报文,标志位设置为FIN,表示客户端不再发送数据 - 客户端进入
FIN_WAIT_1状态,等待服务端的确认
- 客户端向服务端发送一个
- 第二次挥手:
- 服务端收到客户端发来的FIN报文后,回复一个
TCP报文,标志位设置为ACK,确认客户端的FIN - 服务端进入
CLOSE_WAIT状态,表示接收到了关闭连接的请求
- 服务端收到客户端发来的FIN报文后,回复一个
- 第三次挥手:
- 服务端向客户端发送一个
TCP报文,标志位设置为FIN和ACK,表示服务端也不在发送数据 - 服务端进入
LAST_ACK状态,等待客户端的最后确认
- 服务端向客户端发送一个
- 第四次挥手:
- 客户端接收到服务端的FIN报文后,回复一个
TCP报文,标志位设置为ACK,确认服务端的FIN - 客户端进入
TIME_WAIT状态,等待可能可能出现的延迟报文
- 客户端接收到服务端的FIN报文后,回复一个
- 第一次挥手:
【三】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自动化来说,属于更底层的测试,这样带来的好处就是测试收益更大ÿ…...
人工智能在数据安全中的应用场景
场景一:数据资产梳理 数据资产梳理是数据安全的基础。知道企业究竟有多少数据,这些数据在哪里?有哪些类型的数据?其中哪些是敏感数据?这些数据的敏感等级分别是什么?只有明确了保护的目标,才能…...
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的底层实现原理、适用…...
深入解析Gofile下载器:3倍效率提升的Python多线程下载方案
深入解析Gofile下载器:3倍效率提升的Python多线程下载方案 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 在文件传输领域,Gofile作为流行的文件共享…...
Kubernetes性能优化指南:提升集群运行效率
Kubernetes性能优化指南:提升集群运行效率 引言 在生产环境中,Kubernetes集群的性能优化是一个持续的过程。通过优化,可以提高资源利用率、减少响应时间、提升用户体验。 今天就来分享一下Kubernetes性能优化的经验和方法。 资源优化 Pod资源…...
如何构建企业级自动化预约系统:架构设计与工程实践
如何构建企业级自动化预约系统:架构设计与工程实践 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法) 项目地址: https://git…...
倒计时36个月:欧盟《AI搜索透明度法案》草案曝光,所有商用AI搜索引擎必须通过可解释性审计——附合规自查清单v2.1
更多请点击: https://kaifayun.com 第一章:倒计时36个月:欧盟《AI搜索透明度法案》草案的战略影响 距离欧盟《AI搜索透明度法案》(AI Search Transparency Act, AISTA)草案正式生效仅剩36个月,该立法已进入…...
如何利用Taotoken的多模型聚合能力为Agent应用选择最佳模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何利用Taotoken的多模型聚合能力为Agent应用选择最佳模型 应用场景类,假设你正在开发一个智能Agent应用,…...
Win11蓝屏修复了?实测UHUB V5.15到V5.16版本升级,虚拟摄像头设置避坑指南
Win11蓝屏修复实测:UHUB V5.15到V5.16版本升级全攻略与虚拟摄像头深度优化最近在调试一套无人直播系统时,发现不少同行还在被Win11蓝屏问题困扰。作为从XCMS时代就开始使用这套工具的老用户,我完整经历了从音视频不同步到驱动框架彻底重构的技…...
审核延迟超800ms?吞吐暴跌63%?DeepSeek本地化审核引擎调优指南,7步压测达标金融级SLA
更多请点击: https://kaifayun.com 第一章:DeepSeek输出内容审核的金融级SLA挑战与现状剖析 在金融行业,模型输出内容的准确性、合规性与可追溯性并非附加要求,而是服务可用性的核心组成部分。DeepSeek系列大模型在面向银行、券商…...
天际模组编排师:用LOOT主列表告别游戏崩溃的智能解决方案
天际模组编排师:用LOOT主列表告别游戏崩溃的智能解决方案 【免费下载链接】skyrimse The TES V: Skyrim Special Edition masterlist. 项目地址: https://gitcode.com/gh_mirrors/sk/skyrimse 你是否曾因《上古卷轴V:天际 特别版》模组冲突而烦恼…...
免费获取Grammarly高级版Cookie:5分钟开启专业写作体验 ✨
免费获取Grammarly高级版Cookie:5分钟开启专业写作体验 ✨ 【免费下载链接】autosearch-grammarly-premium-cookie 免费白嫖使用Grammarly Premium高级版 项目地址: https://gitcode.com/gh_mirrors/au/autosearch-grammarly-premium-cookie 还在为Grammarly…...
如何用.NET Windows Desktop Runtime彻底解决Windows桌面应用部署难题?终极指南来了!
如何用.NET Windows Desktop Runtime彻底解决Windows桌面应用部署难题?终极指南来了! 【免费下载链接】windowsdesktop 项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop 想象一下这样的场景:你花费数月精心开发的Window…...
