Linux --网络基础概念
一.网络发展
独立模式:在早期计算机之间是相互独立的,机器之间的数据只能通过软硬盘来传输,这就代表无法同时完成任务,需要前面的计算机完成各自的任务经过硬盘传递数据再完成自己的任务,效率十分低下。
网络互联:多台计算机连接在一起可以完成数据共享
局域网:计算机的数量更多了,此时需要通过交换机和路由器连接在一起
广域网:现在万物互联的情况就是广域网,能够将世界各地的计算机都连在一起
二.初识协议
协议:就是一种约定,计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表⽰ 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双⽅的数据格式.协议本质也是软件,在设计上为了更好的进⾏模块化,解耦合,也是被设计成为层状结构的。
OSI(Open System Interconnection,开放系统互连)七层⽹络模型称为开放式系统互联参考
模型,是⼀个逻辑上的定义和规范; OSI把⽹络从逻辑上分为了7层. 每⼀层都有相关、相对应的物理设备,⽐如路由器,交换机; OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最⼤优点是将服务、接⼝和协议这三个概念明确地区分开来,概念清楚,理论也⽐较完整.通过七个层次化的结构模型使不同的系统不同的⽹络之间实现可靠的通讯;但是, 它既复杂⼜不实⽤; 所以我们按照TCP/IP四层模型来讲解.
三.TCP/IP五层(或四层)模型
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等. 我们的⽹络编程主要就是针对应⽤层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机.
⽹络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)⼯作在⽹路层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作. 有以太⽹、令牌环⽹, ⽆线LAN等标准. 交换机(Switch)⼯作在数据链路层.
物理层: 负责光/电信号的传递⽅式. ⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等. 集线器(Hub)⼯作在物理层.
四.再识协议
⽹络通信最⼤的特点就是主机之间变远了,此时就会产生许多问题,例如:发数据给另外一个主机首先需要发送给路由器,如何发生数据到路由器?网络中千千万的主机如何找到另一个主机?数据发送丢失了怎么办?接收方主机应该如何处理数据?这些问题都是导致协议产生的根本原因。
所以协议的本质其实是一种能分层的解决方案,因为多个问题是分层的。
协议不只是在网络中的,它也和计算机系统息息相关。

关于协议的朴素理解:所谓协议,就是通信双⽅都认识的结构化的数据类型因为协议栈是分层的,所以,每层都有双⽅都有协议,同层之间,互相可以认识对⽅的协议。
五.网络传输基本流程
局域网通信原理(以太网为例):每个电脑的网卡都有自己的Mac地址,这个地址在该局域网中是唯一的(在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的,虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址).发送端主机会向对应接受端主机发送信息,接受方会对比自己的Mac地址与数据中包含的是否一致,一致则会接受,不一致就丢失。
以太⽹中,任何时刻,只允许⼀台机器向⽹络中发送数据,如果有多台同时发送,会发⽣数据⼲扰,我们称之为数据碰撞,所有发送数据的主机要进⾏碰撞检测和碰撞避免,没有交换机的情况下,⼀个以太⽹就是⼀个碰撞域。
初步明⽩了局域⽹通信原理,再来看同⼀个⽹段内的两台主机进⾏发送消息的过程
数据从用户下发以后,经过每一层时都会增加一个报头,这个报头可以相当于每一层的协议,需要进行封装和解包
报头:就是对应协议层的结构体字段,除了报头,剩下的叫做有效载荷,所以报⽂ = 报头 + 有效载荷。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame). 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装。⾸部信息中包含了⼀些类似于⾸部有多⻓, 载荷(payload)有多⻓, 上层协议是什么等信息. 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部, 根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理.
在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃定向下将数据交付给下层协议, 最后由底层发送,然后由对⽅主机的底层来进⾏接受,在⾃底向上进⾏向上交付,下⾯是⼀张⽰意图。

六.跨网络传输
ip地址:IP 协议有两个版本, IPv4 和 IPv6 . 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指 IPv4。
IP 地址是在 IP 协议中, ⽤来标识⽹络中不同主机的地址;对于 IPv4 来说, IP 地址是⼀个 4 字节, 32 位的整数;我们通常也使⽤ "点分⼗进制" 的字符串表⽰ IP 地址, 例如 192.168.0.1 ; ⽤点分割的每⼀个数字表⽰⼀个字节, 范围是 0 - 255
跨⽹段的主机的数据传输. 数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器,所以路由器中会集成多种IP协议和网络驱动程序。

目的IP的意义:主机发送数据到达网络层时发现目标IP不是同一局域网的,所以会把数据发送到路由器,由路由器转发到目标IP的主机。然后结合封装与解包,体现路由器解包和重新封装的特点,完整跨网发送数据的流程图: