网络编程(一)
软件开发架构
软件开发架构的定义
程序员在编写软件的时候应该遵循的架构设计。类似于三层架构。
软件开发架构的分类
软件开发架构的分类
-
C/S 架构
C:client(客户端)
S:server(服务端)
客户端相当于家里的的客人,服务端相当于招待客人的主人。打开APP其实就是客人来到住人家里,让主人招待客人。
-
B/S 架构
B:browser(浏览器端)
S:server(服务器端)
其实B/O架构其实也可以说是C/S架构,只不过是让浏览器的网页界面充当客户端,用户不需要下载客户端。 -
两种架构的优劣
C/S架构:优点是在客户端就可以定制一些需要的东西。缺点是用户只有下载才可以使用。
B/S架构:优点是无需下载,可以直接使用。劣势就是没有办法进行定制一些东西。 -
架构发展的趋势
目前趋势其实偏向于B/S架构,比如QQ、微信、支付宝的一些小程序。只需要下载上述几个软件就可以去访问很多小程序和数据。
网络编程简介
网络编程简介
网络编程的学习是基于换联网进行的,网络编程其实就是基于互联网编写代码。
学习网络的编程的目的/结果
学习网络编程之后就可以用于开发C/S架构的软件
网络编程发展史
网络编程技术起源于美国军方(先进的技术一般都是从部队出来的,由军用转为民用)。之前网络编程没出现的时候,数据只能用硬盘拷贝并携带。为了解决这个数据交互的快捷性,发明了网络编程。
远程通信技术
远程通信的前提是具备一个物理连接介质(电话线,网线,网卡)
- 座机电话
彼此之间是用电话线连接 - 大头电脑
彼此之间的数据交互需要通过网线连接 - 智能手机
彼此之间的数据交互需要通过网卡连接
互联网协议
互联网协议引入
不同计算机之间实现数据交互,除了物理连接介质之外还需要一套标准,就是互联网协议:OSI七层协议
OSI七层协议
OSI七层
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理链路层
所有的计算机在生产过程中必须有相同的部分和相同的功能。
OSI五层
- 应用层(三层:包括表示层和会话层)
- 传输层
- 网络层
- 数据链路层
- 物理链路层
OSI七层协议
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程。
物理链路层
物理链接介质,传递电信号
数据链路层
基于物理链接层收到一串二进制数,然后需要进行解析。
- 规定了二进制数据的分组方式
- 规定了
以太网协议
但凡能够接入互联网的计算机都必须有一块网卡。网卡会有一个独一无二的十二位十六进制数(前六位是厂商编号,后六位是流水线号)组成的编号(mac地址:类似于人的身份证号),基于mac地址就可以实现计算机之间的数据通信。
网络层(IP协议)
IP协议规定了每台计算机接入互联网都必须有一个IP地址(取决于网线)。IP地址可以唯一标识地球上的独一无二的一台介入互联网的计算机。IP地址目前有两个版本。
-
IPV4:点分十进制
用点分开的四个字节的二进制数组成的一串数字。最大:0.0.0.0 ;最小:255.255.255.255 。IPV4最多只能容纳4228250625台计算机。随着社会的进步,计算机的使用越来越普遍,IPV4地址不够用。 -
IPV6:十六进制
IPV6可以标记出地球上的每一粒尘埃。
IP地址分为公网IP和私网IP。公网IP是可以直接被浏览器访问到的,但是私网IP是不可以的。公网IP一般是收费并且需要使用实名认证并备案的。我们的计算机默认都是私网IP。
传输层(PORT协议,又名端口协议)
一台计算机上面可以运行很多数据交互软件(例如QQ、微信等),PORT协议可以保证从内存中正确的获取数据。端口号是用来标识一台计算机上面正在运行的应用程序。
- 端口号的范围:
0~~65535
- 系统常用的端口号:
0~~1024
- 常用软件端口:
1024~~8000
- 后续写项目的时候推荐使用
8000
以后的端口号 - 端口号的要求:
1. 同一时间同一台计算端口号不冲突
2. 端口号是动态分配的 。
eg:打开微信随机分配一个没有被使用的端口号8888
,关闭微信重新打开那么会随机分配可能还是8888
,或者也有可能是其他的。
TCP与UDP协议
TCP协议与UDP协议都属于传输层
TCP协议(流式协议、可靠协议)
基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手四次挥手
- 三次握手建立链接
eg:彼此挖通道 - 四次挥手断开连接
eg:彼此切断通道
洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态
控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
UDP协议(丢包协议、不可靠协议)
不需要建立双下通道 数据的传输速度快 但是可能会丢失。qq使用的就是UDP协议 所以有时候会产生数据丢失现象。但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全。
TCP协议类似于打电话:你一句我一句 你侬我侬;UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
总结
- IP地址:用于标识全世界独一无二的一台接入互联网的计算机
- PORT号(端口号):用于标识一台计算机上面的某一个应用程序
- IP+PORT:表示全世界独一无二的一台计算的某一个应用程序
- 我们日常使用浏览器访问的各个网址其实就是IP+PORT。
www.baidu.com
14.215.177.29:80
ip:port
很多常见的服务端都不需要指定端口,只要访问了IP地址内部去会自动映射 - 域名解析
将好记的地址解析成真正的地址www.baidu.com
解析202.108.22.5:80
应用层
完全取决于程序员:HTTP协议 HTTPS协议 FTP协议 自定义
网络知识补充
- 互联网:互联网是将计算机连接到一起的介质
- 互联网的建立的目的:基于互联网做数据交互
- 上网的本质:基于网线去访问其他计算机上面的资源
专业设施名词
-
交换机:让接入交互机的多台计算机之间彼此互联
-
局域网:由交换机组成的网络称之为局域网(一个区域)
-
广播和单播:
1. 广播:在交换机中群发
2. 单播:定向回复消息(记录mac地址) -
路由器:将局域网彼此链接起来并支持数据交互。互联网其实可以看成是由多个局域网链接在一起
-
在局域网中可以直接基于mac地址实现数据交互。但是可能会产生广播风暴:交换机中同一时间出现太多广播操作。mac地址只能用于局域网交互数据 不能跨局域网传输
面试题
题目: TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够精确 不对!!!
TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留