@Gugoole
2019-01-01T15:42:21.000000Z
字数 1828
阅读 1217
计算机网络 协议 笔记
最近在极客时间学习刘超老师的浅谈网络协议,做一些总结,以加深印象
《圣经》中有一个通天塔的故事,大致是说,上帝为了阻止人类联合起来,就让人类说不同的语言。人类没法儿沟通,达不成“协议”,通天塔的计划就失败了。但是千年以后有一种叫 “程序猿” 的物种,敲着一种这个群体通用的语言,连接着全世界所有的人,打造这互联网世界的通天塔。如今的世界,正是因为互联网,才连接在一起。
要想打造互联网世界的通天塔,只教一台及其做什么是不够的,需要通过网络协议,才能使一大片机器互相协作,共同完成一件事。
要想理解这个我们首先我们要理解下面这四个问题:
网络包的格式很复杂,一个程序也很复杂,如果说一个复杂的程序只有一层,那么必然会造成混乱,因此为了明确职责,复杂的程序都要分层,这是程序设计的要求。比如复杂的电商会分数据库层、缓存层、Compose层、Controller层和接入层,每一层专注做本层的事情。
“通信协议就像是两座没有天桥的双子楼,你要想从A座的24层到达B座的24层,就得先下楼,再上楼”
再发送请求的时候,Buffer每经过一层,就会加上该层的头部,再接着传给下一层,在返回请求的时候,则是每经过一层,就要剥离该层的头部,再传给上一层。
TCP发送每一个消息,都会带着IP层和MAC层。因为TCP每发送一个消息,IP层和MAC层的所有机制都要运行一遍。我们只注意到TCP的三次握手,其实IP层和MAC层为此也忙活了好久。
例如我们在浏览器里面输入https://www.geektime.com,这是一个URL,浏览器只知道名字是www.geektime.com,但是不知道具体的地点,所以不知道应该如何去访问。于是它打开"地址簿"DNS协议去查找对应的ip地址,还可以使用一种更加精准的查找协议HTTPDNS。浏览器知道了目标IP地址后,就会打包它的请求,一般使用HTTP协议。但是对于一些需要加密传输的请求,则会使用HTTPS协议。
DNS,HTTP,HTTPS所在的层,我们称为应用层,应用层封装好后,浏览器会将封装好的包交给下一层即传输层来完成,通过socket编程来实现。传输层有两种协议,一种是面向无连接的UDP协议,另一种是面向连接的TCP协议,这里所谓面向连接就是,TCP会保证这个包能够到达目的地。如果不能到达,就会重复发送,直到到达为止。传输层封装完毕后,浏览器会将包交给操作系统的网络层。
网络层的协议是IP协议,IP协议里面会有源IP地址,即浏览器所在机器的IP地址和目标IP地址。
IP层在数据包加上头部后,会发给数据链路层,操作系统会指示ARP协议来判断目标IP地址是内部网络还是外部网络,并将目标IP地址发给网关,并且在数据包头部加上MAC头,然后将IP层交给下一层——MAC层
网关收到数据包后,会根据自己的知识判断下一步应该怎么走,这个叫做路由表,这种沟通的协议叫做路由选择协议,常用的有OSPF和BGP
当到达最后一个网关的时候,它知道这个数据包要去的地方,通过ARP协议,得到目标机器的MAC地址,目标机器发现MAC地址对上了,就取下MAC头来,发送给操作系统的网络层,发现IP也对上了,就取下IP头,IP头里面会写上一层封装的是TCP协议,然后将数据包交给传输层即TCP层。在这一层里,对于收到的每个数据包都会有一个回复的包说明收到了,这个包会按原来的路径走回去。如果过了一段时间还是没有收到回复,就会再次发送,直到收到数据包已到达的回复为止,这就是TCP的三次握手。TCP头中会记录目标端口号,可以找到网站的进程正在监听这个端口,网站的进程就能得到请求的内容了
