网络编程 - 软件开发的架构,互联网通信协议,TCP协议

软件开发的架构

1、C/S架构

  • 这里的Client客户端一般泛指客户端应用程序,程序需要先在用户的电脑或手机上安装后,才能运行在用户的电脑或手机上
c/s架构
    c:client    客户端
    s:server    服务端
    
   腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频
     
"""
将客户端看成是去店里消费客人
将服务端看成是提供服务的店面
      eg:收集各种app其实就是各大软件的客户端

服务端需要具备的三大特征
        1、24小时不间断提供服务(24小时监听)
        2、固定的地址(IP地址)
        3、能够服务多个用户(高并发)
"""   

csssss


2、B/S架构

  • Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
b/s架构
    b:browser    浏览器
    s:server     服务器
    
   如百度网站是服务端,你的浏览器是客户端
  
"""
浏览器统一充当各个服务端的客户端
本质: bs架构本质上也是cs架构
"""

统一:各大互联网巨头正在做的事情
    eg:
      微信小程序(微信提供开发微信小程序的软件)
      支付宝小程序(各大程序接口)
      
# 总结
   网络编程学习完就可以开发cs架构的软件(简易版本)
   并发编程、前端、数据库、后端框架就可以开发bs架构软件(任何类型的软件)  

bssss

C/S架构与套接字(socket)的关系:

学习套接字编程的目的式为了开发一个C/S或者B/S架构的软件

client -------------- 网络 -------------- server

browser ----------- 网络 -------------- server

互联网 = 物理连接介质 + 通信协议



网络通信原理

  • 互联网(internet)的本质就是一系列的网络协议
    • 其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话),英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。


网络编程前戏

  • 网络编程其实研究的就是程序之间的数据通信
由来:
   基于远程传输数据的技术最早诞生于美国军方(前沿技术通常都是由军事产生)
    
 
远程数据传输发展史(民用)
  1.有线电话       电话线互联
  2.无线电话       信号发射器
  3.大屁股电脑      网线
  4.笔记本电脑      网卡
    ...
"""
要想实现远程数据交互的前提是必须要有物理连接介质
"""

除了有物理连接介质之外还应该有一些能够保证数据彼此无障碍交互的东西(标准)
  OSI七层协议

OSI七层协议

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层


tcp/ip五层模型

我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理

首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件


1、物理层

  • 提供一个物理连接接口(网线口 无线网卡)

物理层由来:孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网

物理层功能:主要负责发送电信号,用高低电平模拟二进制数0101,高电平对应数字1,低电平对应数字0


2、数据链路层

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

数据链路层的功能:定义了电信号的分组方式

以太网协议Ethernet:要求连入网络的计算机必要要有一块网卡,并且规定全球每一块网卡的mac地址都不一样,用12位十六进制数表示,前六位表示生产厂商,后六位表示流水线号

以太网协议的数据传输部分分为报头和数据部分,报头有18个字节组成,前6个字节为自己的mac地址,中间6个字节是对方mac地址,后6个字节表示数据类型

  • 常见硬件
    • 交换机:能够使接入该机器的所有计算机之间彼此互联
    • 局域网:有交换机组成的网络
    • 互联网:可以简单的理解为是多个局域网之间彼此互联
    • 路由器:能够连接多个局域网并实现局域网之间的数据传输

以太网协议通信采用广播的方式进行通信,即计算机通信基本靠吼,一台机器想要和另外一台机器通信,同局域网内所有机器都能收到发包,其他机器收到包后会拆包查看是否是属于自己的包,如果不是则丢弃,如果是则读取数据并回应,如果世界范围的机器都采用以太网的广播方式通信将是一场灾难,这就是广播风暴

知识点:以太网协议通信只能在局域网中,不能跨局域网通信


3、网络层

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

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

IP协议:如何实现跨局域网络通信,于是乎诞生了IP协议,IP协议规定了每台计算机都有一个IP地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示

IP协议通信的数据传输部分也分为报头和数据部分,报头占20-60个字节,内部包含了IP版本号、自己IP,目标IP等等数据,数据部分就是包含以太网协议中的所有内容,长度限制1500字节,超过1500字节的数据将分片发送,IP分片是没有校验机制的,所有是不可靠传输,所以在传输层的数据尽可能避免到IP层分片IP协议通信通过网关统一对外局域网进行联系


4、传输层(端口协议)

传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

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

  • TCP/UDP协议是基于端口工作的协议

    • port:端口,每台计算机的端口编号由0 ~ 65535组成,0 ~ 1024为操作系统默认占用端口,1024~8000常见软件端口号,以后我们开发的软件最后使用8000之后的端口号

TCP协议

  • TCP协议遵循3次握手4次挥手原则,每次传输数据需等到对方回应后才会把数据从内存中删除,是一种可靠协议

    • TCP协议工作原理(基于tcp通信之前必须建立一个双向通信的链接)

可靠协议、流式协议

# 可靠协议:
	TCP协议有反馈机制,当发送方传输一段数据给接收端后,接收端需要反馈信息(我收到了)给发送方,
  发送方才会继续传输剩下的数据,如果不回馈,发送方会在规定时间内间隔传输,都没有反馈信息则停止传输

# 流式协议:
	传输数据是一边传一边存的形式,不是一次性传完
  
  
# 三次握手的三步
 第一次:  CLIENT --- syn ---> SERVER     # 客户端发送syn报文,并置发送序号为n
 第二次:  SERVER--- syn,ack ---> CLIENT # 服务端发送syn和ack报文,并置发送序号为k,确认序号为n+1
 第三次:  CLIENT--- ack ---> SERVER     # 客户端发送ack报文,并置发送序号为k+1
"""
第一次握手:建立连接时,客户端发送syn包(syn=n)到服务端,并进入SYN_SEND状态,等待服务器确认; 

第二次握手:服务端收到syn包,必须确认客户的syn(ack=n+1),同时自己也发送一个syn包(syn=k),即syn+ack包,
                           此时服务端进入SYN_RECV状态;
          
第三次握手:客户端收到服务端的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务端
                           进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务端开始传送数据。  
"""  
  
  
# 四次挥手的四步:
 第一次:Client --- syn --->Server  # 客户端发送syn报文,并置发送序号为m
 第二次:Server --- ack --->Clinet  # 服务端发送ack报文,并置发送序号为m+1
 第三次:Server --- syn --->Client  # 服务端发送syn报文,并置发送序号为p
 第四次:Client --- ack --->Server  # 客户端发送ack报文,并置发送序号为p+1
"""
第一次挥手:断开连接时,客户端发送一个syn(syn=m),用来关闭客户端到服务端的数据传送;
 
第二次挥手:服务端收到这个syn,它发回一个ack,确认序号为收到的序号加1(ack=m+1);

第三次挥手:服务端关闭与客户端的连接,发送一个syn给客户端(syn=p);

第四次挥手:客户端发回ack报文确认,并将确认序号设置为收到序号加1(ack=p+1)。
"""

UDP协议

不可靠协议

数据发送没有通道的概念 发送出去了就不管了

"""
TCP协议相当于打电话 你一句我一句 你侬我侬
UDP协议相当于发短信 发了就完事 管你看不看
"""
早期的QQ使用的就是UDP

ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在尽力高并发

  • flask框架默认端口:5000

  • Django框架默认端口:8000

  • MySQL数据库默认端口:3306

  • redis数据库默认端口:6379

在一台计算机上,同一时间同一端口只能有一个应用程序占用

总结:IP能唯一的表示互联网中的某一台计算机,port能唯一的表示一台计算机上的一个应用程序

ip+port ===》标识全世界范围内独一无二的一个基于网络通信的软件。eg:127.0.0.1:8080

ARP协议:通过IP地址解析成MAC地址


5、应用层

负责应用程序之间的沟通。网络编程主要针对的就是应用层。

应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式。

应用层功能:规定应用程序的数据格式。

  • 传输层和网络层的封装在操作系统完成。应用层的封装在应用程序中完成。
  • 数据链路层和物理层的封装在设备驱动程序与网络接口中完成。
posted @ 2021-01-14 23:00  山风有耳  阅读(362)  评论(0编辑  收藏  举报