前端也得学学计算机网络呀

    别以为做前端的就不用学计算机网络了,做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前端黑客技术揭秘》。

相关推荐