网络基础一

网络基础一

1.初识网络

​ 网卡也是一种文件,所以对于网络的编程也是一种文件操作;

​ 早期由于不同的计算机之间要根据数据进行协作,但是计算机之间是独立的,所以使用了光驱或者软盘之类的进行协作;对于将计算机连接在一起完成数据的共享是历史发展的必然;后来出现了局域网LAN,之后随着历史的推动使得子网之间继续进行集连;但是长距离传输过程中需要进行主机的定位使用IP地址MAC地址等,还有传输过程中数据的安全问题等各种问题,需要进行解决;不同的子网通过交换机和路由器连接起来;最后形成了广域网将所有的局域网全部连接了起来;

2.认识协议

​ 由于数据经过了长距离的传输,沟通的成本变得很高;实际上在网线中传递的是光电信号;

​ 协议本质就是一种约定,通信双方通过规定约定可以很大程度地降低成本;协议有很多种,计算机通过协议解决不同的通信问题;

通信时有如下问题,需要每一层都要设计协议进行解决:

​ 1.如何处理发来的数据;应用层协议http/https/ftp/smtp等各种协议解决;

​ 2.长距离传输的数据丢失问题;传输层使用TCP/UDP协议进行解决;

​ 3.如何定位主机的问题;网络层的IP协议进行解决;

​ 4.保证数据准确地到达下一个设备;数据链路层的协议进行解决;

​ 网络通信的过程中会产生其他字段 ,这些字段叫做协议的报头;这些协议本质上就是一种结构体,保存着各种属性字段,将结构体对象的属性和数据拼接起来就构成了一个报文;只要通信双方都有这样的结构体对象,即可实现通信;现在的主机都是用的是TCP/IP四层体系结构,标准是一样的,所以都内置了协议,所以可以进行通信;

​ 可以通过物理性质的区别来定制0/1信号,这样计算机就能够识别二进制序列;

​ 必须有业内权威人士来定制一整套网络标准,所有的入网设备都遵守标准这样才能实现通信,否则标准不一样,导致协议不一样等各种问题,就无法在网络各层进行解析报文,达到通信的目的;

3.协议分层

​ 继承和多态的实现本质上就是在做软件分层,还有线程库中线程的执行函数实现和线程的执行进行软件分层;分层可以是上下的关系也可以是左右的关系;分层后最大的特点就是每一层的修改不会影响到其他层,实现高内聚低耦合

​ 网络分层是因为整体规模大,长距离传输问题多所以要对网络进行分层,具体的创建每一层的协议来解决每一层的问题;

​ 逻辑上是层内直接交互的,实际上层与层之间进行交互,贯串式地执行;正是因为从逻辑方面看待问题所以有了不同的网络层并且定制了不同的协议,使得层内通信双方可以进行通信;协议分层使得层与层之间低耦合,层内是高内聚的,当某一层要进行修改的时候并不会影响其他层,提高了可维护性和可扩展性;

4.OSI七层模型

​ 网路是需要一套标准的,OSI组织是当时的权威组织建立了七层网络模型,从低向上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;

​ 每一层要考虑调用下层问题还要考虑给上层提供调用问题;还需要解决层内通信的问题;实践中发现有些层是不可以在操作系统中实现的,所以就剩下了物理层、数据链路层、网络层、传输层、应用层;而物理层更关心的是电器特性,所以在软件方面真正关心的是四层协议;实际上会话层和表示层是在应用层完成的,内核真正完成的 是其他三层;最重要的两层是传输层和网络层,所代表的协议是TCP和IP,所以命名为TCP/IP四层模型;

​ 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。有关设备如集线器将衰减的数据信号放大,调制解调器将光纤送来的信号转换为有线网或者无线网;

​ 数据链路层:主要解决的就是两台设备间数据帧的传递和识别;有关设备如交换机;

​ 网络层:满足了设备和设备之间进行通信,还需要将数据准确的传输到目标机器,所以要对机器进行唯一性标识和识别;通过唯一性标识进行主机定位,形成一段路径进行数据路由;有关设备路由器就是主要进行数据的路由的,当然也有数据链路层和物理层的功能;

​ 传输层:如果数据在传输的过程当中出现了问题,就要先对数据进性检测,然后对数据进行重新传入,解决了数据传输的安全性问题和可靠性问题;使用的协议有TCP/UDP协议;

​ 应用层:主要是为了实现应用程序之间的交互;拿到数据并不会是目的,对数据进行解析转换成有效信息才是目的;

5.网络协议栈和操作系统的关系

在这里插入图片描述

​ 网络中的通信都是要经过网卡传输(看到同一份资源),然后通过访问这个硬件来获取数据,因为用户不能直接访问,所以硬件需要贯穿操作系统执行,而操作系统不相信用户只是提供系统调用接口共用户实现获取数据的功能;即操作系统在传输层和网络层提供了访问网卡的系统调用,一般传输层提供系统调用,当然对于一些网络工具的开发也可以使用网络层甚至是数据链路层的系统调用;顶级用户根据系统调用接口开发了各种应用层协议供应用层使用,对于普通人就可以直接使用协议进行开发;

​ 所有的操作系统的网络功能都必须满足OSI标准(不仅仅是Linux),否则此操作系统就没有办法入网;

在这里插入图片描述

​ 每一层都有自己的协议(结构体类型),通信双方之间必然是对每一层的字段都认识的;所以通过标准规定,双方天然就将协议约定完成;所以网络通信的本质就是贯穿协议栈的过程;

6.网络通信宏观流程

​ 两台设备通过贯穿网络协议栈实现;局域网中的主机可以直接通信,使用的就是局域网协议,比如以太网,令牌环网,还有无线LAN,之后经过历史的选择留下了以太网和无线LAN;

​ 以太名称的由来是太阳光传播也需要介质,但是证明宇宙中是真空的没有介质,后将宇宙中的不存在的介质称为“以太”;

​ 应用层以下处理的是通信细节,以上处理的是应用程序细节;

​ 网络协议栈的层状结构中,每一层都有协议用来解决对应的问题,但是由于通信是贯穿协议栈的所以要将发送的数据添加上每一层的协议信息;每一层将上一层发送过来的数据整体作为有效载荷添加协议信息(报头,大部分情况下是一个结构体,如内核层,少部分情况下是一个个固定格式的字符串,如应用层的序列化和反序列化),形成一个完整的报文,发送给下一层,然后作为下一层的有效数据;报文=报头+有效载荷;

​ 应用层根据不同的应用版本,需要在报头里添加不同的版本号,来支持不同版本应用程序的通信;但是要注意的是在不同层之间传递报文时,一定要保证传递是有序的,所以可以在传输层添加序号保证是有序的;在网络层发送信息时需要添加本机唯一标识符和目标主机的唯一标识符,使得目标主机可以拿到数据并且将数据返回;

​ 发送方从上往下不断添加报头是一个封装的过程;通过网卡设备将报文传递给另一台设备,然后传到内存当中由CPU读取,此时要进行报头和有效载荷分离并且不断地传递到上层是一个解包和分用的过程,最后用户就拿到了数据;

几乎每一个协议都要提供一种将报头和有效载荷分离的能力,但是由于每一层有多种协议,需要决定将有效载荷传递给上层的哪一种协议。所以报文中要有区分协议的能力;

总结:通信的本质就是贯穿网络技术栈,不断封装和解包的过程;

7.以太网通信原理

每台主机在局域网上都要有自己的一个唯一编号;

在这里插入图片描述

​ 每一台主机都安装有网卡,每一个网卡在出厂时都有一个48bit位的序列号叫做Mac地址,在局域网内是唯一的;当操作系统启动时读取到网卡信息时就会获得Mac地址,只需要保证Mac地址在局域网内是唯一的就可以;所以在数据链路层的报文中要添加本机的Mac地址和目标主机的Mac地址,将形成的数据帧通过网卡发送到局域网中并且会被局域网中所有的主机接收到,每一个网卡都收到了数据帧,然后在数据链路层对数据帧进行解包和分用,对报头进行解析,如果目标Mac地址与本机不匹配直接丢弃;匹配成功对数据进行处理;

​ 局域网中的不同主机同时发送数据帧时,会产生数据碰撞问题。这样就会导致数据都失效了,光电信号的波形图叠加原信号直接被干扰;不断地向局域网发送垃圾信息就会将整个局域网破坏,当局域网内部的数据量较大时会挤压整个局域网的带宽,从而导致数据碰撞,需要重新发送数据这样就会变卡;

​ 为了解决数据碰撞问题每一个主机都要进行数据碰撞避免算法,这个算法是由数据链路层的驱动程序定的;通关串行等待的方式减少碰撞次数,休眠时间由算法生成概率很低,即使是同时休眠也可以让没有休眠的主机发送数据;将整个局域网中的主机发送数据叫做一个碰撞域;每一个发送数据的主机都可以识别到自己发送的数据所以可以进行碰撞检测;

​ 正常模式下,网卡默认都是会将不属于自己的数据帧直接进行丢弃,但是网卡有一种工作模式叫做混杂模式,可以通过系统调用接口打开,则会个模式下不会将数据直接进行丢弃而是配合驱动程序将数据进行保存,这就是大部分网络抓包工具的原理;其实可以在应用层进行自定义加密工作,即使数据被抓包但是也无法解析出来;

总结:局域网通信是基于碰撞域和碰撞避免的;在发送数据的时候要保证只有一个主机在发送数据;

​ 一个局域网内的主机数量不应该太大,否则一方面会导致碰撞的机率变大,另一方面需要等待的时间也会变长,降低传输效率;但是为了满足大规模的局域网,所以引入了交换机,这个机器会将整个碰撞域划分为多个(每一个碰撞域对应一个端口)然后由它拿到数据并将数据进行转发,如果通信双方在划分范围内,就不需要将数据发送到其他范围,这样就降低了数据碰撞的概率,而且交换机识别到了碰撞就不会将数据继续发送,天然的做了一层封装;

7.1对局域网的理解

​ 任何时刻只允许一台主机向局域网发送数据,本质上就是将局域网看作是一个共享资源,然后要保证访问共享资源时是以互斥的方式进行;令牌环网使用的方式是加锁;应用层其实就是用户启动了一个进程发送数据,另一方启动进程接收数据;换句话说就是进程的通信存在数据不一致问题,需要互斥保护;

​ 以太网的方式有点像乐观锁,碰撞检测就像是对数据进行判断,看当前数据帧和发送之前的数据帧是否相同,不同则自旋;而令牌环网的实现方式则像是互斥锁一样,谁有令牌谁才能发数据,然后通过获取令牌发数据;并且主机间都是使用竞争的方式;

8.数据跨网络传输

​ 跨网络的数据传输必须由于路由器这样的设备用来进行子网的集连;

​ 子网之间数据传输是通过使用IP地址保证主机的唯一性,一般是公有IP保证唯一性,私有IP可以重复;

​ 在数据传输的过程当中有着两套地址,一套是起始地址加目的地址(IP地址),另一套是一直变化的上一个设备的地址+传送到下一个设备的地址(Mac地址);IP地址存在的意义是指导进行路径规划;

​ 互联网中主流的IP地址是IPv4,采用的是4字节,32个bit位的整数会被写成xxx.xxx.x.x风格的信息;

8.1数据包的传输

​ 根据目的IP地址判断出来主机不在本地局域网,需要传输到路由器,这也是局域网通信,所以在数据链路层就将本机的Mac地址作为源地址,路由器的Mac地址作为目标地址进行局域网通信;

​ 路由器分为两层,一层是数据链路层,一层是网络层;通过解包之后在网络层拿到了数据链路层发送的有效载荷,在网络层解包,然后对报头进行分析发现目标IP地址与路由器保存的路由表中的地址是相同的;然后发现目标主机使用的是令牌环网协议,则向下交付数据链路层,封装报头源Mac地址是路由器的,目标Mac地址是目标主机的;在整个过程中Mac地址是一直在发生变化的;

​ 由于路由器的存在,使得报文在传输的过程中数据链路层的报头被替换,但是上层却始终保持一致;换句话说数据链路层协议的差异被完全的屏蔽了;**IP实现了全球主机的软件虚拟层,一切皆是IP报文;**换句话说想要进入其他局域网需要符合其他局域网的协议才可以,要进行解包和重新封装;

​ 每一个路由器为了满足重新封装局域网协议需要有至少两个网卡;

在这里插入图片描述

​ 数据包在不同层有不同的名字,一般在应用层叫做请求和响应,在传输层叫做数据段(对于UDP协议一般叫做数据报),在网络层叫做数据报,在数据链路层叫做数据帧;

ifconfig
#可以查看网络配置
ipconfig
#windows下使用查看网络配置

在这里插入图片描述

​ 其中eth0为网络接口,lo为本地环回;inet是IPv4地址,上图显示的是内网IP,以.分割每一个数字的范围是0-255;最终表示的是4个字节;ether表示以太是Mac地址,一共是48个bit位;还有一种IP地址叫做IPv6地址,大小是16字节;

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值