Python网络编程

软件开发架构


什么是软件开发架构

程序员在编写软件的时候应该遵循的架构设计,类似于我们写ATM和选课系统所采用的三层架构。

软件开发架构的分类

  1. C/S架构

    C:client(客户端)  客户端相当于是需要体验服务的客人
    S:server(服务端)  服务端相当于是对外提供服务的店面
    
    我们手机上的APP就是各大厂家生产的客户端,我们打开APP使用里面的功能,就相当于基于网络去到厂家的店里让服务员提供服务。
    
  2. B/S架构

    B:browser(浏览器)
    S:server(服务器)
    
    让浏览器充当各个厂家的客户端,用户无需对应下载相应客户端,直接在浏览器上使用功能体验服务。
    

两种架构的优缺点

C/S架构:

优势:针对客户端可以高度定制
劣势:需要用户去下载才能使用

B/S架构:

优势:无需下载 急速体验
劣势:无法做到高度定制,体验效果较差

目前的趋势其实更加偏向于B/S架构,像微信小程序,只需要下载一个微信就可以通过微信去访问很多服务端,统一提供接口服务,获取大量用户及数据,中途还可以提供广告服务等。

img

网络编程简介


什么是网络编程

网络编程的研究前提就是基于互联网,网络编程就是基于互联网编写代码。

该技术源于美国军方,军方想要实现不同计算机之间数据交互,除了带硬盘之类具有保存数据功能的硬件没有其他方法,为了跨区域交互数据所以发明了网络编程。

我们学习完网络编程之后有什么用呢?可以开发C/S架构的软件(掌握原理,使用框架)。

物理链接介质和互联网协议

早期远程通信的方法是座机电话,彼此之间打电话需要电话线,后来发展到了大屁股电脑,在电脑上实现远程通信也需要插入网线才能实现,现阶段可以利用智能手机实现远程通信,手机上数据交互则需要无限网卡。这说明远程通信的前提是必须具备一个物理链接介质。

那为什么不同厂家生成的手机零部件几乎是一样的呢?因为计算机或是手机要想实现无障碍交互 ,除了需要有物理链接介质之外还需要一套公有的标准---互联网协议(OSI七层协议),统一一些规定,就像历史秦始皇统一文字、货币、度量衡、车辙等,实现六国之间的交流沟通。

img

OSI七层协议


OSI七层协议简介

所有的计算机在生产过程中必须有相同的部分和相同的功能,主要分为七层,应用层,表示层,会话层,传输,网络层,数据链路层和物理链接层。也可以分为五层,1.应用层(三层),传输层,网络层,数据链路层和物理链接层。

OSI七层协议01

OSI七层的本质其实就是规定了数据要想基于网络发送出去,必须在计算机上经历一些固定的流程。

物理链接层

物理链接介质,传递电信号

数据链路层

基于物理链接层接收到一串二进制数。
1.规定了二进制数据的分组方式
2.规定了'以太网协议',但凡能够接入互联网的计算机都必须有一块网卡,每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号(由12位16进制数组成)---mac地址。

PS:基于mac地址就可以实现计算机之间的数据通信了!!!

网络知识补充

互联网是讲计算机彼此链接到一起的介质,可以实现基于互联网的数据交互,上网的本质就是基于网线去访问其他计算机上的资源,我们的计算机可以称之为服务器或服务端(专门对外提供服务)。

f8ea6077fac8bf49.png

专业设施名词

  1. 交换机
    让接入交互机的多台计算机之间彼此互联

    6f975a60563ae524.png

  2. 局域网
    由交换机组成的网络称之为局域网(一个区域)

0a8248238b0d9c9a.png

  1. 广播与单播
    广播:在交换机中群发
    单播:定向回复消息(记录mac地址)

  2. 路由器
    将局域网彼此链接起来并支持数据交互
    互联网其实可以看成是由多个局域网链接在一起

b935a1db55f30713.png

OSI七层协议02

网络层:IP协议

规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)

IP地址目前有两个版本。
IPV4:点分十进制
    最小:0.0.0.0
    最大:255.255.255.255
    随着社会的进步 计算机的使用越来越普遍 IPV4地址不够用
IPV6:十六进制
    IPV6可以表示出地球上每一粒沙子
    eg:fe80::4896:8940:85d6:70dc%18/64         
IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机。    

IP地址分为公网IP和私网IP,公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的,们所有人的电脑默认使用的都是私网IP,公网IP需要花钱购买并且需要实名认证并备案。

传输层:PORT协议(端口协议)

一台计算机上面可以运行很多数据交互软件,比如微信、qq、钉钉。它们都是从内存中获取数据,为什么不会错乱?因为端口协议的存在。

用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号),端口号的范围是:065535,01024:系统经常使用的端口号, 1024~8000:常用软件端口号。 我们以后在写项目的时候推荐使用8000之后的端口。

端口的特点:

1.同一时间同一台计算机上面端口号不能冲突。
2.端口号是动态分配的

由此我们可以知道,IP地址:用于标识全世界独一无二的一台接入互联网的计算机。PORT号:用于标识一台计算机上面的某一个应用程序。IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序。

img

应用层

这里完全可以取决于程序员自己,可以是HTTP协议,HTTPS协议,FTP协议或者自定义协议。

TCP与UDP协议

TCP和UDP都属于传输层。

TCP协议

TCP(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的字节流服务。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。也就是说,在收发数据前,必须和对方建立可靠的连接。TCP协议类似于打电话:你一句我一句。

基于TCP协议进行数据交互之前需要做一系列复杂的操作:三次握手四次挥手。三次握手就是TCP的链接过程,四次挥手就是TCP的断开过程。

洪水攻击:服务端接收到了大量的syn请求,处于rcvd状态,控制很多台计算机同一时刻去访问服务端,造成服务端瞬间过载瘫痪。

UDP协议

UDP(User Datagram Protocol,用户数据报协议)是不可靠的、不需要建立双下通道,数据传输效率高,但是可能会丢失。UDP协议类似于发短信:发了之后不管你看不看,只要发了就行。

UDP作为一种最简单的传输层协议,基本上没有做什么的操作来帮助用户处理复杂的网络环境,所以UDP保留下来这种不可靠的特性。qq使用的就是UDP协议,所以有时候会产生数据丢失现象。但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全。

img

面试题


问题: TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?

不对,描述的不够准确,TCP协议之所以比UDP协议可靠,是因为TCP协议发送消息有反馈机制。基于TCP发送的消息会在本地先保存该消息,确认对方收到然后接收反馈信息才会删除,否则在一定的时间内会频繁的多次发送直到对方确认或者超时为止。UDP协议发送数据之后会立刻删除内存数据,不会保留。
posted @ 2022-04-14 21:42  早安_1207  阅读(63)  评论(0)    收藏  举报
返回顶端