网络编程
目录
-
软件开发架构
-
网络编程简介
-
OSI七层协议
-
互联网相关专业名词
-
TCP与UDP协议
内容
软件开发架构
软件开发架构:
程序员在编写软件的时候应该遵循的架构设计,类似于写ATM和选课系统采用的三层架构
软件开发架构的分类:
1.C/S架构 C:client(客户端) S:server(服务端):
类比:客户端相当于是需要体验服务的客人,服务端相当于是对外提供服务的店面
我们手机上下载的各种app其实是各大厂家的客户端 ,打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面让服务员给你提供服务
2.B/S架构 B:browser(浏览器) S:server(服务器)
B/S架构本质也是C/S架构,让浏览器充当各个厂家的客户端,用户无需对应下载相应客户端
两种架构的优缺点:
C/S架构:针对客户端可以高度定制,但是需要用户去下载才能使用
B/S架构:无需下载,极速体验,但是无法做到高度定制,体验效果较差
目前趋势更趋于B/S架构:
微信小程序:只需要下载一个微信就可以通过微信去访问很多服务端
支付宝里面的诸多应用:只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据,中途还可以提供广告服务
网络编程简介
网络编程:
研究前提就是基于互联网,网络编程就是基于互联网编写代码
学习网络编程的目的/结果:
可以开发C/S架构的软件(掌握原理使用框架)
网络编程的发展史:
该技术源于美国军方>>>:很多先进的技术都是由军事发明后续转为民用
实际应用:军方想要实现不同计算机之间数据交互,没有网络编程技术的时候只能拿U盘拷贝并携带,为了跨区域交互数据所以发明了网络编程
早期远程通信:1.座机电话;2.大屁股电脑;3.智能手机
电话线>>>网线>>>无限网卡
远程通信的前提是必须具备一个物理链接介质
互联网协议:
不同计算机之间要想实现无障碍交互,除了需要有物理链接介质之外还需要一套公有的标准
这个标准是>>>:互联网协议(OSI七层协议)
OSI七层协议简介
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理链接层
OSI七层协议:
七层的本质是规定了数据要想基于网络发出去必须在计算机上经历一些固定的流程
物理链接层:物理链接介质,传递电信号
数据链路层:基于物理链接层接受到一串二进制数 如何切分才能正常解析?
- 规定了二进制数据的分组方式
- 规定了‘以太网协议’
但凡能够接入互联网的计算机都必须有一块网卡
每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号
该编号是由12位16进制数组成,前六位是产商编号,后六位是流水线号
这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号)
基于mac地址就可以实现计算机之间的数据通信
网络层:IP协议 规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
IP地址目前有两个版本:
- IPV4:点分十进制 最小:0.0.0.0;最大:255.255.255.255
- IPV6:十六进制 IPV6可以表示出地球上每一粒沙子
随着社会的进步,计算机的使用越来越普遍,IPV4地址不够用
IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
IP地址分为公网IP和私网IP:
公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的
我们所有人的电脑默认使用的都是私网IP 公网IP需要花钱购买并且需要实名认证并备案 很多非法网站都是在国外注册备案
传输层:PORT协议(端口协议)
一台计算机上面可以运行很多数据交互软件,它们都是从内存中获取数据 为什么不会错乱?————就是因为端口协议的存在
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
端口号的范围是:0~65535;0~1024:系统经常使用的端口号;1024~8000:常用软件端口号
我们以后在写项目的时候推荐使用8000之后的端口
- 同一时间同一台计算机上面端口号不能冲突
- 端口号是动态分配的
eg:打开微信随机分配一个没有被使用的端口号8888,关闭微信重新打开那么会随机分配可能还是8888也可能是其他
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序
IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序
我们日常生活使用浏览器访问的各个网址其实就是IP+PORT
www.baidu.com 好记
14.215.177.29:80 难记
应用层:这里完全可以取决于程序员自己(HTTP协议 HTTPS协议 FTP协议 自定义协议)
域名解析:
域名:域名其实是便于记忆的一组服务器的地址(网站、电子邮件等)例如:我们平时访问的网站的网址,http://findland.cn(一级/顶级/裸域名)、http://www.findland.cn(二级域名)
域名解析:一开始在互联网上,所有的地址都是IP地址,但是由于这些IP地址太难记了,所以就出现了域名(比如http://www.findland.cn)。而域名解析就是将域名转换为IP地址去访问输入的网址的这样一种行为
举例:
- 域名就相当于现实生活中的市名:杭州市
- IP地址相当于邮局内部的编码:杭州-310000
- 如果别人问,你是哪个市的。很少有人会去记310000,大家都会记杭州
域名解析的流程是:输入域名- DNS(域名解析服务器)- 网站空间-浏览器打开网站
而在这个过程中,需要2种服务商提供这一服务:域名注册服务商、域名解析服务商
DNS服务器
DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器
DNS服务器中保存了一张域名和与之相对应的IP地址 的表,以解析消息的域名
互联网相关专业名词
网络知识补充:
互联网:将计算机彼此链接到一起的介质
互联网建立的目的:基于互联网做数据交互
上网的本质:基于网线去访问其他计算机上面的资源
其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)
专业设施名词:
交换机:让接入交互机的多台计算机之间彼此互联
局域网:由交换机组成的网络称之为局域网(一个区域)
广播与单播:
广播:在交换机中群发
单播:定向回复消息(记录mac地址)
路由器:将局域网彼此链接起来并支持数据交互,互联网其实可以看成是由多个局域网链接在一起
TCP和UDP协议
属于传输层
TCP协议:
流式协议、可靠协议
基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手四次挥手
三次握手建立连接 eg: 彼此挖通道
第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里
第二次握手:服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1
第三次握手:客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
四次挥手断开连接 eg:彼此切断通道
洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态
控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
UDP协议:
丢包协议、不可靠协议
不需要建立双下通道 数据的传输速度快 但是可能会丢失
qq使用的就是UDP协议 所以有时候会产生数据丢失现象
但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
TCP协议类似于打电话:你一句我一句 你侬我侬
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
面试题
TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
答案:描述的不够精准,不对
TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留