目录算法
协议就是两个或多个对象之间为了某个或多个需求而设置的约定,即在什么时间,遇到什么状况该作什么。编程
举例: 小强和小明约定周末一块儿去玩小霸王游戏机,可是若是赶上停电就去掏鸟窝。浏览器
TCP/IP 协议就是为了知足世界上成千上万的网络设备的各类通讯需求而设计的一套约定。安全
举例: 你要从某网站下载一部电影,如何实现呢?服务器
首先网站服务器和你的电脑互相识别,须要 IP协议;
网络
为了跨越几千千米的互联网找到一条通往你电脑的路径,须要路由协议;
数据结构
为了片子数据传输不丢失乱序重复,须要 TCP协议;
socket
另外你能够用FTP协议接收电影。单个协议就是单个约定,以TCP为例,tcp
约定了通讯时超时怎么办?学习
数据丢失怎么办?
乱序怎么办?
网络拥塞了怎么办? 等等。
不是协议多,而是需求多,每一个协议都是从具体的实际需求中产生的。需求多了,问题就多,为了解决一个个的问题,而出现了一个个的协议。
举例:支付页面通常是https,由于安全需求;
组播协议出现是由于网络点播需求;
IP over AOS 出现是由于宇航员方便上网的需求等等。
“分层”的思想能够应用到不少领域,它是复杂问题简单化的有效方法。
协议分层好处: 协议只需关注本层问题,直接利用下层提供的服务,同时向上层提供服务,而且每层的更改不会影响其余层。
举例:
经典四层模型: 应用层—>传输层—>网络层—>物理层(链路层)
要点1:
谨记“网络协议因需求而产生,以解决实际问题为目的”,所以学习某个协议必定要了解它的应用场景和提出目的。
要点2:
选一本好的入门教程。本人极力推荐谢希仁教授的《计算机网络》,本书概念清晰,思路明确,既不肤浅又不是很深刻且面面俱到,如今已经出到第六版,本书阅读不得低于3遍。
要点3:
针对某个协议,深刻理解其报文格式是学习的关键。协议程序化后就是“数据结构+算法”,报文格式就是“数据结构”。
要点4:
必定要动手实验,这能够加深对协议理解。好比能够用网络抓包(如wireshark)学习某个协议的算法,如ARP的发现过程,TCP的握手协议,TFTP的文件传输原理。还能够网络编程,如简单的网络攻击软件制做等。
在浏览器发送信息到服务的时候,在通讯协议的过程当中,会分为四层:
首先,是应用层(http协议),封装一些要传递的信息。
其次,到传输层(tcp协议), tcp协议对应用层数据进行打包。
而后,到网络层(ip协议),经过ip找到对应的服务器。
最后,到链路层(经过物理的介质传输数据)。
每一层都会对上一层进行打包。
客户端(浏览器) —> 应用层 (http,https,DNS)—> 传输层(TCP, UDP) —> 网络层 (IP)—>物理层—> 服务器
—> 物理层—>网络层 —> 传输层 —> 应用层 —>具体的应用处理
你先在浏览器里面输入 https://www.kaola.com ,这是一个URL。浏览器只知道名字
是“www.kaola.com”,接着它打开地址簿去查找(DNS),查找到对应的 IP(106.114.138.24) 地址,
知道了具体的 IP 地址后,浏览器开始打包请求(HTTP):
通过应用层封装后,浏览器会将应用层的包交给下一层去完成,经过 socket 编程来实现。下一层是传输层(TCP, UDP),TCP 协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操做系统每每经过端口来判断,它获得的包应该给哪一个进程。
传输层封装完毕后,浏览器会将包交给操做系统的网络层。网络层的协议是 IP 协议。在 IP 协议
里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即电商网站所在服务器的
IP 地址。
因而操做系统将 IP 包交给了下一层,也就是MAC 层。网卡再将包发出去。因为这个包里面是
有 MAC 地址的,于是它可以到达网关。
网关收到包以后,会根据本身的知识,判断下一步应该怎么走。网关每每是一个路由器,到某个
IP 地址应该怎么走,这个叫做路由表。
走到最后一个网关后,经过 IP 找到具体的机器,经过端口找到对应的应用进行处理该笔请求。
参考资料:
①书籍《图解HTTP》
②极客时间|趣谈网络协议 --刘超