| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Python 网络编程 TCP/UDP -> 正文阅读 |
|
[网络协议]Python 网络编程 TCP/UDP |
目录 网络编程1.网络编程基础知识1.1 什么是网络什么是网络 : 计算机网络功能主要包括实现资源共享,实现数据信息的快速传递。? 1.2 网络协议
什么是网络协议:在网络数据传输中,都遵循的执行规则。
网络协议实际上规定了每一层在完成自己的任务时应该遵循什么规范。
需要应用工程师做的工作 : 编写应用工功能,明确对方地址,选择传输服务
OSI 7层模型
?
好处
1.
建立了统一的通信标准
2.
降低开发难度,每层功能明确,各司其职
3.
七层模型实际规定了每一层的任务,该完成什么事情
TCP/IP模型
七层模型过于理想,结构细节太复杂
在工程中应用实践难度大
实际工作中以
TCP/IP
模型为工作标准流程
?
1.3?Linux Windows 命令行查看网络信息Linux: ifconfig windows: ipconfig 开/关网卡:sudo ifconfig ###(网卡名) up/down ? 1.4?IP地址1.4.1 概念:IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址即在网络中标识一台计算机的地址编号。
1.4.2 IP地址分类:
IPv4 : 192.168.1.5
IPv6 :fe80::80a:76cf:ab11:2d73
IPv4 特点
分为4个部分,每部分是一个整数,取值分为0-255
IPv6 特点(了解) ?
分为8个部分,每部分4个16进制数,如果出现连续的数字 0 则可以用 ::省略中间的0
公网IP和内网IP:
公网
IP
指的是连接到互联网上的公共
IP
地址,大家都可以访问。(将来进公司,公司会
申请公网
IP
作为网络项目的被访问地址)
内网
IP
指的是一个局域网络范围内由网络设备分配的
IP
地址。
TCP/IP协议 之IPV4与IPV6的区别;5G无线通信与4G的典型区别有哪些?_洋葱专栏-有灵魂的程序员-CSDN博客 1.5?端口?1.5.1 概念
端口:网络地址的一部分,在一台计算机上,每个网络程序对应一个端口
? 如果把IP地址比作一间房子 ,端口就是出入这间房子的门。 真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。 我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。 那么,主机是怎样区分不同的网络服务呢? 显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 需要注意的是,端口并不是一一对应的。 比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。 ?网络端口的作用及分类_TerryZjl的博客-CSDN博客_端口 1.6 服务器和客户端1.6.1 服务端(Server):服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据,处理客户端请求等。 1.6.2 客户端(Client) :也称为用户端,是指与服务端相对应,为客户提供一定应用功能的程序,我们平时使用的手机或者电脑上的程序基本都是客户端程序
?
2.传输方法2.1套接字简介
套接字(Socket) :
实现网络编程进行数据传输的一种技术手段
,
网络上各种各样的网络服务大多都
是基于
Socket
来完成通信的。
套接字
Socket=(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)?[4]
? 2.2 套接字类型1. 流套接字(SOCK_STREAM)流套接字用于提供面向连接、可靠的数据传输服务。 该服务将保证数据能够实现无差错、无重复送,并按顺序接收。 流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议? 数据报套接字提供一种无连接的服务。 该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。 数据报套接字使用UDP( User DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理 。 3. 原始套接字(SOCK_RAW)原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于: 原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。 因此,如果要访问其他协议发送的数据必须使用原始套接?。 2.3 UDP套接字编程2.3.1 UDP套接字特点
可能会出现数据丢失的情况
传输过程简单,实现容易
数据以数据包形式表达传输
数据传输效率较高
2.3.2 UDP套接字传输服务端客户端流程图? 2.3.3 UDP实现代码创建UDP套接字
绑定地址?
绑定地址
本地地址 :
'localhost' , '127.0.0.1'
网络地址 :
'172.40.91.185'
(通过
ifconfig
查看)
自动获取地址:
'0.0.0.0
?
消息收发
关闭套接字?
2.4??TCP 传输方法2.4.1?TCP传输特点
面向连接的传输服务
传输特征 : 提供了可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无
重复。
可靠性保障机制(都是操作系统网络服务自动帮应用完成的):
在通信前需要建立数据连接
确认应答机制
通信结束要正常断开连接
2.4.2 TCP套接字传输服务端客户端流程图? 三次握手(建立连接)
客户端向服务器发送消息报文请求连接
服务器收到请求后,回复报文确定可以连接
客户端收到回复,发送最终报文连接建立
?
四次挥手(断开连接)
主动方发送报文请求断开连接
被动方收到请求后,立即回复,表示准备断开
被动方准备就绪,再次发送报文表示可以断开
主动方收到确定,发送最终报文完成断开
?
?2.4.3?TCP服务端(实现代码)?? ?a.创建套接字
b.绑定地址 (与
udp
套接字相同)
c.设置监听
? d.处理客户端连接请求??
e.消息收发?
?f. 关闭套接字 (与udp套接字相同)
2.4.4?TCP客户端(实现代码)? 创建套接字
a.请求连接
b.收发消息
注意: 防止两端都阻塞,
recv send
要配合
c.关闭套接字
2.4.5?TCP套接字细节
tcp
连接中当一端退出,另一端如果阻塞在
recv
,此时
recv
会立即返回一个空字串。
tcp
连接中如果一端已经不存在,仍然试图通过
send
向其发送数据则会产生
BrokenPipeError
一个服务端可以同时连接多个客户端,也能够重复被连接
tcp粘包问题
产生原因
为了解决数据再传输过程中可能产生的速度不协调问题,操作系统设置了缓冲区
实际网络工作过程比较复杂,导致消息收发速度不一致 tcp以字节流方式 带来的影响 进行数据传输,在接收时不区分消息边界
如果每次发送内容是一个独立的含义,需要接收端独立解析此时粘包会有影响。
处理方法
人为的添加消息边界,用作消息之间的分割
控制发送的速度
2.5?TCP与UDP对比
传输特征
TCP
提供可靠的数据传输,但是
UDP
则不保证传输的可靠性
TCP
传输数据处理为字节流,而
UDP
处理为数据包形式
TCP
传输需要建立连接才能进行数据传,效率相对较低,
UDP
比较自由,无需连接,效率较
高
套接字编程区别
创建的套接字类型不同
tcp
套接字会有粘包,
udp
套接字有消息边界不会粘包
tcp
套接字依赖
listen accept
建立连接才能收发消息,
udp
套接字则不需要
tcp
套接字使用
send
,
recv
收发消息,
udp
套接字使用
sendto
,
recvfrom
使用场景
tcp:?
????????更适合对准确性要求高,传输数据较大的场景
文件传输:如下载电影,访问网页,上传照片
邮件收发
点对点数据传输:如点对点聊天,登录请求,远程访问,发红包
udp:?
????????
更适合对可靠性要求没有那么高,传输方式比较自由的场景
视频流的传输: 如直播,视频聊天
广播:如网络广播,群发消息
实时传输:如游戏画面
在一个大型的项目中,可能既涉及到
TCP
网络又有
UDP
网络
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:36:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |