网络协议之协议简介与网络分层

  • 在划分网络层级时,首先应该理解什么是协议,那么什么是协议呢?
    • 协议可以理解成一种规则,最普通的来说,比如说语种,如果你只会汉语,突然有个人对你讲英语或者日语,你肯定一头雾水,你心里肯定在想这傻逼在说啥呢。其实这也表明,在沟通的时候,我们双方都要按照一定的规则去交流,否则就是在自娱自乐了。所有,人与机器的交流也是建立在一定的规则之内的,而这种规则也可称为协议。
    • 既然协议是一种规则,那么这些规则包含哪些因素呢?
      • 第一是语法,就是说你这一段内容要符合一定的规则,例如对于一个类的定义,就必须形如:class person:***,JSON文件格式是{.....},这就是所谓的语法。
      • 第二是语义,就是这段内容是有具体意义的,例如n +=1 ,这表示是n自加1。
      • 第三是顺序,就是交代先干啥后干啥,比如说TCP建立连接的三次握手协议,第一次握手,第二次握手,第三次握手,每一次握手都需要做哪些事,不可能去瞎胡乱握手,每个动作的执行都是具有前因后果的。
      • 以上三个因素,被称为协议的三要素。
    • 在网络这个生态圈里,如果没有一定的规则,你想想会是什么样的后果?要怎么发送数据出去,你收到的数据来自那儿,慢慢的你就会迷茫,我是谁,我在那儿。网络生态圈就像人类社会一样,如果社会没有法律来保证,社会就会不安宁,法律约束了人的行为准则,保证了社会的正常秩序,而在网络生态圈里,各种协议就起到了类似法律的作用,保证了网络生态圈的正常运行。
    • 那么,在各个网络分层中用到的的网络协议有哪些呢?
      • 应用层
        • 当你要搜索牛郎织女的故事的时候,首先假如你要在百度上搜索,你得首先在浏览器中输入www.baidu.com这个URL打开百度搜索栏,但是其实你并不知道百度的服务器放在哪儿的,于是浏览器就去地址薄去查找,你并不需要知道它是怎么去执行的,这是浏览器自动完成的,其中它会使用地址簿协议DNS或者HTTPDNS协议,最终通过这个协议你就会拿到14.215.177.39这个ip地址,这相当于是网络世界的门牌号。
        • 知道了这个目标ip后,浏览器就要打包你的请求,通常会使用HTTP协议来包装你的请求。此上种种动作中包括的DNS,HTTP,HTTPS协议都是应用在应用层的。

      • 传输层
        • 经过如上应用层的封装后,就会将这个封装好的包发送出去,要发给谁呢?自然要发给传输层了,我都打包好了,你难道还要我自己送过去,那是不可能的,要不要你传输层干吗,混吃等死吗?当你的包到达传输层后,传输层就要完成自己的职能了,实现端到端的数据传输,即由此IP到彼IP。这一层主要用到了两个重要协议,TCP协议和UDP协议,其中TCP是一种面向连接的协议,就是说它很顽固,不达目的不罢休,TCP发送包的时候,一定要保证把这个包送到目的地,如果不能到达,就一直重发,直到到达。而UDP是一种无连接的协议,只管发,它才不管你有没有收到。在TCP传输中,TCP封装的包里面会有两个端口,一个是本地浏览器的监听端口,另一个就是目标地址监听的端口,通常操作系统会通过端口来判断,将得到的包给哪个进程,

      • 网络层
        • 传输层封装完毕以后,浏览器会将包就给操作系统的网络层,这里就要用到IP协议了,在IP协议里会有源IP地址,即浏览器所在设备的IP地址(也指本机地址)以及目标IP地址(即百度服务器的地址),既然操作系统已经知道了要去哪儿,要去干什么,接下来就是去找要去的地方了,这个时候是不是就得把谷歌地图拿出来了,可是操作系统虽然知道了这个门牌号(IP地址),可是它并不知道服务器究竟是住在哪个小区的,这时候就得靠关系了,那么这个关系是什么了,自然就是网关了,首先本地网关判断这个服务器是不是在本地(一般默认的网关的Ip地址为192.168.1.1),显然不是,那么网关就找自己的关系,它得给其他的网关发消息,一直去找这个目标。不知道你有没有注意,在一个网络中,你选择了自动分配IP的时候,可能你关机重启后你的本机IP地址就会不一样,这是怎么回事呢?其实在操作系统启动的时候,DHCP协议会自动配置IP地址。

      • MAC层
        • 你有想过操作系统是怎么找到网关的呢?在本地的话,它就要以泼妇骂街的形式来工作了,大喊一声:谁是王富贵(192.168.1.1),你二大爷给你留了一千万,请过来认领。网关‘听’到后,就会回答,我就是王富贵,可是口说无凭,还得检查下它的身份证,确认好它就是那个村的王富贵后,就让他签字画押,把这一千万给他了。类似,王富贵这个身份证ID就类似网关的地址了,也就是网关的MAC地址(形如:FC-D7-33-DF-9E-AB),在这里,这一声大喊可是大有名堂的,其中就用到了ARP协议。

      • 找到网关了,接下来要怎么走呢,敢问路在何方?我不就想看个牛郎织女的故事吗,至于这么玩我吗,非得给我弄个九九八十一难出来。当你走到网关这里了,是不是感觉就快到存放牛郎织女故事的地方了,很抱歉的通知您,你刚刚走了五分之一的路程,既然这路是自己选的,含着泪也要走完,那么接下来要怎么走呢?现在已经找到了本地的网关,接下来要去什么地方,就需要网关来协助了,网关往往就是一个路由器,它里面会有一个路由表,告诉你到某个IP地址怎么走,这有点像古代的驿站,不同的驿站之间是有联系的,因此不同的驿站之间都会知道怎么走,驿站之间的交流就类似于路由器之间的交流,路由器之间是怎么交流的呢?自然是路由协议了,常用的有OSPF和BGP。接下来网络包就按照上面的模式一个一个问,直到找到最后一个网关,这个网关就有去目的地的信息。接下来你知道这个网络包要干嘛了吧?对,那就是对着网关‘喊’啊,谁是目标服务器?目标服务器听到后,就把它的MAC地址回复回去,网络包就会根据这个MAC地址找到目标服务器,目标服务器见到这个网络包后首先取下MAC头,确认是来找自己的,接下来将包丢给服务器的网络层,取下IP头,也对上后将包再丢给传输层,在这一层里,对于收到的包,都会按照原路回复一个消息,给本机TCP层报个平安(即三次握手中的第二次握手),如果回复的消息在半路走丢了或者出意外了呢?那么本机的TCP层就会重新发送这个包,直到收到平安到达的回复消息。本机收到回复后,接下来它的应用层才是会重新发送查看牛郎织女故事的请求,这个网络包到达服务器的TCP层后,在TCP头里面找到目标服务器监听的端口号,将请求发到这个端口,目标服务器的端口接收到这个请求后,就执行想关的进程,至于这里的进程怎么执行的就不用去深究了,其实大部分都用到了RPC服务架构,即远程过程调用,让其他人来完成要做的事,目标服务器只要返回需要返回的结果就可以了。如下是一个基于ZMQ的JSON-RPC的小架构尝试,https://github.com/simonlzw/Daily-Code-Training/tree/master/JSON_RPC
  • 终于看到牛郎织女的故事了,这一路走来也真是不容易,其实除了以上的协议外,各个层之间还有很多其他的协议,这里做个总概括。
    • 应用层:HTTP、HTTPS、DNS、RPC、DHCP、DHCP、RTMP、P2P、GTP
    • 传输层:TCP、UDP
    • 网络层:IP、ICMP、OSFP、BGP、IPSec、GRE
    • 数据链路层:ARP、VLAN、STP
    • 物理层:网线
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值