Linux属于网络操作系统,所以网络功能是Linux的重要核心功能。我们知道网络模型包含总线型网络、星型网络、令牌环状网络等。数据在网络上传输是以电磁信号进行传输的,例如在总线型网络中,在同一时刻只能有一个信号在传输介质中传送,如果有多个主机同时发送信息,那么就会产生争用传输介质的情况,此时为了解决这个问题,我们就产生了MAC:Media Access Control的解决方案,即介质访问控制。我们给每一台接入网络中的设备一个唯一的识别码,从而可以使MAC这种算法产生的仲裁结果得以实行,每一台主机都会有一个MAC地址,而MAC地址使用的CSMA/CD技术完成网络线路仲裁,这个技术最早来源于以太网网络,传输信号通常会按照:载波侦听多路访问,冲突检测的方式进行数据的探测并传输(如下图)。此外例如环状网络是通过令牌环方式实现等等。 星型网络主要是通过一个HUB集线器将所有的主机进行连接,HUB集线器本身没有隔离信号等机制,只是简单的将主机连接在一起,所以数据在传输的过程中仍然会发生冲突。星型网络从整体上看仍然是属于总线型网络,当CSMA/CD的机制传输数据并且网络中的主机过多时,数据传输会有阻塞,冲突等,此时可以将一个整体的网络进行拆分,例如形成两个网段,中间使用网桥设备进行连接(如下图),在网桥中会有一个数据表记录哪一台主机在哪个端口的对应关系,因此当A主机发送的目的地在A主机端网络,那么信号就不会占用B端网络端口的信道,从而降低信号冲突概率。 一、交换机原理: 按照这个思路,当我们在网桥设备上划分多个网段,并且每个网段里只有一台主机时,此时冲突范围便限定在了主机和接入网桥设备的节点这根线路范围中(如下图),此时我们可以做到当A主机和B主机通信的时候,C主机仍然可以自由的和D主机进行通信,而不会因为CSMA/CD机制而导致通信信道冲突阻塞,而这个智能网桥设备就是我们熟知的“交换机”,因此交换机可以隔离冲突域。 二、路由器原理: 当两个交换网络相连的时候(如下图),例如主机A需要和M主机通信,当时1号网络中的A主机并不知道M主机具体的MAC地址等位置信息,如果只是简单的将1号网络和2号网络用通信线缆连接起来,那么广播信号便会充斥整个网络,如果网络中的主机量很大时,会形成广播风暴,从而影响整个网络的通信性能,此时我们需要使用一个特殊的设备将1号网络和2号网络连接起来,使得中间设备在接受广播信号时不予理会直接丢弃,但是又能够完成不同网段中的主机通信的需求。MAC地址是计算机通信地址,传输数据必须使用MAC地址,但是MAC地址只能标识不同的主机,不能划分不同的网络,所以属于平面地址,在次基础上我们引入了逻辑地址(IP地址)的概念,可以对不同的网络进行划分。例如A主机的逻辑地址是1.1,它声明自己需要传输数据的目的地是2.1,此时中间设备发现是不同的网络之间的通信,路由器上的网关是交换机网络通信的关卡它们也有自己的MAC地址辅助通信,1号网络的广播通过中间设备后只在2号网络的广播中继续发送,最后主机M将自己的逻辑地址和MAC地址返回给发送方,从而完成通信。中间的特殊设备就是大家所熟知的“路由器”,因此路由器可以隔离广播域。 三、OSI七层协议: OSI七层协议的由来:由于网络连接过程相当复杂,包括硬件数据封装与应用程序的相互链接等,如果想要写一个网络链接的全部功能都集中在一起的程序,那么任何一个环节出错,整个程序都要改写,非常麻烦,因此我们将整个网络连接过程分成多个层次来处理,且每层数据传递是顺序传递的,这就是OSI七层协议。七层协议具有以下特点: 每个层次都有特定的独立的功能 每个层次的代码可以独立编写 层与层次之间的功能互不干扰 每一层次只认识对方同一层的数据 物理层:由于网络传输介质传输的是比特位(01),因此物理层必须定义所使用的传输设备的电压和信号等,同时还必须了解数据帧转换成比特流的编码方式,最后链接实际传输介质并发送/接收比特信号。 数据链路层:硬件部分,主要处理MAC数据帧,传递给物理层转换成比特流;软件部分主要处理来自上层的数据表转换成MAC的格式。相关协议:PPP 网络层:定义IP地址,定义计算机之间的链接建立,终止维护等,数据包的传输路径等。相关协议:IP、ICMP、ARP、RARP 传输层:定义发送端与接收端的链接技术(TCP,UDP)同时包括该技术的数据包格式,数据包的发送,流程的控制等,以确保各个资料数据可以正确无误的到达目的端。相关协议:TCP、UDP 会话层:确定网络服务建立链接的确认。 表示层:定义网络服务(或程序)之间的数据格式的转换,使数据格式标准化,也包括数据的加密解密也是在这层上处理。 应用层:将数据发送给应用程序,并最终展示给用户。相关协议:HTTP、FTP、SMTP等。 虽然OSI七层协议的架构非常严谨,但是由于太过严谨导致程序编写相当不容易,因此产生了TCP/IP协议。(如下图) 四、TCP/IP的网路层相关数据包与数据 (1)IP数据包的封装: 了解IP数据包的封装,才能知道IP到底如何产生的,IP数据包可达到65535bytes 相关名词解释如下: IP version:IP版本号,包括IPV4或者IPV6 Header Length:首部的长度 Type of Service:服务类型 Total Length:整个报文的长度 Identifiction:标记符 Fragment Offset:片偏移 DF:没有更多的片 MF:更多的片 Time-To-Live:生存时间 Protocol:协议,常见的是TCP和UDP协议 Header Checksum:首部校验和 Source IP Address:源IP Destination IP Address:目的IP Options:可选项 Data:数据 (2)面向连接的可靠TCP协议: TCP(Transmission Control Protocol)意即传输控制协议,不同于UDP(User Datagram Protocol)用户数据报协议。TCP属于可靠的传输控制协议,在网络IP层之上是TCP传输层,在传输层数据被打包成TCP数据包。 相关名词解释如下: Source Port Number:源端口号 Destination Port Number:目的端口号 Sequence Number:序列号 Acknowledgement Number:确认号 Header Length:首部的长度 Reserved:保留位 URG:紧急位 ACK:确认位 PSH:推送位 RST:重置位 SYN:同步位 FIN:结束位 Window Size:窗口大小 TCP Checksum:TCP的校验和 Urgent Pointer:紧急指针 Options:可选段 Data:数据 (3)IP地址的种类划分: 在IPV4中有两种IP类别 Public IP:公共IP,经由InterNIC统一规划IP,只有这种IP才可链接到Internet。 Private IP:私有IP或保留IP,不能直接连上Internet的IP,主要用于局域网络内的主机链接规划。 ***Public IP公共IP如下:***(注:128+64+32+16+8+4+2+1) A类:255.0.0.0~8-子网掩码 0-000 0001 ~ 0-111 1111【1~127】 127个A类地址,127用于回环,总共有2^7-1个网络地址 容纳多少个主机:2^24-2 主机位全0:网络地址 主机位全1:广播地址 B类:255.255.0.0~16-子网掩码 10-00 0000 ~ 10-11 1111【128~191】 64个B类地址,总共有2^14个网络地址(因为第一个8位中有剩余的6位网络地址,第二个8位中全部都是网络地址) 容纳多少个主机:2^16-2 C类:255.255.255.0~24-子网掩码 110-0 0000 ~ 110-1 1111【192-223】 32个C类地址,总共有2^21个网络地址 容纳多少个主机:2^8-2 D类: 1110-0000 ~ 1110-1111【224-239】 E类: 【240-255】 Private IP私有地址如下: 私有地址可以在以太网中使用,但不会在公共互联网中使用 A类:10.0.0.0/8 ~ 10.255.255.255/8 B类:172.16.0.0/16 ~ 172.31.0.0/16 C类:192.168.0.0/24 ~ 192.168.255.0/24 (4)划分子网: 一个大网络分成若干个子网,则网络ID向主机ID借位实现。例如要划分201.1.2.0/24网络为2个子网,一个子网需要容纳4台主机,另一个子网需要容纳6台主机。则可以从第四个主机位8位中划分出2位出来作为网络位使用。可以得到如下的四种组合: 00(全0的情况不考虑) 01-00 0001 ~ 01-11 1110【65~126】201.1.2.64网路地址,201.1.2.127广播地址 10-00 0001 ~ 10-11 1110【129-190】201.1.2.128网络地址,201.1.2.191广播地址 11(全1的情况不考虑) (5)TCP的三次握手及四次挥手详解: 三次握手: 第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口。 第二次握手:服务器发回确认包ACK应答,即SYN标志位和ACK标志位均为1。 第三次握手:客户端再次发送确认包ACK,SYN标志位为0,ACK标志位为1。 四次挥手: 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。 第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务器进入CLOSE_WAIT状态。 第三次挥手:服务器发送一个FIN,用来关闭Server到Client的数据传送,服务器进入LAST_ACK状态。 第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器确认序号为收到序号+1,服务器进入CLOSE状态,完成四次挥手。 五、Linux网络配置示例: 早期红帽5系统上通过/etc/modprobe.conf的配置文件中使用“alias”别名来设置设备名,目前红帽6系统中是在/etc/udev/rules.d目录下设置设备名。 #ifconfig -a eth1 解释:显示所有接口的配置信息。 #ifconfig eth1 192.168.10.123/24 解释:配置的地址立即生效,但重启网络服务或主机都失效。 网络服务: RHEL5:/etc/init.d/network {start|stop|restart|status} RHEL6:/etc/init.d/NetworkManager {start|stop|restart|status} iproute2:比较强大的网络管理软件包