01网络编程(基础知识+OSI七层协议+TCP与UDP)

01 网络编程

一、软件开发架构

1.1 CS架构

c:client   	客户端
s:server   	服务端

理解:

将客户端看成是去店里消费客人
将服务端看成是提供服务的店面
    eg:收集各种app其实就是各大软件的客户端

三大特征:

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

1.2 BS架构

b:browser	浏览器
s:server	服务器

理解:

浏览器统一充当各个服务端的客户端
本质:bs架构本质上也是cs架构
统一:各大互联网巨头正在做的事情
    eg:
        微信小程序(微信提供开发微信小程序的软件)
        支付宝小程序(各大程序接口)

总结:

网络编程学习完就可以开发cs架构的软件(简易版本)
并发编程、前端、数据库、后端框架就可以开发bs架构软件(任何类型的软件)

二、网络理论前戏

2.1 简介

网络编程其实研究的就是程序之间的数据通信

由来:基于远程传输数据的技术最早诞生于美国军方(前沿技术通常都是由军事产生)

远程数据传输发展史(民用)
    1.有线电话            电话线互联
    2.无线电话            信号发射器
    3.大屁股电脑          网线
    4.笔记本电脑          网卡
    ...

2.2 常见硬件

交换机:能够使接入该机器的所有计算机之间彼此互联
局域网:有交换机组成的网络
互联网:可以简单的理解为是多个局域网之间彼此互联
"""
基于mac地址的数据传输
	1.广播风暴
	2.mac地址不能跨局域网传输
"""
路由器:能够连接多个局域网并实现局域网之间的数据传输
"""要想实现远程数据交互的前提是必须要有物理连接介质"""

除了有物理连接介质之外还应该有一些能够保证数据彼此无障碍交互的东西(标准),即OSI七层协议。
OSI七层协议由此引出,下面进行详细解释。

三、OSI七层协议(五层)

简介:

OSI:Open System Interconnection Reference Model
开放式系统互联通信参考模型,说人话就是一个网络互联模型。

互联网协议按照功能不同分为OSI七层 或 TCP/IP五层 或 TCP/IP四层
image
每层运行常见的物理设备
image
升华理解:
image

3.1 七层协议

所有的计算机都必须要有这七层

应用层:是参考模型的最高层。主要功能是:为应用软件提供了很多服务,比如文件服务器、数据库服务、电子邮件与其他网络软件服务。

表示层:是参考模型的第六层。主要功能是:用于处理在两个通信系统中交换信息的表示方法,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
也就是将图片等数据用计算机代码表示出来。

会话层:是参考模型的第五层。主要功能是:负责维扩两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。(API接口)
比喻:饿了么、美团用微信、支付宝支付的例子

传输层:是参考模型的第四层。主要功能是:向用户提供可靠地端到端服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。传输层向高层屏蔽了下层数据通信的细节。因此,它是计算机通信体系结构中关键的一层。(TCP稳、 UDP快)
'''还有一个作用就是:给数据包打上端口号'''

网络层:是参考模型的第三层。网络层负责IP地址,主要功能是:为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。
比喻:相当于快递公司的大卡车,将快递送到分公司的分拣点。
'''作用就是:给数据包打上ip地址,并且进行路由转发。'''

数据链路层:数据链路层则负责MAC位址
    四参考模型的第二层。主要功能是:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
比喻:相当于快递小哥,直接将快递送到你手上。
	MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。
    
物理连接层:是参考模型的最低层。该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。主要跟功能是:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。

3.2 五层协议

开发层面可以归纳为五层


应用层
传输层
网络层
数据链路层
物理连接层

"""
从下往上研究

1.物理连接层
	提供一个物理连接接口(网线口 无线网卡)
2.数据链路层
	1.规定了电信号的分组方式
	2.以太网协议
		规定了计算机必须有一块网卡 并且网卡上面要有一个固定的一串数字
		12位16进制数 
			前六位:产商编号
			后六位:流水线号
		上述的数字也称之为计算机的mac地址(类似于身份证号)
"""

3.3 知识储备(ARP协议、API接口、SDK接口)

ARP协议:

地址解析协议:根据IP地址获取物理地址的一个TCP/IP协议。
	将IP地址转换成mac地址(基于网络请求,通过ip向计算机发送请求‘哎,把你mac地址发给我’,这种方式来获得mac地址)

API接口:

API接口,应用(Application)程序(Programming)接口 (Interface)。
相当于银行办理业务的窗口,不需要知道存钱业务怎么运行的,只管对接窗口的工作人员即可。

SDK接口:

SDK可以看作是一组工具包,好比现在说的winSDK编程就是使用winAPI来进行开发,你需要下载SDK并安装,里面包含了必要的API文件和其他工具

3.4 网络层详解

IP协议:规定了接入互联网的计算机都必须有一个IP地址用于唯一标识

点分十进制

    # IP地址通常用“点分十进制”表示
    IPV4版本
        最小  0.0.0.0
        最大  255.255.255.255
    IPV6版本
        能够表示出地球上每一粒沙子

    例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)

总结:IP地址能够唯一标识接入互联网的一台独一无二的计算机

公网IP与私网IP
    公网IP需要花钱购买并申请
    私网IP自带的但是无法直接基于互联网访问

3.5 传输层详解

传输层会涉及到TCP协议与UDP协议,下一节进行解释。

端口协议
    范围:0~65535
    特性:动态分配
        eg:第一次运行微信 系统随机取一个端口号2022
           然后关闭微信重新启动 系统随机取一个端口号
    端口号基本使用
        0~1024系统默认需要使用的端口号
        1024~8000常见软件端口号
        以后我们开发的软件最后使用8000之后的端口号

# 端口号(port):能够唯一标识一台计算机上面正在运行的一款应用程序

端口号在同一台计算机同一时刻不能重复,一个软件对应一个端口号。

总结:ip+port 能够唯一标识世界上某一台接入互联网的计算机上面的某一个正在运行的应用程序

四、TCP协议

简介:

流式协议 可靠协议

三次握手	建立链接
	重要状态
    	listen监听态:等待对方发请求
        syn_rcvd态:忙于恢复确认建立请求
            # 洪水攻击:服务端在同一时间接收到了大量的要求建立链接的请求

四次挥手	断开链接
	不能合并成三次

4.1 三次握手

image

就控制为来说,也是具有唯一性的。
第一次:SYN
第二次:SYN+ACK
第三次:ACK
两边不仅可以通过序号和确认号,还可以根据控制位来区分进行到哪个步骤,丢弃一些不必要的报文。

4.2 四次挥手

image

其实中间的ACK和FIN+ACK这两步,就足以证明为什么要四次挥手了,因为还可能存在未发送完的数据。

五、UDP协议

简介:

不可靠协议

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

"""
TCP协议相当于打电话 你一句我一句 你侬我侬
UDP协议相当于发短信 发了就完事 管你看不看
"""
早期的QQ使用的就是UDP
posted @ 2022-01-11 19:52  Panda_Xin  阅读(354)  评论(0编辑  收藏  举报