网络编程-软件开发架构 OSI七层协议 以太网协议 IP 端口 TCP UDP

 

 

网络编程前言

计算机,由硬件 操作系统,应用程序组成,有了这三个元素,就可以在自己的电脑上运行一些应用程序了,比如玩玩纸牌,扫扫雷什么的

如果要想与其他计算机一起玩,就必须要让你的计算机和其他计算机能够互相传递数据

 

学习网络编程就是要学习利用网络来与另一台计算机相互传输数据, 开发出支持网络通讯的应用程序,这样即使足不出户也能尽知天下事

 

软件开发架构

1.  c/s架构 (client  /  server)

c:客户端
s:服务端

 

 

1.1应用领域:

  • QQ
  • 大型网络游戏

计算机发展初期用户去取数据,直接就去主机拿,从这里开始就分出了客户端和服务端。

客户端:用户安装的软件;

服务端:统一管理数据库的主机中的软件就叫做服务端,再后来服务端不只是管理数据,外加处理业务逻辑。

1.2 CS架构要求

 

  1. 用户操作系统安装客户端;产商操作系统部署服务端
  2. 每个用户需要独立安装软件、服务端升级也要每个用户升级

1.3 面试题:数据放在服务端和客户端的利与弊?


答:

    • 服务端统一处理有更好的安全性和稳定性而且升级比较容易,不过服务器负担就增加了。
    • 客户端将负担分配到每个用户,从而可以节约服务器资源,安全性和稳定性可能会有一定的问题,但是升级比较麻烦,每个安装的客户端程序都需要升级,另外为了节省网络资源,通过网络传输的数据应该尽量减少!

2.b/s架构(browser  /  server)

b:浏览器
s:服务器

 

应用领域:

  • 淘宝
  • 京东

统一客户端即默认安装用户电脑中的浏览器,访问同种类的网站,具体业务的处理根据相应协议和标准提供通用的服务器程序,在不同的服务器处理。

 3.两种架构比较

 

bs架构本质也是cs架构

手机端看上去cs架构比较火,实际上bs已经在崛起
微信支付宝都在做一件事:统一接口
手机端之后肯定也是bs比较火

学习网络编程 就可以开发一个cs架构的软件
并发 数据库 前端 django 就可以开发一个bs架构的软件

通讯协议

什么是协议?

协议就是标准,大家要遵循相同的标准才能正常交流通讯

两个人要交流,必须说双方都能理解的语言,想象一下一个说新疆话的人打电话给说闽南语的人,基本说了等于没说 双方都能理解的语言就是,就是标准,就是协议

为什么要制定协议?

在计算机中,链接介质 通常是网线,网线本质就是一条电线,可以传播电流,而电流可以按照强弱,被理解为0和1

那问题是,一台计算机被电了一下是什么意思?被电了两下又是什么意思? 这就必须由发送方和接收方共同商定出一套标准,从而可以知道0和1表示的含义

如何使用协议?

然而作为应用程序开发者,物理介质显然不是我们需要关心的,比如如何牵网线

所以通讯协议是我们学习的重点

 OSI网络通讯协议

Open System Interconnection Reference Model,开放式系统互联通信参考模型,缩写为OSI,是由国际标准组织推出的,其实就是一大堆协议,OSI把整个通讯过程划分为七层,简称OSI七层模型

实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。

每一层都运行不同的协议。协议是干什么的,协议就是标准。

实际上还有人把它划成五层、四层。

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

五层划分为:应用层、传输层、网络层、数据链路层、物理层。

四层划分为:应用层、传输层、网络层、网络接口层。

 

一、物理层

物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

二、数据链路层

 

以太网协议(局域网通讯):

                1.规定了二进制数据的分组依据
                2.规定了每台计算机都必须有一块网卡
                1+2=以太网协议

2.1 分组

数据链路层的由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

 

以太网协议(Ethernet)工作在数据链路层,其规定了电信号分组方式,以及一组电信号应该包含哪些内容

规定如下:

1.一组电信号构成一个数据包,叫做‘帧’
2.每一数据帧分成:报头head和数据data两部分

head包含:(固定18个字节)

  • 发送者/源地址,6个字节
  • 接收者/目标地址,6个字节
  • 数据类型(标签+以太类型),6个字节

data包含:(最短46字节,最长1500字节)

  • 数据包的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送


2.2 MAC 地址

规定了任何一台接入互联网的计算机都必须有一块网卡
  每一块网卡上面都刻有世界上独一无二的编号
    12位16进制数
      前6位是厂商编号
      后6位是流水线编号
      我们管这12数叫mac地址

 

 

 

2.4 基于以太网协议通信

基于以太网协议通信
          通信基本靠吼
          广播
          单播
          广播风暴

交换机:
    让局域网下连接了交换机的计算机实现彼此之间互联

局域网:
    构成互联网的基本单位
ps:以太网协议不能跨局域网传输

广播:

有了mac地址,同一网络内的两台主机就可以通信了

ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

交换机不仅负责让网络中的计算机能够互相通信,还要优化网络传输,

如何优化广播风暴呢?

当pc1想要与pc2通讯前

1.需要知道pc2的MAC地址,所以必须先将这个信息广播给所有的计算机,

2.这个信息必须先交给交换机,再由交换机广播出去,

3.pc2收到消息消息后发现目标MAC是自己,就回复数据给发送方,

4.而回复也必须先交给交换机,此时交换机就会记录pc2的MAC地址与网口号的对应关系存到自己的缓存中,

5.下一次在要给pc2发数据时从缓存中查找pc2的MAC地址,

6.如果找到了就直接单独给pc2发送,不在需要广播,

7.如果没有则重复之前的广播过程

这一优化功能称之为自动学习功能

 

 

 

三、网络层

3.1 网络层由来:

有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了

3.2 以太网通讯存在的问题:

世界范围的互联网是由一个个彼此隔离的小的局域网组成的,如果所有的计算机都采用以太网的广播方式来寻找其他计算机,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难,(广播风暴就是这么产生的)

必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关;

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址,网络地址到底长什么样,又是如何区分子网的?

Mac地址是用来标识你这个教室的某个位置,IP地址是用来标识你在哪个教室(哪个局域网)。你要跨网络发包你是不是要知道对方的IP地址,比如你要访问百度,你肯定得知道百度服务器的IP地址。计算机在发包前,会判断你在哪个教室,对方在哪个教室,如果在一个教室,基于Mac地址的广播发包就OK了;如果不在一个教室,即跨网络发包,那么就会把你的包交给教室负责人(网关)来转发。Mac地址及IP地址唯一标识了你在互联网中的位置

3.3 IP协议

IP协议是工作在网络层的协议,全称:Internet Protocol Address,翻译为互联网协议地址

规定了任何一台接入互联网的计算机都必须有一个IP地址

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

规定了只要是接入互联网的计算机都必须有一个IP地址
ip地址特点:点分十进制
ip地址最小:0.0.0.0
ip地址最大:255.255.255.255
ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本)
IP地址是动态分配的

3.4 arp协议

根据ip地址解析对方的mac地址

 

3.5 路由器

路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络(即局域网)

路由器具有判断网络地址和选择IP路径的功能

路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。两者实现各自功能的方式是不同的。

 

IP地址的分类:

​ A类保留给政府机构

​ 10.0.0.1 - 10.255.255.254

​ B类分配给中等规模公司

​ 172.16.0.1 - 172.31.255.254

​ C类分配给任何需要的人

​ 192.168.0.1 - 192.168.255.254

​ D类用于组播

​ E类用于实验

我们的电脑ip通常都是C类的,以192.168开头,正因为C类任何人都可以用
ip地址分类
什么是子网掩码
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。

它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

为什么需要子网掩码
单纯的ip地址段只是标识了ip地址的种类,无法辨识一个ip所处的子网
例:192.168.10.1与192.168.10.2并不能确定二者处于同一子网,因为不清楚哪些位表示网络号,哪些表示主机号

子网掩码如何判断两个ip是否属于同一个子网
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

案例: 已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
    
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。
子网掩码

四、 传输层(重点)

传输层功能:建立端口到端口的通信

4.1传输层的由来:

通过物理层建立链接通道

IP地址,子网掩码,(网络层)可以定位到全球范围某一局域网

​MAC(数据链路层),可以定位到某个局域网中的某台主机,

端口(port):用来唯一标识一台计算机上的某个应用程序

IP+PORT能够唯一标识一台计算机上的某一个应用程序

4.2 端口(port)

域名解析:我们访问的网站地址实质上都是端口,我们可以直接通过端口访问,但是太不好记就搞了个域名

      www.baidu.com      >>>     14.215.177.39:80

​ 一台计算机上是不可能只运行一个应用程序的,比如同时登陆qq和微信,那接收到的数据到底是交给微信还是qq呢?

答案就是:端口号,端口是需要联网的应用程序与网卡关联的编号

端口:用来唯一标识一台计算机上的某个应用程序
端口号的范围:0~65535
注意:0~1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口
MySQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000
端口号是动态分配的
  第一次起qq分配到的是8989
  将qq关闭再次启动端口号可能就变了

4.3 TCP\UDP都是基于端口工作的协议

 

TCP类似于打电话
UDP类似于发短信

 

TCP协议:

流式协议,可靠协议


基于TCP协议通信 必选先建立双向通道

当应用程序想通过TCP协议实现远程通信时,彼此之间必须先先建立双向通信通道,基于该双向通道实现数据的远程交互,该双向通道直到任意一方主动断开才会失效

 

总结

其优点很明显:能够保证数据传输是完整的

缺点:由于每次都需要传输确认信息,导致传输效率降低

场景:多用于必须保证数据完整性的场景,例如文本信息,支付信息等!

 

三次握手,四次挥手点我

 

 TCP传输数据可靠的原因:

TCP协议传输数据之所以可靠的原因是就在于有双向通道么???如果你说是你就是个low比

 

 

UDP协议:

不可靠传输

UDP协议采取的方式与TCP完全不同,其根本不关心,对方是否收到数据,甚至不关心,对方的地址是否有效,只要将数据报发送到网络,便什么都不管了!

总结:

优点:由于不需要传输确认信息,所以传输效率高于TCP协议

缺点:传输数据可能不完整

场景:视频聊天,语音聊天等,不要求数据完整性,但是对传输速度要求较高

 

五、应用层

HTTP协议(https 的s就是女人的衣服,提高安全性)
FTP协议

 

posted @ 2019-08-06 22:58  www.pu  Views(786)  Comments(0Edit  收藏  举报