网络基础

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

当今的时代是一个网络的时代,网络无处不在。而我们前面学习编写的程序都是单机的,即不能和其他电脑上的程序进行通信。为了实现不同电脑之间的通信,就需要使用网络编程。下面,我们来了解一下网络相关的基础知识。

1  为什么要使用通信协议

计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容,这就好比一群人有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了,如图1所示。

图1  语言不通,无法交流

为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite)即通用协议标准出现了。Internet是由inter和net两个单词组合起来的,原意就是连接“网络”的网络,有了Internet,任何私有网络,只要支持这个协议,就可以接入互联网。

2  TCP/IP简介

因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议。

(1)IP协议

在通信时,通信双方必须知道对方的标识,好比发送快递必须知道对方的地址。互联网上每个计算机的唯一标识就是IP地址。IP地址实际上是一个32位整数(称为IPv4),它是以字符串表示的IP地址,如172.16.254.1,实际上是把32位整数按8位分组后的数字表示,目的是便于阅读,如图2所示。

图2  IPv4示例

IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,类似于将一个大包裹拆分成几个小包裹,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途经多个路由,但不保证都能到达,也不能保证顺序到达。

(2)TCP协议

TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过3次握手建立可靠连接,如图3所示。

图3  TCP的三次握手

然后需要对每个IP包进行编号,确保对方按顺序收到,如果包丢掉了,就自动重发。如图4所示。

图4  传输数据包

许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。一个TCP报文除了包含要传输的数据外,还包含源IP地址和目标IP地址、源端口和目标端口。

端口有什么作用?在两台计算机通信时,只发送IP地址是不够的,因为同一台计算机上运行着多个网络程序。一个TCP报文来了之后,到底是交给浏览器还是QQ,就需要端口号来区分。每个网络程序都向操作系统申请唯一的端口号,这样,两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号。

一个进程也可能同时与多个计算机建立链接,因此它会申请很多端口。端口号不是随意使用的,而是按照一定的规定进行分配。例如,80端口分配给HTTP服务,21端口分配给FTP服务。

3  UDP简介

相对TCP协议,UDP协议则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,数据无法保证一定到达。虽然用UDP传输数据不可靠,但它的优点是比TCP协议的速度快。对于不要求可靠到达的数据而言,就可以使用UDP协议。TCP协议和UDP协议的区别如图5所示。

图5  TCP协议和UDP协议的区别

4  Socket简介

为了让两个程序通过网络进行通信,二者均必须使用Socket套接字。Socket的英文原义是“孔”或“插座”,通常也称作“套接字”,用于描述IP地址和端口,它是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,如图6所示。在Internet上的主机上一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

图6  使用Socket实现通信

Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,有的提供110伏交流电,有的则提供有线电视节目。客户软件将插头插到不同编号的插座,就可以得到不同的服务。

在Python中使用socket 模块的 socket()函数就可以完成,语法格式如下:

s = socket.socket(AddressFamily, Type)

函数socket.socket创建一个socket,返回该socket的描述符,该函数带有两个参数:

l  Address Family:可以选择 AF_INET(用于Internet进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET。

l  Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)。

例如,为了创建 TCP/IP 套接字,可以用下面的方式调用socket.socket():

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

同样,为了创建 UDP/IP 套接字,需要执行以下语句:

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

创建完成后,生成一个socket对象,socket对象的主要方法如表1所示。

表1  socket对象的内置方法

函    数

描    述

s.bind()

绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址

s.listen()

开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了

s.accept()

被动接受TCP客户端连接(阻塞式),等待连接的到来

s.connect()

主动初始化TCP服务器连接,一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误

s.recv()

接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略

s.send()

发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小

s.sendall()

完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常

s.recvfrom()

接收UDP数据,与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址

s.sendto()

发送UDP数据,将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数

s.close()

关闭套接字

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁Flutter中的ProcessResult:让外部命令执行变得轻松

介绍 在我们的编程世界中,有时候我们需要与外部系统或者命令行交互。这就像在一场迷宫中寻找出口一样,我们需要向迷宫的门口询问正确的道路。而在 Flutter 中,这个问路的过程就是通过 ProcessResult 来实现的。 为什么要使用 ProcessResult…

Python 设计模式(第2版) -- 第三部分(行为型模式)

Python 设计模式(第2版) 再介绍下行为型设计模式。 行为型模式,顾名思义,它主要关注的是对象的责任。它们用来处理对象之间的交互,以实现更大的功能。行为型模式建议:对象之间应该能够彼此交互,同时还应该是松散耦合…

新火种AI|英伟达市值超越微软!AI技术如何重塑科技股价值?

作者:一号 编辑:美美 AI,正带着美股狂奔。 2024年,英伟达(NVIDIA)以其在人工智能(AI)领域的卓越表现,市值首次超越了科技巨头微软,成为全球市值最高的公司…

车载测试面试项目看这一套就够了!车载测试___自我讲解项目

面试官您好,我叫xx来自安微,今年xx岁,毕业于安微新华学院,我是从2017年开始接触软件测试行业,目前从事软件测试工作有5年多时间,第一家公司做了电商和进销存项目app和web都有做过,上家公司做了车…

014.修改chromium源码-修改webGL指纹(二)

修改chromium源码-修改webGL指纹(二) 一、webGL指纹是什么 之前介绍过webGL指纹和常见网站绕过webGL指纹,插眼传送 二、为啥有的webGL指纹-二期 上期我们通过修改gl的参数,getSupportedExtensions()函数返回值列表的顺序,绕过部分网站的指…

C语言变量、指针的内存关系

1. type p ? 表示从内存地址p开始,开辟一段内存,内存大小为类型type规定的字节数,然后把等号右边的值写入到这段内存中。 因此,这块内存起点位置是p,结束是ptype字节数-1。 2. type* p ?表示从内存地址p开始&…

Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决

问题描述 游戏暂停的功能是通过设置timeScale0实现的,不过在暂停游戏的时候,需要对角色进行预览和设置,为了实现这个功能,是通过鼠标控制相机的操作,为了使相机的操作丝滑,获取鼠标操作系数乘以Time.delta…

Opencv学习项目3——pytesseract

上一次我们使用pytesseract.image_to_data(img)来检测文本,这次我们来只检测数字 项目演示 可以看到,我们只检测了数字其他的并没有检测出来 代码实现 前面两次介绍了opencv的画矩形和设置文本,这次就直接用了,不太明白的可以看…

数据资产与用户体验优化:深入挖掘用户数据,精准分析用户需求与行为,优化产品与服务,提升用户体验与满意度,打造卓越的用户体验,赢得市场认可

一、引言 在数字化时代,数据已经成为企业最宝贵的资产之一。通过深入挖掘和分析用户数据,企业能够精准把握用户需求和行为,从而优化产品与服务,提升用户体验和满意度。这不仅有助于企业在激烈的市场竞争中脱颖而出,还…

Java基础 - 练习(四)打印九九乘法表

Java基础练习 打印九九乘法表&#xff0c;先上代码&#xff1a; public static void multiplicationTable() {for (int i 1; i < 9; i) {for (int j 1; j < i; j) {// \t 跳到下一个TAB位置System.out.print(j "" i "" i * j "\t"…

Linux 多进程情况下文件读写加锁

文件读取加锁: #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> #include <sys/file.h> #define LOCK_FILE "/root/priv/cjson/test.lock" #define DA…

在php中的序列化与反序列化

序列化与反序列化的定义&#xff1a; 序列化是指把对象转化为可传输的字节序列过程&#xff0c;而反序列化是指把字节序列还原为对象的过程。序列化和反序列化是数据持久化和网络传输中常用的技术手段&#xff0c;它们使得数据可以在不同平台、不同系统之间进行有效的存储和通信…

HTML 中怎样优化图像加载以提高网页性能?

优化图像加载可以提高网页性能&#xff0c;以下是一些常见的优化方法&#xff1a; 缩小图像尺寸&#xff1a;使用合适的图像尺寸可以减小文件大小&#xff0c;加快加载速度。可以使用图像编辑工具将图像调整到适合网页显示的尺寸。 压缩图像文件&#xff1a;使用图像压缩工具可…

戏剧之家杂志戏剧之家杂志社戏剧之家编辑部2024年第14期目录

文艺评论 南戏瓯剧跨文化传播研究 陈晓东;高阳;许赛梦; 3-7 论互联网时代的戏剧传播与批评——以西法大剧社和南山剧社为例 邬慧敏; 8-10 “左手荒诞&#xff0c;右手温情”——《西西弗神话》在戏剧《第七天》中的接受探究 赵稳稳; 11-13 戏剧研讨《戏剧之家》投稿…

[SAP ABAP] 数据类型

1.基本数据类型 示例1 默认定义的基本数据类型是CHAR数据类型 输出结果: 示例2 STRING数据类型用于存储任何长度可变的字符串 输出结果: 示例3 DATE数据类型用于存储日期信息&#xff0c;并且可以存储8位数字 输出结果: 提示Tips&#xff1a;日期和时间类型的变量可以直接进…

网络安全筑基篇——SQL注入

目录 前言 什么是SQL&#xff1f; 什么是SQL注入&#xff1f; SQL注入的危害有哪些&#xff1f; SQL注入有哪些类型&#xff1f; SQL注入的一些思路 首先得判断SQL注入是否存在 判断SQL注入点 判断数据库的一个类型 SQL注入的防范措施 前言 本文可能有些许的难以理解…

openh264 帧级码率控制源码分析

openh264 码率控制结构 关于 openh264 码率控制整体结构&#xff0c;可以参考&#xff1a;openh264 码率控制原理框架。 openh264 帧级码率控制介绍 函数关系图&#xff1a;从图可以看出&#xff0c;帧级码控的核心函数就是WelsRcPictureInitGom、WelsRcPictureInfoUpdateGo…

DAB-DETR

论文地址&#xff1a; https://arxiv.org/pdf/2201.12329 文章通过前人的经验得出&#xff0c;导致 DETR 训练速度慢的原因很大可能是因为 decoder 中 cross attention 这个模块&#xff0c;由上面的对比可以看出其与 self attention 的区别主要就在于query的不同。文章猜想两个…

LC15.三数之和、LC22括号生成

LC15.三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的…

【Python办公自动化之Word】

python办公⾃动化之-Word python-docx库 文章目录 python办公⾃动化之-Word1、安装python-docx库2、⽂档的结构说明3、基本操作语法3.1 打开⽂档3.2加⼊不同等级的标题3.3 添加⽂本3.4 设置字号插曲1&#xff1a;实战演示3.5 设置中⽂字体3.6 设置斜体3.7 设置粗体3.8⾸⾏缩进…