初识网络

"网络概括"

Posted by faxiang1230 on January 9, 2018

网络概廓

第一次开始真正接触网络,开始动手搭建做一些事情,难免有误,敬请指正!
计算机三大支柱:操作系统,编译原理,网络共同支撑着整个互联网,不过平时接触这些的人比较少。除此以外,数据库也占据很重要的位置,所有的应用都需要存取数据,近些年数据量暴增,基于大数据的存取,分析等都是需要数据库在底层的支撑。

  • 1.网络基础

耳熟能详的网络模型是必备的,TCP/IP是现在事实上的标准,不过很多术语仍然是使用ISO模型,有一些的分层概念仍然在借鉴其层次划分;
物理层: 真正负责传输信号的物理设备,例如光纤,双绞线,网卡,路由,交换机等设备,在物理介质中传输信号
链路层: 开始的时候很不解物理层和链路层的区别,同样都是传输信号为什么还有分为两层呢?我们直到物理层的信号很容易受到外界干扰,举个例子,数字信号是根据高低电平来区分0和1的,但是随着传输距离增长,电压下降,低于高电平阈值时就会产生信号错误,对端收到错误的信号之后解释的数据可能校验和出错,从而决定丢弃这个包; 我们拆开USB传输线,2.0标准中是4根线,每根线除了包裹绝缘层还在外层缠绕了很多的铁丝,这个就是为了防止外界信号干扰;
链路层就是确保要传输的数据能够准确到达对端,上层不用关心传输的准确率问题;
网络层: 这个就是我们常说的IP层了,有了MAC地址为什么还要IP地址?每个网卡都有唯一的一个mac地址,为什么还需要IP地址呢?当网络内只有10台主机的时候很好说,广播一下就直到彼此的mac地址了,完全可以使用mac地址来进行通信,这也是局域网内最常使用的,动不动就发个广播要mac地址。
但是当主机到达100万台的时候还怎么直到彼此的位置呢?
所以产生了IP地址,从逻辑上划分机器的地址;

IP地址总共有A,B,C,D,E 5类地址,其中常接触的是A,B,C 3类地址,IP地址中有三种地址:网络号,子网号,主机号,为了从IP地址中知道这三种地址,还有一个网络掩码,主机号=ip & ~mask,网络号:
A类地址:1.0.0.0 - 126.0.0.0
B类地址:128.0.0.0-191.255.255.255
C类地址:192.0.0.0-223.255.255.255
子网号:网络号和主机号中间的一段就是子网号
主机基本通信过程:
如果是同一个网段中的,可以直接通过广播的形式知道所有的主机ip地址和对应的mac地址,然后在2层上就可以直接转发,代表设备就是2层交换机
如果是不同网段,那就需要一个路由来进行不同网段间转发,如何知道怎么到达目的地址就是路由需要做的事情,通常我们只需要一个默认路由地址,它会帮助我们找到正确的路径
除了路由到目的地址,IP层还需要做的是分片,主要是由于物理设备发送容量的限制,每一次网卡发送的最大数目我们称之为帧,IP层需要将数据划分为帧然后交给物理设备发送,接收的时候再次组装起来。 总而言之,IP层主要提供路由功能和分片功能
传输层: 我们通常知道的TCP/UDP,TCP是可靠的链接,最知名的就是三次握手,每一次会话之前先要握手,然后才开始真正通信,还会保证数据正确,无差错,不丢失,不重复,还要准时。而UDP是不可靠的链接,只保证尽最大能力发送,至于数据是否正确到达就不管了,正确性由更上层的协议来选择和实现.他们的应用场景也就有很大的区别:
TCP:用户需要高可靠性传输数据,比如金融,你少一个字都不行
UDP:丢失一两帧数据没啥问题,比如多媒体播放,少播一帧用户不是很介意;
应用层: 在传输层之上的统称为应用层,应用层也有很多的协议:http,ftp,telnet,snmp

一个完整的以太网数据帧结构:
image

理论的东西可以选择TCP/IP 第一卷
如何更加直观的理解协议:可以通过cisco/华为的网络模拟软件来搭建环境,没钱的吊丝需要学会使用这些软件

  • 2.网络设备

(现在我没有机会接触这些,所以就不废话了)
常见的设备有:2层交换机,3层交换机,路由器,网桥
怎么理解这些设备的用途:推荐使用网络模拟软件来搭建一些场景

  • 3.Linux内核中网络的实现

TCP/IP只是规范,还需要具体的实现才能真正连通网络,Linux内核的发展离不开网络,网络协议栈是非常核心的部分。
体现为两方面:协议规范Linux kernel的网络设备接口
协议部分会实现TCP/IP中非常核心的协议:TCP/UDP,IP(4/6),ICMP,IGMP;
路由虽然不是一个协议,但是作为网络中非常重要的部分还是值得单独列出来
每一个网卡设备都需要实现抽象的网络设备,从而嵌入到通用的网卡设备框架中。主要是中断申请,buffer申请(网卡一般都是DMA来搬移数据的),软中断(大流量场景中使用NAPI).

除了在物理设备之外还实现了一些虚拟设备来模拟真实物理设备的功能:tun/tap来模拟真实网卡,还有veth设备,bridge设备模拟网桥。这些虚拟设备很多时候可以帮你实现很多功能的,例如OPENVPN,vtun等使用的tun/tap虚拟网卡。 还有软件上的一些实现,在这里就不一一列举了,看别人家的图

怎么去理解这些东西:
先看框架性原理再仔细读code,没有别的招;
在自己的机器上配置各种虚拟设备
熟悉Linux下的各种网络工具:ping,traceroute,telent,route,ifconfig,控制tun设备的tunctl,控制bridge设备的br,还有网卡工具ethtool
抓包神器:tcpdump和wireshark

  • 4.常用的协议

ARP/RARP协议,IP协议(是时候看看ipv6的实现了),TCP,UDP
其他的协议用到的时候看RFC说明吧,没事不用看。