Abstract:产品研发过程中的关于计算机网络的一些基础知识。如服务器,网关,协议,长连接等。
网络基础之协议栈
- 数据传输的原理:分解——传输——还原;
- 应用程序产生的数据经过五层协议栈模型自上而下逐层分解成可供物理介质传输的信号,当到达目的主机后再自下而上还原成应用程序数据;
- 分层的好处:每层可被独立设计,只要保证上下层借口一致;
协议栈模型
- 应用层(http,telent,FTP,TFTP)——传输层(TCP/UDP)——网络层(IP)——数据链路(Ethement,802.3,PPP)——物理层(借口和线缆);
- 应用层:为应用程序提供数据传输的网络接口,如网络协议;
- 传输层:提供端到端的连接,即让A主机上的程序a找到B主机上的程序b,TCP/UDP协议,端口号的概念;
- 数据链路层:网卡的工作地,负责将数字信号转化为可供物理层传输的电信号/光信号;
- 物理层:信号传输的物理通道,如网线和配套的接口;
互联网一切皆下载
- 流的概念:从另外一个地方不间断的获取数据;
- 获取=下载,只不过应用程序对获取到的数据的使用方式不同:播放/展示/存储;
Docker
- 解决应用程序的环境依赖/大规模部署/应用间的相互依赖问题:Docker——相当于集装箱;
Google - GUIC协议传输快
*基于UDP协议,增发校验数据包,再连无须确认,网连发生变化时无须重建连接;
IP地址枯竭的后悔药-网络地址转换NAT
- 私有网络访问internet的方式需要用到NAT技术,有3种实现方式:
- 1.静态转换Static Nat:内外网地址一一对应;
- 2.动态转换dynamic nat:内外网的对应关系不固定,一般ISP会使用这种方式给接入用户提供访问外网的能力;
- 3.端口多路复用:让外网ip地址被多个内网ip同时共享;
P2P终结者的原理
- 原理:欺骗网内所有主机,让大家把数据先发给他,然后它控制数据的流向/传输速度吗,达到控制局域网内网速的目的;
- 破解法:在网关上把客户端的ip和mac地址绑定,并在电脑上将网关的ip和mac地址绑定(这样arp就不能通过mac地址号称自己是网关了)
ping和网关
- ping:网络诊断工具(packet internet groper),检测网络是否连通;ping是TCP/IP协议族的一部分,原理是向IP地址发送一个数据包,若对方返回同样大小的数据包,则证明连通,且可测试时延;
eg.在命令行里输入ping baidu.com检测百度的连通,输入ping 127.0.0.1检测本机TCP/IP协议设置是否准确;字节=32表示发送出去的数据包是32个字节,时间表示发包到收包的耗时,TTL表示这个包可存活的数量单位;
- 网关:网络的关卡,即两个网络之间的门;表示为IP地址;
session
- session机制:解决协议无状态的问题,相当于给每个用户自动分配了一个身份,从而完成对用户身份的识别;指服务器记住用户的能力(通过cookie机制来辅助实现),客户端和服务端产生联系;
- 场景:购物车的商品记录;
端口
- 端口:终端留给外部的接口,是不同设备间通信的桥梁;
- 驱动:外部硬件与计算机之间交流时的翻译;
- 物理端口:如电脑的网孔,usb端口等;
- 虚拟端口:如网络数据的收发;
- 沟通的核心:软硬结合,分而治之;
TCP/UDP
- TCP(transmission control protocol)传输控制协议,IP(internet protocol)因特网协议;TCP/IP是一个协议族,定义了整个互联网通信的基础,定义互联网如何连接/协商;
- TCP:需要对方确认的(即传输前需要进行三次握手,三次确认才能通信);可靠带来效率下降(如时间大部分浪费在互相确认中,资源消耗多)
- UDP(user datagram protocol用户数据包协议):粗暴,不管对方什么情况,直接发送,不需要确认过程;不可靠带来效率提升同时服务质量下降;udp不一定不可靠(如果可以通过校验算法保证数据质量的稳定),如QQ发送消息即用UDP;
- 稳定性优先的场景优先选TCP,如浏览器访问网页,如微信(要维护一条稳定的信息传输通道);
- TCP为什么可靠:尽最大可能把数据包传送给目的主机+即便传不到也会反馈失败信息;保证可靠的手段:顺序编号(数据包拆小且一一编号)+确认机制)(ACK,向发送方反馈成功接收的信号)+超时重传(发送方每发送一个数据包都会为数据包装定时器,当定时器归0而发送方仍未接收到成功信号,就会重传,直至接收到信号或连接断开)
- UDP无确认机制和超时重传机制,发出去的就像断了线的风筝;
HTTP/2新一代网络协议
- http:hypertext transfer protocol超文本协议;
- http/2的进化点:多路复用(将多个http请求复用在一个TCP链路上,避免重复请求,提高效率)+二进制传输(可传输的东西变多,如加密后的数据/视频流)+使用HPACK压缩头部信息+ 服务器端push(服务器可直接将资源推给客户端);
邮件协议(仅论客户端)
- 收邮件:1.POP(post office protocol邮局协议):支持从邮件服务器上将用户邮件下载到本地;(可离线所有邮件);2.IMAP:可先获取邮件标题和摘要+ (当想看正文时再拉取正文)+ 将邮件处理状态(标记已读,删除)同步给服务器;
- 发邮件:1.SMTP(simple mail transfer protocol),将邮件推送给服务器;2.exchange activesync:微软的同步协议,同步内容包括邮件/日程/联系人等;
反向代理
- 代理:客户端向外界发起请求不直接与目标服务器连接,而是经过代理服务器去连接外界目标服务器;(服务器隐藏客户端)
- 反向代理:服务器接受客户端的请求——将请求分发到被代理的服务器上——服务器处理完请求后将结果转发给客户端;(服务器隐藏服务器;接口人角色:接洽所有客户端请求并进行简单处理而后分发到服务器)
- 意义:负载均衡;减轻后端服务器压力;为后端服务器阻挡一些网络攻击;
CDN内容分发网络
- CDN(content delivery network):专注静态资源的分发和访问;动作是分发;落定于网络;
- CDN作用:一个基于互联网数量巨大的服务器,专注于内容和资源的分发,方便用户快速访问,提升用户体验的内容网络;资源的分布式存放和备份的方法;
- 用户就近接入服务器:利用DNS判断用户位置;
push数据包
- 车票(ip地址+端口号),高速列车(TCP/IP),ARP广播(获取下一个网关的mac地址,创建路由表,引文传输过程需要经过无数网关路由器的中转才能到达目的地)
长连接
- 连接:客户端通过TCP/IP协议从服务器上获取数据时需要一个连通服务器和客户端的连接,连接通过三次握手建立,四次握手释放;
- 短连接:每次获取数据都创建一个独占的连接;
- 长连接:一个能供多个请求多次传输数据并在数据传输后保活一段时间的连接;
- 长连接的使用场景:1.短时间内对同一个服务器的多次数据请求;2.实现push功能(基于长连接的全双工的通信能力,push系统的客户端需要利用最低频率的心跳保证长连接的存活时长);
免费电话
- 将语音信息转化为能在互联网中传输的IP数据包——UDP协议传输;
HTTPS技术
- https(安全超文本传输协议):http协议的主要缺点是明文传输(易被篡改);https在http与TCP间加了层SSL协议(保障网络数据传输安全的协议,在传输层对http封装加密,并将数据交由TCP协议发送到网络上)
- 使用https服务器需要在受信任公司申请一套数字证书(即公私钥,进行非对称加密,公钥加密的数据需要私钥解密,私钥加密的数据需要公钥解密)
- https协议建立连接的过程:客户端发起https请求——服务器将公钥发送给客户端验证身份——客户端生成一个加密密钥,公钥加密后将蜜月传给服务器,服务器用私钥解密报文获得客户端密钥——服务器和客户端的数据传输都通过客户端密钥进行加解密;
就近接入
- 问题:跨运营商的网络访问慢;
- 解决思路:访同一运营商的网站;
- 方案:就近接入,即利用DNS服务找到离用户最近的机器,从而达到最短路径提供服务,理论上可找到这个公司的所有机房和IP从而达到流量调度的目的;
网络带宽
- 带宽:单位时间能通过链路的数据量;
快播与p2p
- 成功的原因:真实解决了痛点(免费视频消费需求+一整套的视频网站技术解决方案);
- P2P:去中心化服务,无中心服务器,每个用户既是下载者又是下载服务提供者;(共享模式)
socket
- 一套封装了TCP/IP的实现的API;实现和其他电脑的通信+作为进程间通信的一种方式;
搭服务器
- 安装Nginx
- 测试
REST
- representational state transfer表现层状态转化;
- REST是一种定义API的风格,URL只表示资源,而对资源的操作一律用http协议自带的动词来完成;