软件设计 2017-03-31
别以为做前端的就不用学计算机网络了,做WEB开发而不知道基本的计算机网络知识实在是有点说不过去,我们或许没有必要了解物理层或者数据链路层,但至少来讲,应用层是必须了解的。最近自学了一下计算机网络的基本知识,看得是谢希任的那本经典教材。本文总结了一下我个人认为比较重要的知识点,欢迎批评指正。
为了增强计算机网络系统的灵活性,便于开发和维护,建立了一种层次结构模型,各层只管自己的事,通过拿到别的层的服务和数据来完成自己的任务,暴露出自己的接口给其他层或者应用程序使用。分层很复杂,OSI的七层结构什么的没有必要理会,这里介绍书中提到的五层结构模型。(这足够了)
(这里引用一张图,来源:http://blog.csdn.net/dadadie/article/details/52190817)
我们只用简单了解一下各层的作用
1、实体层(物理层)
物理层说白了就是那些连线,光纤、双绞线之类的。
2、链接层(数据链路层)
他也是计算机网络的低层,他的作用就是将网络层交下来的数据封装成帧交给物理层,以及将从物理层接收的帧解析出数据交给网络层。(ps:数据在物理层一般叫帧,在网络层交IP数据报或者包)。像适配器、转发器、集线器、网桥、交换机都被归在链接层。
3、网络层
网络层的作用是向上层提供简单灵活的、无连接的、尽最大努力交付的数据报服务,它不提供服务质量的承诺,它是为主机间提供逻辑通信。这里涉及到地址解析,路由等内容。常见的路由器可以归为网络层。
4、运输层
运输层是为应用进程之间提供端到端的逻辑通信。传说中的TCP三次握手、四次握手就发生在这里。这里需要重点关注。
5、应用层
域名解析、HTTP、电子邮件等等都是应用层的范畴。应用层的协议比较多,我们重点关注HTTP 协议。
下面将各层的协议给个图
(图片来源:http://product.pconline.com.cn/itbk/wlbg/network/1107/2474259.html)
没找到合适的图,这里可以理解网络接口层为物理层+数据链路层
网络层重点是IP协议,IP协议包括ARP协议、ICMP协议、IGMP协议。下面逐步讲解
1、IP地址
(1)定义:IP地址是各个主机在网络中的唯一的逻辑标识,标识了主机及其所在的网络。IP::={网络号,主机号},他是由32为二进制输构成的,一般写成点分十进制形式。
(2)分类:分为AB -E,识别方法为,第一位为0为A类,10为B类,110为C类,DE不用考虑,网络号,A为前8为,B类16位,C类32位。
2、子网划分
直接用网络号划分网络会造成ip地址浪费,因为一个网络中可能并没有那么多的主机。我们需要将一部分主机号拿过来当网络号,增加可用网络个数。
我们将网络号部分全部变成1,主机号部分全部变成0就可以得到子网掩码,用子网掩码与IP地址逐位求与就能得到该IP地址的网络地址。
IP地址 AND 子网掩码 = 对应的网络地址
举一个例子,你的公司拿到了一个B类网络号(比较有钱啊)145.13.0.0,但是呢你的公司有7个部门需要有独立的网络,你总不能申请6个网络号吧,此时就要划分子网了,我们可以取主机号的前三位作为子网号,2的三次方=8,去掉111,000刚好得到6个网络,这个时候的子网掩码是多少呢?将网络号全部变成1,前面的16位网络号+你的三位子网号。答案就是255.255.11100000.00000000(不要像我一样),就是255.255.224.0。假设你们公司有台主机IP地址为145.13.3.1,那么他的网络地址是多少呢?直接和255.255.224.0求与得到的是145.13.0.0对不对,这不就是划分给你的网络号吗?是的,这说明对外来将你们还是一个网络,并非因为划分子网而变成多个网络。
3、无分类IP
这也是解决IP不够用的方法,他是在IP后面跟一个/数字,例如145.13.3.1/20,它表示前20位是网络地址。
4、物理地址(MAC地址)
物理地址是数据链路层和物理层使用的地址,基于此,我们需要一种转换机制
5、ARP(地址解析协议)
在网络层需要将IP解析为MAC,因为高层只认识IP,低层只认识MAC,ARP就是做这个事情的。
6、ICMP协议(网际控制报文协议)
它允许主机或路由器报告差错情况和提供异常情况报告。
7、IGMP,与多播有关,了解即可
8、VPN ,NAT
VPN就是常说的FQ,NAT是提供了使用专用内网访问因特网的机制。
总结一下:网络层应该重点掌握子网划分、ARP。
1、TCP协议(传输控制协议)
(1)定义:TCP链接::={(IP1:port1),(IP2:port2)}
(2)特点:
面向链接:使用TCP协议之前必须先建立连接
点对点:提供供的是一对一的连接
可靠交付:TCP传送的数据无差错、不丢失、不重复、按时序到达
全双工:我可以给你发数据,你也可以给我发
面向字节流:会将数据分块分解
(3)TCP连接建立和释放(三次握手、四次握手来了)
(图片来源:http://www.cnblogs.com/NeilZhang/p/5700312.html)人家拍个照片也不容易,小弟用用啊。 这个两个图就反映了传说的那几次握手,其实是几次确认过程。
(4)可靠传输工作原理
停止等待协议和连续ARQ协议(了解)
(5)流量控制(滑动窗口)(了解)
(6)拥塞控制:慢开始、拥赛避免、快重传、快恢复(了解)
2、UDP(用户数据报协议)
特点:无连接的,尽最大努力交付,面向报文,没有拥赛控制,首部开销小,一对一、一对多、多对一、多对多都可以。
注意:和TCP比较,他是DNS用到的重要协议
1、DNS(域名系统)
DNS建立了名字和IP的映射关系。我们的应用程序拿到一个域名时不能直接使用,而是要用到其对应的IP地址,这是要么从自己的缓存中拿到,要么就请求域名服务器解析。
2、域名的树状结构
域名的规则是一个树状结构,有机构管理顶级域名,二级机构拿到顶级域名后可以进一步划分,交给三级机构,三级机构还能再分,这样只要在一个级里没有重复的域名划分,那么任何一个域名都是唯一的。上个图:
3、域名解析过程
应用程序拿到域名后会在自己缓存中查找,有则直接用,没有则请求本地域名服务器解析,如果服务器中有则返回个应用程序,如果没有则请求其他本地域名服务器,得到IP后给应用程序,如果在本地服务器没有找到,它会告诉应用程序该向哪个服务器请求。
4、HTTP协议
(1)万维网
万维网不是一个特殊的网络,而是由许多网络在一起构成的集合。
(2)URL(统一资源定位符)
指的是网络中某个资源的指针。通过这个指针就可以标识网络中的一个资源,然后可以进行各种操作。
基本格式:协议://主机:端口/路径 (例如:https://i.cnblogs.com/EditPosts.aspx)
(3)http协议(超文本传输协议)
http协议是面向事务的(不可分割)的应用层协议,HTTP协议是无状态的
一个http的基本流程,上一个图,自己画的,我加上了浏览器的渲染过程,其实没那么复杂。
记住一个HTTP有两个RTT,不知道RTT请问度良
(4)请求报文(参考:http://blog.csdn.net/zhangliang_571/article/details/23508953)
(5)响应报文(参考:http://blog.csdn.net/a19881029/article/details/14002273)
(6)重要的http状态码(参考:http://www.runoob.com/http/http-status-codes.html)
5、cookie
cookie是保存在客户端的小的文本文件,某个域下的cookie会跟随请求响应传送
6、应用层的其他内容(这里不仔细讲了,只是列出来)
FTP:文件传输协议
SMTP:简单邮件传输协议
DHCP:动态主机配置协议
SNMP:简单网络管理协议
本文给出了前端开发者必须掌握的计算机网络知识,这只是我个人的理解,并不代表一定是对的或者一定适合你,推荐看谢希任的那个计算机网络教材,这样你一定会收获更多。后面可能会写关于网络安全的文章,最近在看一本书叫《WEB前端黑客技术揭秘》。
写过小程序的应该知道,微信的request不封装基本上不能用,写的显的太冗长,而且是回调式的,回调地狱什么的就不说了,可读性差。下面是我的封装代码,顺便支持一下promise。加了登录锁后的代码如下: