网络基础

网络分层

1
2
3
4
5
应用层: DHCP、HTTP、HTTPS、RTMP、P2P、DNS、GTP、RPC
传输层: UDP、TCP
网络层: ICMP、IP、OSPF、BGP、IPSEC、GRE
数据链路层: ARP、VLAN、STP
物理层: 网络跳线

协议套件

举例网络正常传输过程

1.一个请求从浏览器请求服务器时,服务器收到了浏览器的请求后
2.内容、http头、tcp头、ip头、mac头被包装后进行发送
3.首先被摘掉的是mac头、ARP会发出广播查看这个包能被哪位仁兄接收
4.当包被下层接收后,会取下ip头查看是否是发给我自己的,如果是就留下,不是就进行转发
5.如果是自己的,则丢给应用,因为tcp里面有端口号
6.这个应用估计就是个浏览器了,取下http头,根据内容展示相应的内容
参考资料 ARP


总结:层与层的关系更是包含关系,每层其实都是完整的包,只是每层对应做的事情不一样而已。可以没有上层,但是不能没有下层。

但是这样还有很多问题,比如
1.ARP只能支持同一个网段的通信
2.IP地址是怎么来的,又是怎么没的
3.等等…

媒体访问控制 MAC

当电脑配置好ip地址,通过集线器连接之后,就能正常广播网络包了,
但是这里不能乱,要制定收发的规则(谁先发,谁后发等。),错误处理等等,这就需要MAC来解决。这里有个名词叫做多路访问。至于发给谁,谁接收,就需要mac地址来解决,这玩意号称全世界唯一不重复。类似于身份证。在发送的时候,带上目标的MAC地址和源MAC地址,以及相应的类型(ARP;IP数据报),就能被收到了。还有一个问题,就是在以太网中,知道了ip地址,确不知道mac地址,那怎么办,这里就需要ARP,广播出去,谁是这个ip的,谁来回答,收到回到后,将包发送过去。然后将目标ip和mac缓存起来。


总结下:
1、mac层主要解决了多路访问控制,接收靠的是网络格式
2、ARP主要是广播形式

DHCP

linux有自己设置ip的命名,比如ifconfig。
但是也不是怎么配置都可以的,如果配置的ip不正确,容易造成网络包发送不出去。
比如身处网络192.168.1.x的网络环境,私自将ip配置了10.100.158.47,如果需要将网络包发送到192.168.1.x上,网络包是出不去的。首先这里不知道目标的mac的地址,跨网段调用需要网关,还需要配置网关的地址,才能将包发到对应的机器上。
所以配置ip是一件比较麻烦的事情,才有了dhcp简称动态主机配置协议。
dhcp的工作方式大概是这样的,当需要加入这个网路的时候,但是确没有ip地址,则会发送bootR(bootRequest)以0.0.0.0的ip地址,发送目标地址255.255.255.255,带着自己的mac地址以广播的形式发送,这时,如果有存在dhcp server就会有相应,将加入的机器的回应以广播的形式再发送回去,还将子网掩码、网关、ip地址租用期等信息返回。如果存在多个dhcp server,一般会取收到的第一个作为回应,同样是个广播,等dhcp server确认后,才确定了信息,可以进行联网访问。

网络拓扑结构

简单来说,是因为局域网与局域网之间互相连接形成的比较复杂化的网络结构。交换机通过广播方式学习到网络拓扑结构。
网络环路的产生:机器ARP发出去的包,分别被多个交换机学,交换机在收到机器自身发送的ARP包和别的交换机发送的ARP包对应的网口位置不同造成了学习混乱,不停地发送ARP。
环路解决: STP协议,会根据BPDU,把其中的线路切断只保留单个交换机的链路,拆条环形后基本也就是树形结构,简称生成树协议
STP协议:
STP介绍
广播问题和安全:
如果网络广播都是全链路发送的话,如果导致一些机密的信息被抓包,会产生一些隐患。
VLAN
需要交换机支持VLAN,而层头协议上会增加一个tag字段,里面新增了vlanID,这样交换机就知道数据包发到哪里了。

联网

mac ip 头

其实在我看来,联网其实是个查找的过程。了解下NAT
NAT,
在整个过程中,数据需要被一次又一次的转发.
例:
设备A的ip地址是192.168.1.101需要连到设备B 192.168.5.11
首先A、B不在一个局域网,A将包发出去,需要经过路由器转发,一般路由器的地址为该网段的第一个或者第二个
1.通过ARP,获取路由器连接在该设备A的端口的MAC地址
2.得知目标mac地址之后,发送数据包
3.路由器需要判断下一跳从哪里发出去,得知之后,ARP获取下一跳的MAC地址,替换目标MAC地址为下一跳
4.NAT改变源MAC地址和源IP地址的公网身份
5.反复步骤3,设备B收到数据包

路由

路由需要学习,选择最短的路径自然能提高网络传输的速度,路由器与路由器之间通过相互传递,构建网络图,寻找最短距离。
基于bellman-ford的距离矢量路由算法
基于dijkstra链路状态路由算法
动态路由协议:
OSPF:开放式最短路径优先
一般用于内部网络,基于链路状态路由算法。
BGP:外网路由协议
用于外部网络,基于距离矢量路由算法。