Python课程-w73班
Louyj's Blog
Toggle navigation
Python课程-w73班
Home
班级课件
课堂代码
课后作业
学习资料
Archives
Tags
2022-05-08课件
2022-05-08 08:24:59
59
0
0
python-w73
#计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共 享。 今天计算机网络中的设备和计算机网络的用户已经多得不可计数,而计算机网络也可以称得上是一个“复杂巨系统”. #计算机网络发展史 1960s - 美国国防部ARPANET (阿帕网络(Advanced Research Project Agency Network))项目问世,奠定了分组交 换网络的基础。  1980s - 国际标准化组织(ISO)发布OSI/RM,奠定了网络技术标准化的基础。  1990s - 英国人蒂姆·伯纳斯-李发明了图形化的浏览器,浏览器的简单易用性使得计算机网络迅速被普及。 在没有浏览器的年代,上网是这样的。  有了浏览器以后,上网是这样的。  #TCP/IP模型 实现网络通信的基础是网络通信协议,这些协议通常是由互联网工程任务组 (IETF)制定的。 所谓“协议”就是通信计算机双方必须共同遵从的一组约定,例如怎样建立连接、怎样互相识别等,网络协议的三要素是:语 法、语义和时序。 构成我们今天使用的Internet的基础的是TCP/IP协议族,所谓协议族就是一系列的协议及其构成的通信模型,我们通常也把这套 东西称为TCP/IP模型。 与国际标准化组织发布的OSI/RM这个七层模型不同,TCP/IP是一个四层模型,也就是说,该模型将我们使用的网络从逻辑上分 解为四个层次,自底向上依次是:网络接口层、网络层、传输层和应用层,如下图所示。  IP通常被翻译为网际协议,它服务于网络层,主要实现了寻址和路由的功能。 接入网络的每一台主机都需要有自己的IP地址,IP地址就是主机在计算机网络上的身份标识  当然由于IPv4地址的匮乏,我们平常在家里、办公室以及其他可以接入网络的公共区域上网时获得的IP地址并不是全球唯一的IP 地址,而是一个局域网(LAN)中的内部IP地址,通过网络地址转换(NAT)服务我们也可以实现对网络的访问。  计算机网络上有大量的被我们称为“路由器”的网络中继设备,它们会存储转发我们发送到网络上的数据分组,让从源头发出的 数据最终能够找到传送到目的地通路,这项功能就是所谓的路由。 TCP全称传输控制协议,它是基于IP提供的寻址和路由服务而建立起来的负责实现端到端可靠传输的协议,之所以将TCP称为可 靠的传输协议是因为TCP向调用者承诺了三件事情: - 数据不传丢不传错(利用握手、校验和重传机制可以实现)。 - 流量控制(通过滑动窗口匹配数据发送者和接收者之间的传输速度) - 拥塞控制(通过RTT时间以及对滑动窗口的控制缓解网络拥堵)。 #网络通信 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了。 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通 信。 举个例子,当你使用浏览器访问百度时,你的计算机就和百度的某台服务器通过互联网连接起来了,然后,百度的服务器把网页 内容作为数据通过互联网传输到你的电脑上。 由于你的电脑上可能不止浏览器,还有QQ、微信、Dropbox、邮件客户端等,不同的程序连接的别的计算机也会不同,所以, 更确切地说,网络通信是两台计算机上的两个进程之间的通信。比如,浏览器进程和百度服务器上的某个Web服务进程在通 信,而QQ进程是和腾讯的某个服务器上的某个进程在通信。  进程间是如何进行识别呢? 端口号  如果一个程序需要收发网络数据,那么就需要有这样的端口. 端口是通过端口号来标记的,端口号只有整数,范围是从0到65535 #网络应用模式 C/S模式和B/S模式。 这里的C指的是Client(客户端),通常是一个需要安装到某个宿主操作系统上的应用程序; 而B指的是Browser(浏览器),它几乎是所有图形化操作系统都默认安装了的一个应用软件; 通过C或B都可以实现对S(服务器)的访问。 ##基于传输层协议的套接字编程(C/S模式) 套接字这个词对很多不了解网络编程的人来说显得非常晦涩和陌生,其实说得通俗点,套接字就是一套用C语言写成的应用程序 开发库,主要用于实现进程间通信和网络编程,在网络应用开发中被广泛使用。在Python中也可以基于套接字来使用传输层提 供的传输服务,并基于此开发自己的网络应用。实际开发中使用的套接字可以分为三类:流套接字(TCP套接字)、数据报套接 字和原始套接字。 ###TCP套接字 所谓TCP套接字就是使用TCP协议提供的传输服务来实现网络通信的编程接口。 在Python中可以通过创建socket对象并指定type属性为SOCK_STREAM来使用TCP套接字。 由于一台主机可能拥有多个IP地址,而且很有可能会配置多个不同的服务,所以作为服务器端的程序,需要在创建套接字对象后 将其绑定到指定的IP地址和端口上。这里的端口并不是物理设备而是对IP地址的扩展,用于区分不同的服务,例如我们通常将 HTTP服务跟80端口绑定,而https数据库服务默认绑定在443端口,这样当服务器收到用户请求时就可以根据端口号来确定到底 用户请求的是HTTP服务器还是数据库服务器提供的服务。端口的取值范围是0~65535,而1024以下的端口我们通常称之 为“著名端口”(留给像FTP、HTTP、SMTP等“著名服务”使用的端口,有的地方也称之为“周知端口”),自定义的服务通 常不使用这些端口,除非自定义的是HTTP或FTP这样的著名服务。 ###UDP套接字 传输层除了有可靠的传输协议TCP之外,还有一种非常轻便的传输协议叫做用户数据报协议,简称UDP TCP和UDP都是提供端到端传输服务的协议,二者的差别就如同打电话和发短信的区别,后者不对传输的可靠性和可达性做出任 何承诺从而避免了TCP中握手和重传的开销,所以在强调性能和而不是数据完整性的场景中(例如传输网络音视频数据),UDP 可能是更好的选择。可能大家会注意到一个现象,就是在观看网络视频时,有时会出现卡顿,有时会出现花屏,这无非就是部分 数据传丢或传错造成的。 在Python中也可以使用UDP套接字来创建网络应用. ##基于HTTP协议的网络资源访问(B/S模式) ###HTTP(超文本传输协议) HTTP是超文本传输协议(Hyper-Text Transfer Proctol)的简称. 超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,它是万维网数据通信的基础,设计HTTP最初的目 的是为了提供一种发布和接收HTML页面的方法,通过HTTP或者HTTPS(超文本传输安全协议)请求的资源由URI(统一资源 标识符)来标识。 简单的说,通过HTTP我们可以获取网络上的(基于字符的)资源,开发中经常会用到的网络API(有的地方也称之为网络数据 接口)就是基于HTTP来实现数据传输的。 ###requests库 requests是一个基于HTTP协议来使用网络的第三库,其官方网站有这样的一句介绍它的话:“Requests是唯一的一个非转基因 的Python HTTP库,人类可以安全享用。 简单的说,使用requests库可以非常方便的使用HTTP,避免安全缺陷、冗余代码以及“重复发明轮子”.
Pre:
2022-05-08课堂代码
Next:
2022-04-10课堂代码
0
likes
59
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.