Python学习日记(二十九) 网络编程

早期的计算机通信需要有一个中间件,A要给B传东西,A必须要把信息传给中间件,B再把从中间件中拿到信息

由于不同机器之间需要通信就产生了网络

软件开发的架构

1.C/S架构

服务器-客户机,即Client-Server架构,C/S架构通常采取两层结构.Sever负责数据的管理,Client负责完成与用户的交互任务

这里来说Client主要是某个应用软件的exe文件,程序要在安装后,才能运行在用户电脑上。

例如:QQ、微信、网易云音乐等

2.B/S架构

浏览器端-服务器,即Browser-Sever,B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件.这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用.客户机上只要安装一个Browser,服务器安装Oracle、SQL Sever等数据库.浏览器通过Web Sever同数据库进行数据交互,这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

例如:百度、知乎、豆瓣、博客园等

3.B/S架构和C/S架构之间的关系

B/S架构是C/S架构的一种

计算机网络的发展及基础网络概念

早期:联机

想要实现通信就必须要网卡和网线,每个网卡上都有一个全球唯一的MAC地址

MAC地址:英文名为Media Access Control Address,即媒体存取控制位址,也称为局域网地址(LAN Adress),MAC位址,以太网网址(Ethenet Address)或物理地址(Physical Address),它是用来确认网络设备位置的地址。

MAC地址的长度为48位(6个字节),通常表示12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前6位十六进制数00-16-EA代表网络硬件制造商的编号,后6位十六进制数AE-3C-40代表该制造商所制造的某个网络产品的系列号。每个MAC地址都如身份证号一样具有唯一性。

IP地址:Internet Protocol,全称互联网协议地址,常见分为IPv4和IPv6。IP地址是IP协议提供的一种统一的地址格式,它为互联网的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址的表示范围:0.0.0.0-255.255.255.255(四个点分十进制表示)

通常我们使用的都是IPv4的地址,如果使用IPv6的表示方式:0.0.0.0.0.0-255.255.255.255.255.255

以太网:局域网和交换机

交换机的出现解决了多台电脑之间的通信问题,网络拓扑就是将各个机器都通过网线连到交换机

广播:比如服务器4想找到服务器1,那么它就会通过向交换机让它告诉所有的服务器我要找服务器1,然后只有服务器1会回复我收到了信息

ARP协议:Address Resolution Protocol,即地址解析协议,它是根据IP地址去获取物理地址的一个TCP/IP协议。主机发送消息时将包含目标IP地址的ARP请求广播到局域网网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

广域网与路由器

路由器:Router,连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性网络设备。

网关:Gateway,即网间连接器、协议转换器。网关在网络层以上实现网络互联,是最复杂的网络互联设备,仅用两个高层协议不同的网络互联。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。

局域网:Local Area Network,局域网的覆盖范围一般是方圆几千里之内,其具备的安装便捷、成本节约、扩展方便等特点使其在各个办公室内运用广泛。局域网可以实现文件管理、应用软件共享、打印机共享等功能,在使用过程当中,通过维护局域网网络安全,能够有效地保护资料安全,保证局域网网络能够正常稳定的运行。

子网掩码:Subnet mask,即网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。

那如何判断两台机器它们是在同一个网段呢?

IP1:192.168.43.2

IP2:192.168.43.1

IP3:192.168.45.20

子网掩码:255.255.255.0

我们需要看子网掩码和IP地址,再将它们按位AND

IP1:   192.168. 43.2 = 11000000.10101000.00101011.00000010

子网掩码:255.255.255.0 = 11111111.11111111.11111111.00000000

按位AND运算结果:     11000000.10101000.00101011.00000000 ->192.168.43.0

IP2:   192.168. 43.1 = 11000000.10101000.00101011.00000001

子网掩码:255.255.255.0 = 11111111.11111111.11111111.00000000

按位AND运算结果:     11000000.10101000.00101011.00000001 ->192.168.43.0

IP3:   192.168.45.20 = 11000000.10101000.00101101.00010100

子网掩码:255.255.255.0 = 11111111.11111111.11111111.00000000

按位AND运算结果:     11000000.10101000.00101101.00000000 ->192.168.45.0

结果只看前三位十进制数,最后一位数不同没关系,所以IP1和IP2在同一网段,IP3和其他不属于同一个网段

IP协议的主要作用有两个,一个是为每台计算机分配IP地址,另一个是确定哪些地址在同一个自网络。

TCP协议和UDP协议

端口:Port,可以认为是设备与外界通讯交流的出口。端口可以分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器的端口,不可见,例如计算机中的80端口、21端口等。物理端口又称为接口,是可见端口,例如计算机背板的RJ45网口,交换机路由器集线器等RJ45端口,电话使用RJ11端口也属于物理端口的范畴。

通过端口来找到程序

在计算机上每一个需要网络的程序都会开一个端口,在同一时间只会有一个程序占用一个端口,不可能在同一时间有两个程序占用一个端口

端口的范围:0-65535(2^16-1),一般使用8000以后的端口

总结:如果有IP那么我就能确认唯一一台机器、如果有端口那么我就能确认唯一一个程序、如果我有IP和端口那么我就能找到唯一一台机器上的唯一一个程序

   内网IP地址:127.0.0.1(本地的回环地址),它不能提供对外服务

TCP协议

Transmisssion Control Protocol,即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。

当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

SYN:Synchronize Sequence Numbers,是TCP/IP建立连接时使用的握手信号。在客户机和服务机之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACN应答表示接收到了这个消息,最后客户机再以ACK消息回应。这样在客户机和服务机之间才能建立起可靠的TCP协议,数据才可以在客户机和服务机之间传递。

ACK:Acknowledge character,即确认字符,在数据通信中,接收站发给发送站的一种传输类控制符,表示发来的数据无误。在TCP/IP协议中,如果对方成功的接收到数据,那么会回复一个ACK数据。通常ACK有自己固定的格式,长度大小,由接收方回复给发射方。

三次握手过程

第一次握手:建立连接时,客户端发送syn包(syn = j)到服务器,并进入SYN_SENT状态,等待服务器确认

第二次握手:服务器收到syn包,必须确认客户的syn(ack = j + 1),同时自己也发送一个syn(seq = k),即syn + ack包,此时服务器进入SYN_RECV

第三次握手:客户端收到服务器的syn + ack包,向服务器发送确认包ack(ack = k +1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

完成三次握手,客户端与服务端开始传送数据

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

UDP协议

User Datagram Protocol,UDP为应用程序提供了一种无需建立连接就可以发送封装的IP数据报的方法。当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

QQ它的消息传输用的就是UDP协议

对比

TCP特点:面向连接、可靠传输、面向字节流、流量控制、阻塞控制

UDP特点:无连接、尽最大努力交付、面向报文

互联网协议和OSI模型

每层运行常见物理设备

每层运行常见的协议

两台机器间的传递模式

就是一个包快递->拆快递的过程

原文地址:https://www.cnblogs.com/Fantac/p/11518229.html

时间: 2024-10-13 02:37:53

Python学习日记(二十九) 网络编程的相关文章

python学习(二十九)类方法连接数据库及面向对象编程(2)

1.类方法连接数据库 先说一下析构函数 def __del__(self): pass 析构函数,在实例被销毁的时候执行,那么对于连接数据库,在实例执行后,需要关闭游标和数据库连接,这两个操作就可以放到析构函数里面 import pymysql class Mydb(object): def __del__(self): #析构函数,实例被销毁的时候执行的 self.cur.close() self.coon.close() print('over') def __init__(self,hos

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来

python学习之【16】网络编程

主题 客户端/服务器架构 套接字:通信终点 套接字地址 面向连接与无连接套接字 Python中的网络编程 SOCKET模块 套接字对象方法 TCP/IP客户端和服务器 UDP/IP客户端和服务器 SocketServer模块 Twisted框架介绍 相关模块 1.客户端服务器架构 客户<---->INTERNET<------->服务器.客户连上一个预先已知的服务器,提出自己的请求,发送必要的数据,然后就等待服务器返回的数据. 2.套接字:通信终点 套接字是一种具有"通信

python学习(二十六)网络编程

1.request方法 发送get请求 from urllib import request import json url='xxx/stu_info?stu_name=xiaohei' req=request.urlopen(url,)#打开一个url发送get请求 content=req.read().decode()#获取返回结果 res_dic=json.loads(content)#返回结果转成字典 if res_dic.get('error_code')==0: print('测试

Python学习日记(三十四) Mysql数据库篇 二

外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务的名字,很浪费空间;除此之外也能起到一个约束的作用. 像department就是外键. 执行代码: create table t1( uid bigint auto_increment primary key, name varchar(32), department_id int, gender

[傅里叶变换及其应用学习笔记] 二十九. 高维Ш函数修改版

一维Ш函数复习 我们前面(十六课,十七课)已经学习过一维的Ш函数,标准的Ш函数表现为无数个脉冲函数分布在整数点上, 我们定义Ш为 $Ш(x) = \displaystyle{ \sum_{k=-\infty}^{\infty}\delta(x-k) }$ 而Ш函数最为深刻的一个性质就是:Ш的傅里叶变换是它自身 $\mathcal{F}Ш=Ш$ 进一步推广到脉冲间隔为$p$的函数$Ш_p$ $\displaystyle{ Ш_p(x)=\sum_{k=-\infty}^{\infty}\delta

轻松学习JavaScript二十九:JavaScript中的this详解

这几天在看很多的JS的代码,多次出现this关键字,有时候表示不理解,就仔细看了这一方面的知识. 在JavaScript语言中,this的定义是:this是包含它的函数作为方法被调用时所属的对象.说明:这句话有点咬 嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它:1包含它的函数.2作为方法被调用时.3所 属的对象.随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那 个对象. this是Javascript语言的一个关键字,它代

Python学习笔记第十九周

目录: 一.路由系统URL 1.Django请求生命周期 2.创建Django project 3.配置 4.编写程序 二.视图 三.模板 四.ORM操作 内容: 一.URL 1.Django请求生命周期 URL对应关系(匹配)-> 视图函数 -> 返回用户字符串   URL对应关系(匹配)    -> 视图函数 -> 打开一个HTML文件,读取内容 2.创建Django project django-admin  startproject myproject cd  myproj