本章重点
了解网络发展背景,对局域网/广域网的概念有基本认识
了解网络协议的意义,重点理解TCP/IP五层结构模型
学习网络传输的基本流程,理解封装和分用
目录
1.网络发展
2.协议
3.OSI七层模型
4.TCP/IP五层模型
5.网络传输流程图
6.网络中的地址管理
7.xshell命令
1. 网络发展
a完成数据收集,b做数据分析,c做总结。计算机的发展需要有网络互相共享和协作
独立模式:计算机之间互相独立
网络互联:多台计算机连接在一起,完成数据共享
将数据统一放在一个服务器中,每个人通过自己的计算机访问服务器
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起
广域网WAN:将远隔千里的计算机都连在一起
2. 协议
认识协议
例如学生和家长省电话费,提前约定好响一声代表平安,响两声需要生活费,响三声就有事情需要商量。这种提前约定好为了顺利沟通的内容就是协议
协议是计算机之间交换数据必须遵守的规则的描述
协议的产生
计算机之间通信为什么会有很多问题,可以想象如果两个人说话,距离很近很简单就可以传达,但如果距离比较远就需要很大声音,距离如果再远想要传达,就需要中间有人帮忙传递,所以传输的距离变长会引出很多问题
1.怎么保证数据准确到达下一台设备
2.如何定位主机
3.长距离传输的数据丢失问题
4.如何处理发来的数据
上面的问题每一层分别是传输,定位,正确,应用等问题,同样的,每个主机都面临同样的问题,所以为了解决两个主机同样的问题,每层都要有自己的协议
协议的形式
一份快递单怎么知道需要运送的目标在哪里,联系方式等,有贴在包裹外的标签,注明了收货方,发货方,金额等
上面的信息在计算机里就是一个个类型的数据,整个表单就是一个结构体对象,每个计算机都遵守同样的协议,定义同样的结构体对象,双方就都可以认识了解这个结构体内容
协议的本质
计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示0和1这样的信息,要想传递各种不同的信息,就需要约定好双方的数据格式
只要通信的两台主机,约定好协议就可以了吗?
通信双方虽然都遵守同样的协议,但一个说中文,一个说英语,同样的中文,每个地方又有不同的方言,照样互相听不懂
计算机生产厂商有很多,操作系统、网络硬件设备等也有很多,如何让这些不同的厂商生产的计算机能够相互通畅的通信?就需要有人站出来约定一个共同的标准,大家都遵守,这就是网络协议
协议分层
高内聚低耦合的设计可以方便设计,提升维护性。之前的例如函数指针,继承多态面向对象这种就是如此,同样的,分层也是这样的目的。这个例子中只有两层,实际的网络会更复杂
分层后每层解决自己的问题,定这一层的协议。两个人打电话虽然是通过电话分别传递给对方,但在每个人的视角里是直接和对方在通信,电话和电话在沟通。当想用无线电通信时,只需要换无线电的协议就可以,上层不需要任何改变。想用英语换成英语的协议,电话这一层不需要改变,这就是分层的好处
3. OSI七层模型
OSI(Open System Interconnection,开放系统互连),七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范
把网络从逻辑上分为了 7层,每一层都有相关。对应的无礼设备,比如路由器、交换机等
OSI七层模型是一种框架性的设计方法,其最主要的功能帮助不同类型的主机实现数据传输
它的最大优点是将服务、接口和协议这三个概念明确的区分开来,概念清楚,理论比较完成,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯
但是,它既复杂又不实用,在实际开发过程中,会话层和表示层不好在内核实现,都是归在了应用层。所以我们按照TCP/IP四层模型说明
4. TCP/IP五层模型
TCP/IP是一组协议的代名词,还包括许多协议,则成了TCP/IP协议簇
TCP/IP通讯协议采用了5层的结构,每一层都呼叫下一层所提供的网络来完成自己的需求
- 物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞线),早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤、现在和wifi无线网使用电磁波等都属于物理层的概念,物理层的能力决定了最大传输速率、传输距离、抗干扰性、集线器(Hub)工作在物理层
- 数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作,有以太网、令牌环网,无限LAN等标准,交换机(switch)工作在数据链路层
- 网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来表示一台主机,并通过路由表的方式规划出两台主机之间的数据传输,如传输控制协议(TCP),能欧冠确保数据可靠的从源主机发送到目标主机
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telent)等,我们的网络编程主要就是针对应用层
物理层考虑的比较少,因此很多时候也可以称为TCP/IP四层模型
对于一台主机,操作系统内核实现了从传输层到物理层的内容
对于一台路由器,实现了从网络层到物理层
对于一台交换机,实现了从数据链路层到物理层
对于集线器,只实现了物理层
但是并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)
分层和系统结构
物理层和数据链路层就是设备网卡驱动这些,传输层和网络层在系统内部,当用户想访问网卡,os不允许直接访问,提供了些接口由os直接访问,这些接口就是系统调用,用户层一些人通过这些接口编写了应用层各种方式如http、smtp等的协议使用。系统有很多,内核进程管理等不一样,但网络协议站只有一种,遵守同一种规则
无论是win主机还是linux主机,双方通信的过程就是贯穿网络协议站的过程,发送方从用户层向下发出,接收发从设备层向上收到用户层,每一层的协议一样,数据的机构完全一样,在每一层角度里,都是在和对方同一层直接通信
5. 网络传输流程图
同一个网段内的两台主机进行文件传输
两台计算机通过TCP/IP协议通讯的过程如下图所示:
局域网是一种覆盖范围较小,局部地区的区域网络。小到办公室,大到一栋楼或相邻建筑。传输速度快,方便。比如家里的手机同一网络可以投屏到电视上观看。以太网是一种局域网协议
以太网通信原理
在一间教室里,老师说:“张三,作业怎么还没交?”,所有同学都听到了内容,但只有张三需要站起来回答。张三报头,表示报文需要传递给谁,每个同学都收到了这个报文,提取报头内容和自己名字作对比,发现不是自己,所以将后面内容可以不予理会。张三对比后发现是自己,站起来回答:“老师,我忘了没写。”,同样的全班都会听到这个报文,传递的对象是老师,老师对比报头继续通信
在以太网里,每一个主机都有一个mac地址,这个地址在局域网里是唯一的。是一个48位的数据
假设在一个局域网里,有H1-H1010台主机,它们的mac地址是M1-M10,如果H1和H10通讯,就会带上自己的mac和目标的mac,M1到M10,在局域网里的主机都会收到这个数据,但提取报头后发现不是自己,网卡就会直接将数据丢弃,不会再向上传递。H10主机发现是自己,同时是M1主机发来的,向网卡上层一直传递,就可以回复内容,带上报头M10到M1,同样的过程M1就会收到内容
数据碰撞
如果同一时间H1给H10发送消息,H2又给H9发送消息,就有可能发生碰撞,碰撞后就会数据错误。当在教室里,很多人都在批次聊过,那么老师讲课内容就很难听正确。所以要执行碰撞避免算法。一个局域网也叫做一个碰撞域
任何时刻只能有一台主机在局域网内发送消息
当局域网范围变大,主机变多后,碰撞的概率也会变大。这时可以用交换机来减少碰撞,它的原理会检测,如果是同一侧的两台主机通信,收到的消息就不会往右边的设备发送,减少了数据传递的范围,划分碰撞域。同时,发生数据碰撞后可以检测到,碰撞的报文也不会交换。可以把局域网看做多台主机的临界资源,需要保证其互斥性
安全问题
如果不是和自己通信,可以得到消息内容吗?这个是可以的,网卡一般是正常模式,不是自己的会丢弃掉,可以设置为混杂模式,不管什么消息都会接收,交给上层,也是抓包软件的原理。在上层发送消息的时候,可以对信息加密,这样就算抓到也不知道是什么内容
令牌环网
令牌网也是链路层的一种协议,同样也有自己防止碰撞的方法,它会给需要通讯的设备提供一个令牌,只有持有这个设备的主机才可以通信。就类似于锁的原理
数据包封装和分用
不同的协议层对数据包有不同的称谓,应用层叫请求和响应,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉对应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理
当客户想给服务端发送你好这个消息的时候,应用层需要加上自己的协议,也就是报头,可以标明应用的版本,到传输层需要将数据准确传递,所以自己的协议了需要加上语句顺序的序号报头,IP层加上了来源ip和目标ip,对于每一层,加工的内容是报文=报头+有效载荷,每一层都在保留原载荷的基础上加上了自己的报头。最后到网卡发送到对方网卡,这整个过程就是对数据的封装。对方网卡收到数据后,需要得到自己的报头内容,强转为自己的协议结构体类型,同时将剩下的有效载荷传递给上一层,至于载荷内容是什么不关心。这样一步步到达用户层后就可以解读出发送的内容,分清交给上层的哪个协议,这个过程是分用。每一层眼里,都是直接在和对方本层通讯,通讯的本质,就是不断解包和分用的过程
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中药经过一个或多个路由器
大部分协议的共性就是封装和解包,也是学习这些协议需要了解的问题
1.几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力
2.几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议的能力
下面是封装的过程
下面是分用的过程
6. 网络中的地址管理
有个游客想旅游中国,从辽宁出发,去云南,不能直接坐车去云南,而是先到山西,现在的地址是从辽宁到了山西,下一步就得去陕西,上一个地址是山西,现在的地址是陕西,下一个地址是四川,到了四川后,上一个地址成了陕西,下一个地址是云南。在这个过程中,他目前的地址和下一步地址都是在随时变化的,而刚开始的出发地和最终的目的地始终不变,有这个长远地址的指导,才知道每个过程中的下一步地址该如何走。这个就是IP地址,它标识了全网的唯一一台设备,这个随时变化的就是mac地址,用来标识局域网中的唯一一台设备
IP地址
Ip协议有两个版本,IPv4和IPv6,以下凡是IP协议,默认都是指IPv4
IP地址是在IP协议中,用来标识网络中不同主机的地址
对于IPv4来说,IP地址是一个4字节,32位整数
通常也使用“点分十进制”的字符串表示IP地址,例如192.168.0.1,;用点分割的每一个数字表示一个字节,范围是0-255
MAC地址
MAC地址用来识别数据链路层中相连的节点
长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:Fb:19)
在网卡出厂时就确定了,不能修改,mac地址通常是唯一的(虚拟机种的mac地址不是真实的mac地址,可能会冲突,有些网卡支持用户配置mac地址)
路由器路由过程
如果是发送给局域网的数据,直接交给对方主机就好了。但如果目的是局域网外的数据,链路层会发给路由器,路由器解包后发现是自己的数据,同时对比ip是不是和自己相连,如果相连就封装后交给对方的链路层协议,传递到达D主机。路由器拥有不断封装和解包的能力,ip地址是不变的,mac出局域网后,每经过一个主机,会不断封装源mac地址和目的mac地址,根据不同底层协议封装报头,达到寻路的过程
ip协议屏蔽了底层网络的差异化,靠的就是工作在ip层的路由器,ip实现了全球主机的软件虚拟层,一切皆是报文。
手机用的无线LAN协议,底层网络的差异,路由器封装为无线LAN的报头,手机就可以网络通信,上层根本不用改动
脉络示意图
7. xshell命令
查询
ifconfig
ip地址4字节,这个是私网ip,mac地址6字节