网络编程

  • 软件开发架构
  • 网络编程简介
  • OSI七层协议
  • 互联网相关专业名词
  • TCP与UDP协议

软件开发架构

# 什么是软件开发
程序员在编写软件的时候应该遵循的架构设计(三层架构)

# 软件开发架构的分类
1.C/S架构
C:client(客户端)>>>>>>需要体验服务的客人
S:server(服务端)>>>>>>>对外提供服务的店面

# 我们手机上下载的各种app其实就是各大厂家的客户端,打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面让服务员给你提供服务
# 优点:针对客户端可以高度定制
# 缺点:需要用户去下载才能使用

2.B/S结构
B:browser(浏览器)
S:server(服务器)
# B/S架构本质也是C/S架构,让浏览器充当各个厂家的客户端,用户无需对应下载相应客户端
# 优点:无需下载,急速体验
# 缺点:无法做到高度定制,体验效果差

# 目前的趋势更加偏向于B/S架构
例:微信小程序:只需要下载一个微信就可以通过微信去访问很多服务器
   支付宝诸多应用:只需要下载一个支付宝就可以通过支付宝体验很多服务
# 目的:统一提供接口服务,获取大量用户数据,中途还可以提供广告服务
   

网络编程简介

# 什么是网络编程
网络编程的研究前提是基于互联网,网络编程就是基于互联网写代码
# 学习网络编程的目的
学习网络编程之后就可以开发C/S架构的软件
# 网络编程发展史
美国军方想要实现不同计算机之间数据交互,没有网络编程技术的时候只能拿U盘拷贝并携带,为了跨区域交互数据所以发明了网络编程

# 早期远程通信
1.座机电话:彼此之间需要电话线连接
2.大屁股电脑:数据交互之间需要网线
3.智能手机:数据交互需要无线网卡
# 远程通信的前提是必须具备一个物理链接介质(电话线、网线、无线网卡)

# 互联网协议
不同计算机之间要想实现无障碍交互除了需要物理链接介质外,还需要一套公有的标准,这个标准技术互联网协议(OSIQ七层协议)

OSI七层协议

所有的计算机在生产过程中必须有相同的部分和功能

1.应用层
2.表示层
3.会话层
4.传输层
5.网络层
6.数据链路层
7.物理链接层
# 1,2,3层也可以归为一层

OSI七层协议的本质就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
# 物理链接层

物理链接介质的作用:传递电信号
# 数据链路层

1.规定了二进制数据的分组方式
2.规定了‘以太网协议’:但凡能够接入互联网的计算机都必须有一块网卡,每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号,该编号是由12位到16位进制数组成。前六位是厂商编号,后六位是流水线号,这个独一无二的编号的称呼叫做‘mac地址’,基于mac地址就可以实现计算机之间的数据通信了

# 网络层
IP协议规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
IP地址目前有两个版本:一个是IPV4(点分十进制),最小是:0.0.0.0,最大是:255.255.255
一个是IPV6(十六进制),IPV6大到能表示出地球上的每一粒沙子。IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机

"""IP地址分为公网IP和私网IP
公网IP是可以直接被浏览器访问到的,但是私网IP是不可以的,我们所有人的电脑默认使用的都是私网IP,公网IP需要实名认证备案并且花钱购买的"""

# 传输层
PORT协议(端口协议)
一台计算机上面可以运行很多数据交互软件,如微信、QQ、钉钉等, 就是因为有端口协议的存在,所以它们从内存中获取的数据不会错乱。
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号),端口号的范围是:0~65535
0~1024:系统经常使用的端口号
1024~8000:常用软件端口号
我们以后在写项目的时候推荐使用8000之后的端口
"""
1.同一时间同一台计算机上面端口号不能冲突
2.端口号是动态分配的,比如:打开微信随机分配一个没有被使用的端口号,关闭重新打开的时候,可能还是刚刚那个端口号,也可能是一个新的端口号
"""

IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序
IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序
    
我们生活中使用浏览器访问的各个网址其实就是:IP+PORT,但是因为不好记住,所以我们都是用域名。
eg:
    www.baidu.com >>>>>>>>>域名
    14.215.177.29:80 >>>>>>>>> IP:PORT
很多常见的服务端都不需要指定端口,只要访问了IP地址内部去会自动映射

# 应用层
取决于程序员自己,里面包含了HTTP协议、HTTPS协议、FTP协议跟自定义协议


网络知识补充

# 1.将计算机彼此链接到一起的介质就叫互联网
# 2.互联网建立的目的就是基于互联网做数据交互
# 3.上网的本质就是基于互联网去访问其它计算机上面的资源

我们的计算机也可以称之为是服务器或者服务端(专门对外提供服务)

专业设施名称

# 1.交换机:让接入交互机的多台计算机之间彼此互联
# 2.局域网:有交换机组成的网络称之为局域网(一个区域)
# 3.广播与单播
	广播:在交换机中群发
    单播:定向回复消息(记录mac地址)
# 4.路由器:将局域网彼此链接起来并支持数据交互,互联网其实可以看成是由多个局域网链接在一起

"""在局域网中可以直接基于mac地址实现数据交互,但是可能会产生广播风暴:交换机中同一时间太多广播操作
mac地址只能用于局域网交互数据,不能跨区域网传输
"""

TCP与UDP协议

# TCP与UDP都是属于传输层
# TCP协议
又叫流式协议、可靠协议
基于TCP协议进行数据交互之前需要做一系列复杂的操作(三次握手四次挥手)
三次握手建立链接,四次挥手切断链接
eg:
    A和B数据交互
 一握手是A向B发送链接请求
二握手是B收到A的请求并向A发送链接请求
三握手是A收到B的请求

一挥手是A向B发送切断请求
二挥手是B接收到A的请求
ps:这里要分开,因为A与B不再进行数据交互
 三挥手是B向A发送切断链接请求
四挥手是A收到B的请求

"""洪水攻击:服务器收到了大量的syn请求,处于rcvd状态
	控制很多台计算机同一时间去访问服务器,造成服务端瞬间过载瘫痪"""

# UDP协议
又叫丢包协议、不可靠协议
不需要建立双下通道,数据的传输速度快,但是可能会丢失,比如QQ就是使用的UDP协议,有时候会产生数据丢失现象,但是我们可以在UDP协议的基础上做很多额外的扩展来保证数据的安全

TCP协议类似于打电话:两人同时在线互动,你一句我一句
 UDP协议类似于消息:发了之后不管你看不看,只要发了就行

面试题

# TCP协议之所以比UDP协议可靠就是因为有双下通道,对不对?
不对,描述的不够精准
TCP协议之所以比UDP协议可靠是因为TCP协议发送消息有反馈机制,TCP协议发送的消息会在本地先保存该消息,如果地方确认收到才会删除,否则在一定的时间内会频繁的多次发送知道确认或者超时为止。UDP协议发送数据之后会立刻删除内存数据,不会保留。