09月25, 2018

网络协议[01_TCP/IP基础与IP通信]

互联网上的设备间数据的传输势必要遵循相同的规则,如如何开始通信,如何选择通信目标,如何传输数据等等,这一系列的规则统称为网络协议,而当今互联网协议集合总称为TCP/IP协议。

TCP/IP协议族

互联网上的设备间数据的传输势必要遵循相同的规则,如如何开始通信,如何选择通信目标,如何传输数据等等,这一系列的规则统称为网络协议,而当今互联网协议集合总称为TCP/IP协议。

分层管理

TCP/IP协议最大的特点就是分层管理,从上到下依次分为:

  • 应用层 : HTTP FTP DNS
  • 传输层: TCP UDP
  • 网络层: IP
  • 数据链路层: MAC

分层设计原因

复杂的程序都需要分层。

正如Web系统设计时分为Controller、Service与Mapper三层,所有复杂的系统都需要分层设计以达到逐一简化的目的,处于某层的程序只需专心的处理该层逻辑,既明确了职责又简化了逻辑。

通信周期

对于一次基于HTTP的请求/响应模型的网络通信,客户端与服务端的协议执行顺序是相对立的。

客户端:自上而下的过程 服务端:自下而上的过程

alt

客户端:

  • 当用户通过浏览器向服务端发起一次请求时,该请求会先经过应用层将请求的内容装载在HTTP请求体中并附上请求头(HTTP头)信息,而后向下传递。
  • 传输层接收到上层信息并添加上TCP头:源端口号(port)与目标端口号,而后向下传递。
  • 网络层接收到带有TCP头/HTTP头的信息并添加上IP头:源IP地址与目标IP地址,而后向下传递。
  • 最终数据链路层接收到信息并添加上MAC头:源MAC地址与目标MAC地址(ARP协议)。

服务端:

  • 此时网络包从网口经过并被派发到数据链路层,该层摘下MAC头并比对其中目标MAC地址与本机MAC地址是否匹配,如匹配则将信息向上传递。
  • 网络层接收到信息,并摘下IP头并比对其中目标IP地址与本机IP地址是否匹配,如不匹配则转发出去,反之则向上传递。
  • 传输层接收到信息根据不同的传输层协议(TCP/UDP)进行不同的逻辑处理,如是一个TCP协议的正常数据包根据信息传达给监听目标端口的程序。
  • 程序(如浏览器)解析应用层数据并给予响应返回。

网络上的数据包都是完整的,只能有下层无上层,不能只有上层无下层。

MAC头与IP头

当数据包经过MAC层和网络层时会被添加上各自的报文头信息,其细节如下: alt

当访问一个IP时,会先判断本机IP与目标IP是否属于同一网段(CIDR与子网掩码做AND操作得到网络号),如果属于同网段则直接将源IP地址与目标IP地址填入,再通过ARP协议(已知IP求MAC地址)获得目标MAC地址后填入本地MAC与目标MAC后将数据包发出。如果不属于同网段,则将数据包发送至该网段网关地址——通常为该网段第一或第二个地址(如192.168.0.1)。

静态路由

路由即网关对数据包的转发策略,在静态路由规则下网关维护着不同网段的转发列表,依次进行转发。 在转发时必定会对MAC地址做出改变(因为MAC地址时局域网内的概念,数据包在不同网段间传输需要改变MAC地址)。而IP地址可根据不同的网关类型改变或不变。

不改变目标IP的网关称为转发网关 改变目标IP的网关称为NAT网关

网关转发

alt

  • SA与SB不在同一网段,所以SA会将数据包传输至该网段网关(192.168.1.1)

    SMAC: AMAC TMAC: 网关A MAC (ARP获得) SIP:192.168.1.101 TIP:192.168.4.101

  • 网关A(路由器)做为三层设备摘下数据包MAC头匹配后利用静态路由发现TIP需要从网关B(192.168.56.2)网口发出,于是将网络包转发

    SMAC: 网关A MAC TMAC: 网关B MAC (ARP获得) SIP:192.168.1.101 TIP:192.168.4.101

  • 网关B与网关A一样接收到数据包后凭借静态路由发现TIP需要从(192.168.4.1)发出,于是通过ARP获得SB MAC地址后将包发出

    SMAC: 网关B MAC TMAC: SB MAC (ARP获得) SIP:192.168.1.101 TIP:192.168.4.101

  • 最终SB在经过三层MAC与二层IP地址校验后,顺利接受到网络包数据 在网关转发模式下,整个转发过程中数据包里的SIP与TIP无需变化,只是在每一次转发中改变了SMAC与TMAC。

NAT转发

alt

SA与SB的IP相同但属于不同网段下的私有IP,所以在跨网段访问时需要通过NAT协议(Net Address Translation)将私有IP映射到公有IP上。

  • SA需要访问SB即访问SB的NAT网关地址192.168.56.2,SA判断该地址夸网段,所以先转发到SA网关

    SMAC: SA MAC TMAC: SA网关 MAC (ARP获得) SIP:192.168.1.101 TIP:192.168.56.2(SB NAT后公网地址)

  • SA网关通过静态路由发现要访问192.168.56.2需要从192.168.56.1网口发出,于是更改自身MAC与IP地址(改为出口网卡地址)将数据包转发

    SMAC: SA 网关MAC TMAC: SB网关 MAC (ARP获得) SIP:192.168.56.1 TIP:192.168.56.2(SB NAT后公网地址)

  • SB网卡接收到包,根据NAT协议发现192.168.56.2的包需要转发至192.168.1.101,所以通过静态路由将包从192,168.1.1口发出

    SMAC: SB 网关MAC TMAC: SB MAC (ARP获得) SIP:192.168.56.1 TIP:192.168.1.101(SB 局域网内私有地址)

此时SB成功接收到SA的数据包,又因为最后一条属于网关内转发所以跳转逻辑只发生在三层设备上(路由器更改MAC地址即可),故在SB数据回包时只需要将目标回至192.168.56.1,网关A同样做NAT协议即可与SA通信。

总结

  • TCP/IP采用分层设计的方式使各层设备分工明确已达到简化系统复杂度的目的。
  • 网络包通信需要按序层层包装与解析,可以有下层协议无上层协议,但是不能只有上层协议无下层协议。
  • 如果数据包离开局域网就需要网关进行转发,不改变目标IP的方式称为网关转发,反之称为NAT转发

本文链接:https://check321.net/post/network_basic.html

-- EOF --