一、网络背景了解
1.1网络的产生
在网络还没有产生的时候,每台计算机都是相互独立的,有着自己的的数据或业务,这样使得计算机在数据共享时存在一定的问题,为了解决这样的问题,网络就产生了。
计算机网络是一种将多个计算机系统和设备连接在一起的技术,目的是为了共享资源和信息。这种连接使得设备之间可以进行数据传输和通信,常见的网络包括局域网(LAN)、广域网(WAN)和 城域网(MAN)。
1.2 初识协议
不同的计算机如何才能进行通信呢?计算机之间的传输媒介是光信号和电信号.通过"频率"和"强弱"来表示0和1这样的信息.要想传递各种不同的信息,就需要约定好双方的数据格式,协议在语言的角度来说就是双方存在相同的结构体。为了让全球计算机都能进行网络通信,这就要求有人站出来定义一个完善的协议,让不同的计算机厂商、操作系统都遵循这个协议,当今的网络协议是OSI(Open System Interconnection)提出的OSI七层模型。
协议的本质也是一个软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的。
二、OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层.每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整.通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是,它既复杂又不实用;所以我们按照TCP/IP四层模型来讲解.
其实在网络角度,OSI定的协议7层模型其实非常完善,但是在实现过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的的是五层协议
三、TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
- 物理层:负责光/电信号的传递方式.比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等.集线器(Hub)工作在物理层.
- 数据链路层:负责设备之间的数据帧的传送和识别.例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作.有以太网、令牌环网,无线LAN等标准.交换机(Switch)工作在数据链路层.
- 网络层:负责地址管理和路由选择.例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由).路由器(Router)工作在网路层.
- 传输层:负责两台主机之间的数据传输.如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机.
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等.我们的网络编程主要就是针对应用层
ps:物理层我们考虑的比较少,我们只考虑软件相关的内容.因此很多时候我们直接称为TCP/IP四层模型.
一般来说:
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器,它实现了从网络层到物理层;
- 对于一台交换机,它实现了从数据链路层到物理层;
- 对于集线器,它只实现了物理层;
网络层和传输层都是集成在操作系统内部的,即操作系统源码中包含有实现网络层(IP协议)和传输层(TCP协议)的代码。这两个层次合起来称为TCP/IP协议栈。
所有的操作系统都要遵循TCP/IP协议栈,这样尽管两台主机是不同的操作系统也可以进行网络通信,由于网络层和传输层是在OS内部实现的,所以我们在应用层使用网络就需要使用OS提供的系统接口,将这些接扣进行封装就是网络库
四、网络传输基本流程
4.1局域网(以太网为例)通信
认识MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位,及6个字节.一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址).
MAC地址的作用
- 唯一性:在网络中,MAC地址用于确保设备之间通信的唯一性。即使IP地址可以更改或冲突,MAC地址仍然是固定的和唯一的。
- 网络层的通信:虽然IP地址用于网络层通信,但数据链路层(如以太网)使用MAC地址来将数据包从一台设备发送到另一台设备。
- 安全性:在某些网络配置中,MAC地址过滤可以用于限制哪些设备可以访问网络。
在同一个局域网中,不同的主机是可以直接进行通信的,这个原理就像我们在一个教室上课一样,老师叫一个同学回答问题所有人都可以听见的,只是别的同学听到老师叫的不是他,会忽略这个消息。局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定
以太网中,任何时刻,只允许一台机器向网络中发送数据,如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞,没有交换机的情况下,一个以太网就是一个碰撞域,所有发送数据的主机要进行碰撞检测和碰撞避免,如果数据链路层的标准是以太网的话,当一个设备发送数据发生数据碰撞后,该设备就停止发送,让其他设备先发送,所以以太网的处理方式可以认为是一种乐观的处理机制,因为同一时间有两个设备同时发送数据的概率并不高。如果是令牌环网的标准的话,局域网中会存在一个令牌,谁拿到令牌谁就可以发送数据
4.2 同一网段主机通信过程
数据是我们人想要发送的,所以数据是在应用层产生的,我们想让别的人看到我们的数据,就要将数据发送到他的应用层,当用户A发送数据给用户B时,报文数据并不是直接从主机A的应用层发送给主机B的应用层,而是依次向下封装,通过底层硬件发送信息,在依次向上解包最终获取数据的。而同层之间的数据是相同的,所以在宏观上我们认为是同层之间再进行通信。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation). 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理.
报文=报头+有效载荷
报头部分,就是对应协议层的结构体字段,我们一般叫做报头
除了报头,剩下的叫做有效载荷
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame).
4.3 跨网络通信
IP地址
IP协议有两个版本, IPv4和IPv6.我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4
- IP地址是在IP协议中,用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用"点分十进制"的字符串表示IP地址,例如192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是0 - 255;
- 跨网段的主机的数据传输.数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.
路由器一般最少要跨越两个子网,所以路由器要有两张网卡,有两个mac地址,报文一般存在两套地址,IP地址和MAC地址
- src(源IP地址)、dst(目的IP地址);
- 上一站从哪来(源mac地址)、下一站到哪去(目标mac地址)
一般来说我们日常的通网络通信要经过多个路由器转发所以更直观的通信过程是这样的