ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Linux系统与网络编程(1)——网络基础

Linux系统与网络编程(1)——网络基础 前言欢迎观看Linux系列文章第1篇主要讲述了网络协议的基本概念和网络传输流程其中提到了OSI七层模型和TCP/IP协议以及局域网传播和跨网段传播的基本流程。网络协议什么是网络协议本质是一种约定用于快速形成共识作减少通信成本。计算机之间的传输媒介是光电信号通过频率或者强弱来表示0和1的这样的信息。要想传递不同的信息就需要约定好双方的数据格式。但是计算机生产厂商很多操作系统很多网络硬件设备也很多为了在这些不同之间找到一个公约数需要有人带头约定共同的标准所有人都来遵守。从此这个约定才能真正成为网络协议。能定制协议标准的组织和公司了解即可他们只生产标准但是不写代码实现。1、国际标准化组织IEEE、ISO定义了OSI网络通信七层模型、ITU2、 区域标准化组织ETSI、ASTAP3、公司主要是自研的各种标准软件协议栈4、民间国际组织IETF5、官方机构FCC协议分层协议本身也是软件为了更好的进行模块化解耦合也是被设计成层状结构的。软件分层的好处1️⃣关注点分离每层只负责一类职责比如界面展示、业务规则、数据存取代码逻辑更清晰。2️⃣降低耦合层与层之间通过接口交互上层不依赖下层的具体实现修改一层时影响范围更小。3️⃣提高可维护性出问题时容易定位到某一层修改需求时通常只需改对应层不必全盘重构。4️⃣增强可测试性可以单独测试业务逻辑层并通过 Mock 替换数据层或外部服务单元测试更容易。5️⃣便于替换技术栈换数据库、换前端框架、换通信协议时只要接口不变其他层可以少改甚至不改。6️⃣促进复用通用能力如下沉到基础层或服务层可被多个模块、多个应用复用。7️⃣支持团队协作团队可按层分工只要提前约定好接口前后端、业务开发、数据开发可以并行推进。8️⃣易于扩展新增功能可在相应层添加比如新增一种支付方式只需扩展业务层和接口层。9️⃣统一处理横切关注点认证、授权、日志、事务、缓存、异常处理等可以在层边界统一实现避免散落各处。提升可移植性和演进能力OSI七层模型最大的优点是将服务、接口和协议这三个概念明确区分理论完整但是复杂又不实用。分层名称分层功能物理层传输原始比特流定义电气、机械、接口标准数据链路层成帧、MAC 寻址、差错检测、介质访问控制网络层逻辑寻址、路由选择、分组转发传输层端到端通信、可靠性、流量控制、端口复用会话层建立、管理、终止会话同步与检查点表示层数据格式转换、加密/解密、压缩/解压应用层为用户应用提供网络服务实际生产主要还是TCP/IP协议TCP/IP协议分层名称分层功能典型案例典型设备物理层传输原始比特流定义电气、机械、接口标准现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同 轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。数据链路层成帧、MAC 寻址、差错检测、介质访问控制⽹卡设备的驱动、帧同步(就是说从⽹线上 检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作有以太⽹、令牌环⽹, ⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。网络层逻辑寻址、路由选择、分组转发在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹络层。传输层端到端通信、可靠性、流量控制、端口复用传输控制协议 (TCP) 能够确保数据可靠的从源主机发送到⽬标主机。----------------应用层为用户应用提供网络服务简单电⼦邮件传输SMTP、⽂件传输协议FTP、⽹络远程访问协议Telnet等。-----------------有时会把物理层和数据链路层合为一层——网络接口层。为什么使用TCP/IP协议本地通信和网络通信本质上都是设备到设备的通信计算机内部的冯诺依曼结构也是一个网络结构。唯一的区别就是距离变长了。距离变长会引发新的问题1.主机之间怎么处理和使用数据2.数据更容易丢失怎么办3.主机间更难定位怎么办4.数据当下要立马去哪个设备TCP/IP协议就是以上问题的一个解决方案通过协议分层解决不同种类的问题。应用层解决问题1、传输层解决问题2、传输层解决问题3、网络接口层解决问题4。什么是TCP/IP协议本身是一种网络长距离通信的解决方案。该协议可以分层是因为出现的问题也可以分层。TCP/IP协议与操作系统的关系网卡网络接口层就是底层硬件数据链路层在驱动程序中网络层和传输层两层被集成在内核中应用层在OS上层由用户实现。不同的操作系统之间可能内部层级结构和Linux有出入但是只要都使用了TCP/IP协议就可以做到互相通信。这个协议最核心的就是传输层和网络层最著名的协议分别是TCP协议和IP协议所以就把这个协议统称为TCP/IP协议。由图可知从上至下所有层级整个协议栈涉及硬件、驱动、os、用户所以这个协议必需IT各行各业进行支持和配合。深层理解协议协议在代码层面本质上就是一个约定好的结构体。约定好数据结构体对象DATA的内部结构一致在发送和接受数据之后因为主机之间对数据DATA的结构体定义相同因此就可以快速建立共识完成数据解析。协议栈是分层的每层都有双方都有协议。同层之间也可以互相认识对方的协议。网络传输基本流程局域网以太网网络通信原理局域网通信时在内部是透明公开的通信内容会让所有的人收到但是只有指定的主机会对收到的数据进行响应处理泛洪。· 在以太网中任何时刻只允许一台机器像网络中发送数据。· 多台主机同时发送时会出现数据干扰我们叫作数据碰撞。·没有交换机的情况下一个以太网就是一个碰撞域。· 所有发送数据的主机要进行碰撞检测和碰撞避免。所以一个局域网内主机越多网速可能就会变得越慢因为要花时间做碰撞检测和碰撞避免而且数据干扰也越难避免。以太网是主机之间共享的资源所以可以说以太网就是临界资源这些碰撞避免和检测算法就是为了保证主机之间通信的互斥性。要指定一个主机就需要每台主机有一个唯一的标识——MAC地址。补充通信方式除了以太网还有令牌环网和无线lan。令牌环网就是在以太网通信的基础上加入一个令牌令牌会传递拿到令牌的才可以进行通信。这个令牌其实就是一个互斥锁。无线lan可以认为是无线版的以太网。该补充了解即可。MAC地址MAC地址即物理地址用来识别数据链路层中相连的节点格式长度48bit即6byte一般用16进制和冒号的形式来表示如12:34:56:78:90:AB。MAC地址具有唯一性通常是全球唯一的但是一般只需要在一个子网内是唯一的就行了。数据的封装和解包分用主机间通信本质上是两个协议栈在通信而且每一层之间都要有协议。所以发送报文的时候每一层都要加上每一层的协议信息在报头。封装时每一层会给报文添加一个报头这个报头叫协议报头除了报头之外剩下的部分都叫有效载荷再把报文发送给下层。解包和分用时把和自己同层同协议的协议报头和有效载荷进行分离把报头留下进行解析把有效载荷发送给上层。1️⃣先不考虑应用层协议对于任何协议而言1、报头必须能做到可以和有效载荷进行分离2、报文中必须包含如何将自己的有效载荷交付给上一层的具体协议。2️⃣当发送完整报文到网络上之后在链路层分离出链路层报头后如果解析出目标主机MAC和本机不符报文就会立刻被丢弃不会再进行解包了。3️⃣封装和解包的过程顺序跟栈操作是一样的。封装的过程其实是入栈操作依次将报头入栈解包的过程其实是出栈操作依次将报头出栈。这就是为什么要把协议做成栈结构叫作协议栈的原因。4️⃣应用层的报文——请求与应答传输层的报文——数据段网络层的报文——数据报链路层的报文——数据帧。5️⃣网卡的混杂模式即使目标网卡MAC地址不匹配也会把报文继续向上解包。这也是很多抓包工具的工作原理。为什么要自顶向下封装因为网卡在最下层而且发送报文只能由网卡完成同时操作系统是网卡的管理者所以必须贯穿操作系统栈和协议栈。跨网络传输流程网络中的地址管理——IP地址IP地址用来在全球范围内唯一标识主机。公网IPIP地址有两个版本IPv4和IPv6。IPv4地址有4byteIPv6地址有6byteIPv6是用来解决IPv4地址严重不足的问题。但是因为一些现实因素现在依旧还是IPv4为主用NAT网络转换来应对地址不足的问题。和MAC地址不同虽然都是用来标识唯一性的两者用来标识目标IP更远更广MAC更近主要在局域网中唯一标识。当主机A向主机B发送报文时发现目标主机B不在当前局域网内就会把报文发送给路由器路由器也是一个主机。路由器解析报文之后能帮你找到你目标主机的目标子网然后重新封装后再发送给目标子网中再目标子网中的主机B就能收到报文且比对MAC地址之后匹配最终发送成功大致传输方向如此细节会在以后说。而在路由过程中IP地址一直不变MAC地址一直在变MAC地址只在局域网中有效。IP网络层的意义提供网络虚拟层让世界的所有网络都是IP网络屏蔽最底层网络的差异。查看自己主机的IP和MACWindowsipconfig /allLinux:ifconfig❤~~本文完结感谢观看接下来更精彩欢迎来我博客做客~~❤
返回列表