网络编程

网络架构(B/S架构、C/S架构)

网络编程:

  要基于网络来编写一款B/S或C/S架构的软件。 比如之前所写的ATM都是单机版本的,没有接入网络的系统,别人无法访问到。

  目的:将系统编程基于网络传输的,别人想要使用,必须先将客户端下载到本地电脑上。以登录为例,用户把用户名和密码传到服务端进行用户名和密码的验证,这就是一款基于网络开发出来的软件。

C/S架构:客户端(client) ----------网络传输----------  服务端(server)

    客户端类似于用户,服务端类似于饭店中的工作人员

  针对一款软件来说,客户端是可以有多个的,但是服务端只能有一个。

  除了服务端之外的都可以称为客户端,客户端可能是:一个网站、一个应用程序、python程序、Javai程序。

B/S架构:浏览器(browser)----------网络传输----------  服务端(server)

    浏览器类似于用户,服务端类似于饭店中的工作人员

    浏览器也是客户端,只不是是万能客户端。

由来:客户端和服务端存在的问题:当下载大量的软件的时候,会占用电脑的大量资源,时间久了,电脑就会受到影响。用户想要使用软件就必须下载,而每次下载的成本很高。

  本质上B/S架构也是C/S架构。目前我们所用的软件是两者兼有的

服务器需要具备的特征:

  1. 24小时不间断对外提供服务

  2. 每一个服务端要有一个公网IP(服务器:理解成是另外一台计算机而已,是需要去买的,阿里云、腾讯云之类的)

OSI七层协议(重要)

网络: 网络存在的意义就是跑地域数据传输称之为通信。本质其实就是:上传和下载的过程。

网络的组成部分:物理连接设备(网线、交换机、路由器等)+ 互联网通信协议

“最开始世界上的计算机是不能互相通信的,只有在局域网中通信,后来,随着技术的发展,世界范围的计算机开始通信了,通过网络来通信,这就是所说的互联网。”

互联网通信协议:

  OSI的七层协议:物理层、数据链路层、网络层、传输层、 会话层、表示层、应用层

  五层协议:物理层、数据链路层、网络层、传输层、应用层(会话层、表示层、应用层)

物理层: 发送高低电频信号:01010101111001010(不能做分组)

  单纯的发送电信号是没有意义的,需要进行分组,来表示不同的意思。

数据链路层:专门用来做分组,负责把电信号进行分组,分组之后的数据称为:数据帧(head(报头)+data(真实数据))

  head部分:发送者/源地址:6字节,接受者/目标地址:6字节,数据类型:6字节

  data:最短46个字节

  数据报:head长度+data长度(最短64字节)

该层使用的是以太网协议,以太网协议规定,任何接入互联网的计算机都应该有一个网卡,默认的就叫以太网。

MAC地址: 每一个网卡都要有一个MAC地址,每块网卡出厂时都被烧制上一个世界唯一的MAC地址,长度为48为二进制 ,通常由12位的十六进制数表示。

MAC地址可以确定局域网中唯一一台计算机。

网络层:该层使用IP协议 ,数据称为数据包

  IP协议:规定接入互联网的计算机都必须要有一个IP地址,该层的数据称之为是数据包。IP地址分类:IPv4、IPv6 

  IP地址:可以确定世界范围内任意一个的局域网。

  IP地址的组成:

    IPv4地址的格式: 0.0.0.0 --------------------------- 255.255.255.255

  对应的二进制:

    00000000.00000000.00000000.00000000 --------------------------- 11111111.11111111.11111111.11111111

  如何查看自己电脑的IP地址:

    Windows系统:终端(cmd)-----> ipconfig -----> ipv4

    Linux(macOS):ifconfig

  1. 公网IP:固定的,不变的,需要购买的(服务器),阿里云、腾讯云、百度云等,172.12.1.101

  2. 内网IP:会变的

  子网掩码:IP + 子网掩码

IP地址 + MAC地址()可以确定世界范围内唯一一台计算机。

一个单纯的IP地址是不能够确定世界范围内的唯一一台计算机。但是有一个ARP协议,它能够通过IP地址计算出计算机的MAC地址。

本地回环地址:127.0.0.1(要记住!!!)

传输层:使用TCP协议和UDP协议,也称为端口协议 ,数据称为:数据段

  基于TCP协议通信之前:必须先建立一个双向通信的连接

  端口:0 —  65535(一个端口表示一台计算机中正在运行的应用程序)

    1. 0 —1024 之间的端口号一般都是由系统使用的,尽量不要使用。

    2. 1025 — 8000 之间的端口:一般是常用软件的端口号。MySQL的默认端口:3306,Django的默认端口号:8000

    3. 自己开发的软件尽量使用8000之后的端口

  常用软件的端口号:

  DNS:域名解析

  例如:baidu.com ,域名的本质其实就是IP地址,域名最终还是要解析成对应的IP地址,才能找到IP地址对应的计算机。
      

                    

 文件的后缀名是给我们看的,文件可以有后缀名也可以没有,Linux中,一切皆文件.
    1. 先从你自己电脑的host文件中查找的
    2. 如果hosts文件没有找到对应的关系, 在去对应平台的关系中去找
    3. 域名是需要去购买的,并且是需要备案的

TCP协议和UDP协议

  TCP协议的三次握手和四次挥手

  TCP协议也叫可靠协议(发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清理干净),流式协议(数据是可以分多次发送的)

  三次握手:为了建立连接 (TCP协议的反馈机制,保证了数据的安全)

     四次挥手:为了断开连接,断开连接时,由于链接内可能有数据传输,所以必须四次断开。

                                  

 面试题:

  为什么建立连接的时候是三次握手,断开连接是四次挥手呢?

   建立连接的时候,服务器处于LISTEN状态下,收到了建立连接请求的SYN报文后,将ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器受到对方的FIN报文时,仅仅表示对方不再发送数据了,但是还可以接收数据,而自己也未必将全部数据都发给对方了,所以服务端可以立即关闭,也可以发送一些数据给对方后,在发送FIN报文给对方来表示同意现在关闭连接。因此,服务端ACK和FIN一般都会分开发送,从而导致多了一次。

  客户端与服务端之间一定是客户端先向服务端发起请求,而不能返回来

  特殊情况:服务端可以主动向客户端发起请求 websocket协议,一般用在即时通信软件中

  UDP协议: 1. 不建立双向连接,发送数据的时候直接发,不管对方有没有接收到数据。 2. 速度快

  TCP协议:速度快、数据安全(反馈机制、双向通道)

  远程控制软件: 使用的是UDP协议

 

应用层:(Application),才是跟我们程序员离的最近的一层。

  1. 客户端:想用什么协议就用什么协议,客户端是我们自己开发的。

  2. 浏览器:就要按照浏览器的协议(HTTP协议)

  3. HTTP协议、HTTPS协议

    网址:https://www.baidu.com/?tn=49055317_42_hao_pg

    协议://域名:端口/v1/v2?参数

   http特征:不安全、通过HTTP协议的数据都是明文传输的

   https特征:安全、通过HTTPS协议的数据都是密文传输的

   https = http + ssl证书(要去机构申请,需要在NGINX服务器的配置文件中配置一些代码才能使用)

 

posted @ 2023-07-03 17:08  Maverick-Lucky  阅读(38)  评论(0)    收藏  举报