最近学习一下HTTP,做点笔记,尽量让自己慢慢的记住这些东西。
HTTP几乎都是从五层网络模型说起,虽然觉得可以不用深入了解,但是还是需要简单的了解一些。
应用层:
我的理解就是,应用层就像是两个软件或者两个程序,比如我们的浏览器和服务器,我们通过浏览器去请求服务器,服务器程序之间操作数据,这些程序或者软件就称之为应用层。应用层之间有很多协议,比如HTTP协议、DNS协议、FTP协议、SMTP协议等等。
传输层:
这个层做的是建立主机端到端的连接,在这个层有两个协议,一个是UDP协议一个是TCP协议。UDP协议是尽最大努力保证数据送到,但是不保证数据一定能够送到的。我们经常用到的Ping命令,来测试主机之间是否联通,原理就是UDP协议。这种在数据传输途中把数据丢了的情况,在网络中我们称之为:丢包。TCP协议是会保证数据的正确性的,也会保证数据的顺序性。
网络层:
网络层用的是一种网络层协议,也叫IP协议,网络层通过IP寻址来建立两个节点之间的连接,IP是唯一的。
数据链路层:
数据链路层呢又分为两个部分或者称为两个子层,逻辑链路控制子层和媒体访问控制子层,这层的缩写大家肯定熟悉——MAC,也就是人们常说的MAC地址。一开始我一直以为是定义好了链路,然后发射出去,但是实际上第一次连接的时候是不知道链路的,是发射出去之后一直跳,最终定位到目标,然后会缓存这个链路地址。可以通过cmd命令行去看:
tracert www.baidu.com
可以看见跟踪的跳跃点,然后跳跃点ip是无序的。
物理层:
这个就不需要多说了,上面的所有东西都是基于物理硬件的,物理层是支撑一切的基础。当我们在链路层处理完成之后,是通过物理层发射数据出去的,比如网卡。
刚开始我其实是不知道这五层网络协议的运行过程,后来问了运维,才大概理解了一点。比如浏览器请求服务器,浏览器这边按顺序把数据在应用层封装,定义好协议,接着到传输层继续添加TCP/UDP协议,接着到网络层添加IP协议,然后在链路层先找缓存有没有链路,有就封装进去,没有就通过物理层发射出去数据包去找目标。数据包找到目标之后,通过物理层接收到数据包,然后通过链路层、网络层、传输层、应用层一层一层往上解包,然后使用。
在五层模型执行的时候,都是只在单独自己的程序上执行,比如TCP三次握手,就需要执行三遍这个过程。简单理解就是压包和解包的过程。当然,每一个的机制都是非常复杂的,每一层里面的协议的工作也都不只是那么简单。每层协议本质就是在外面套一层特殊格式的数据。所以在将数据送到的时候,需要将这一层层的协议拆开,然后才能得到里面的数据。
还有一个OSI的七层模型,只是把应用层分成了三个层,应用层,表示层和会话层,表示层和会话层没有相应的协议。一般表示层做的是数据格式化,或者加密编码解码等操作。
(完)