首页 > 编程语言 >网络编程

网络编程

时间:2023-07-03 17:24:22浏览次数:34  
标签:协议 计算机 编程 网络 IP地址 服务端 客户端

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

网络编程:

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

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

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

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

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

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

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

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

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

服务器需要具备的特征:

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

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

OSI七层协议

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

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

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

互联网通信协议:

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

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

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

数据链路层:专门用来做分组,分组之后的数据称为:数据帧(head(报头)+data(真实数据))

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

  data:最短46个字节

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

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

MAC地址: 每一个网卡都要有一个MAC地址,每块网卡出厂时都被烧制上一个世界唯一的,AC地址,长度为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系统:ipconfig

    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. 域名是需要去购买的,并且是需要备案的

应用层:(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服务器的配置文件中配置一些代码才能使用)

TCP协议和UDP协议

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

  TCP协议也叫可靠协议,流式协议(数据是可以分多次发送的)

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

     四次握手:为了断开连接

                                 

 面试题:

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

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

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

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

  UDP协议: 1. 不建立双向连接,也没有三次握手 2. 速度快

 

标签:协议,计算机,编程,网络,IP地址,服务端,客户端
From: https://www.cnblogs.com/Lucky-Hua/p/17523219.html

相关文章

  • 关于编程技巧-生产者消费者模式
    生产者消费者模式是一种常见的解耦设计模式,用于实现异步处理或任务队列。结合依赖注入(DependencyInjection)可以更好地解耦组件之间的依赖关系。在生产者消费者模式中,生产者负责生成消息或任务,并将其放入消息队列或任务队列中。消费者则从队列中获取消息或任务,并进行相应的处理。......
  • python基础35 网络编程 软件开发架构和七层协议
    软件开发架构网络编程我们要基于网络来编写一款B/S或者C/S架构的软件,比如:ATM,我们写的只是ATM的单机版本,没有接入网络系统,别人无法访问到的目的以ATM为例,现在我们想把之前写的ATM系统编程基于网络传输的,别人如果想用,就必须把客户端下载到本地电脑上,已登录为例,用户把用......
  • Unity3D高级编程主程手记 学习笔记四:用户界面
     用户界面(UI)是游戏项目中重要的组成部分。面对一个从零开始的项目,首先要选择选用哪个UI系统作为主框架。主流公司里最常用的UI系统有:NGUI,UGUI,除此之外还有部分公司使用FairyGUI,DoozyUI。UGUI的运行原理UGUI是在3D网格下构建起来的UI系统,它的每一个可显示元素都是通过3D......
  • Framebuffer 应用编程中涉及的 API 函数
    论  坛:http://bbs.100ask.net/(学术答疑)公 众 号:百问科技版本日期作者说明V12020韦东山摘自《嵌入式Linux应用开发完全手册》本节程序的目的是:打开LCD设备节点,获取分辨率等参数,映射Framebuffer,最后实现描点函数。5.2.1open函数在Ubuntu中执行“man2open”,可以看到o......
  • 嵌入式Linux配置网络
    交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)交流群二:QQ群:536785813(单片机-嵌入式)公 众 号:百问科技版本日期作者说明V12020韦东山技术文档2.2.4配置网络重点来了,以前我们在VMware中使用桥接,这需要保证Windows、Ubuntu、开发板三者互通,而很多人的电脑有多个网卡......
  • Linux系统驱动之编程_配置LCD控制器_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置LCD控制器_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULL......
  • Linux系统驱动之编程_配置引脚_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置引脚_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLRM.pd......
  • 网络常用配置和运维命令以及使用方法
    网络常用配置和运维命令以及使用方法原创 Hum0ro 虚拟化时代君 2023-06-2915:09 发表于缅甸收录于合集#网络3个#windows2个#命令1个#运维4个#linux3个哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。“  大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。......
  • 神经网络通过优化方法进行训练。然而,优化技术似乎不是深度学习中最重要的主题。为什么
    在深度学习中,神经网络通过优化方法进行训练,目的是最小化损失函数并获得最佳的模型参数。然而,优化技术在深度学习中并不是最重要的主题,主要原因如下:数据和模型的重要性:在深度学习中,数据的质量和数量以及模型的设计和复杂性对于模型的性能和泛化能力起着至关重要的作用。优化技术......
  • 【技术积累】编程技术项目报告【编号:网页01号】
    工程计划  这个项目旨在通过开发一份WEB开发项目,本项目旨在通过使用主流的Web开发技术,如SpringBoot、Mybatis、Vue和Mysql等,来提升开发者的技术水平并实践所学知识。项目目标熟悉并掌握SpringBoot框架,了解其在Web开发中的应用;掌握Mybatis作为ORM工具的使用,实现与数据库的......