【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)

个人主页:企鹅不叫的博客

专栏

  • C语言初阶和进阶
  • C项目
  • Leetcode刷题
  • 初阶数据结构与算法
  • C++初阶和进阶
  • 《深入理解计算机操作系统》
  • 《高质量C/C++编程》
  • Linux

⭐️ 博主码云gitee链接:代码仓库地址

⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!

系列文章


文章目录

  • 系列文章
  • 一、网络概念
    • 1.网络发展
    • 2.协议
      • 协议分层
      • OSI七层
      • TCP/IP五层
  • 二、网络传输的基本流程
    • 1.数据包装和分用
    • 2.局域网通信
    • 3.跨网络通信
  • 三、网络中的地址管理
    • 1.IP地址
    • 2.MAC地址
    • 3.过指令查看IP和MAC


一、网络概念

1.网络发展

独立模式: 计算机最开始是以单机模式被广泛使用的。每一台计算机都是独立的,之间不能够进行数据共享与通信

网络互联: 计算机之间可以链接在一起,完成数据共享,计算机之间还可以进行相互通信

局域网(LAN): 一片区域内的计算机通过路由器和交换机连接在一起,可以用来相互通信的计算机数量增多

广域网(WAN): 多个局域网通过路由器连接起来,构成一个广域网,也可以说是一个更大的局域网

2.协议

协议就是一种 “约定”。它是多方协商出来的一种通信方案,达成一种“共识”。

协议的好处:

  • 统一标准,通信双方能够通过某种标识把数据识别出来
  • 提高通信的效率和可靠性

协议分层

协议分层的好处:

  • 每一层做不同的工作,下一层为上一层提供特定的服务,同一层之间交互使用相同的“协议”
  • 同一层之间进行交互会使用下一层提供的服务(接口服务),且不会关心下一层的实现细节,层与层之间通过接口实现通信,实现了“解耦”

协议分层的本质: 实现将层与层之间进行解耦,保证代码的可维护性和可扩展性,在分层情况下,将某层的协议进行替换后,通信双方之间是不会受到影响的

OSI七层

数据链路层,使用报头和报尾进行封装【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第1张图片

TCP/IP五层

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub,加强信号,让数据传的更远)工作在物理层.
  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第2张图片

总结:

  • 应用层解决的传输数据的目的,根据特定的通信目的,进行数据分析与处理,达到某种业务性的目的
  • 传输层和网络层处理数据传输遇到的问题,保证数据的可靠性
  • 数据链路层和物理层负责数据真正发送的过程,完成以太网和局域网的通信
  • 下三成处理的是通信细节,应用层处理的是业务细节

一般而言

  • 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容
  • 对于一台路由器, 它实现了从网络层到物理层(有些可到应用层)
  • 对于一台交换机, 它实现了从数据链路层到物理层
  • 对于集线器, 它只实现了物理层

二、网络传输的基本流程

1.数据包装和分用

  • 不同协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  • 应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。

解释:

  • 每一协议层的数据包 = 报头+有效载荷
  • 将数据中除当前层的报头以外的数据叫做“有效载荷”
  • 报头:每一层都有应的报头来当前层
  • 数据的封装、解包、分用:
    • 数据封装,实际就是不断给数据加上各种对应的报头,这些报头里面填充的就是对应的各种协议细节。
    • 数据解包,将数据包中的报头有效载荷分离。
    • 数据分用:自底向上,要确认自己的有效载荷交付给上层的那个协议

将报头和有效负载分离:

1.定长报头。报头的长度是确定的,这样就可以实现二者分离。
2.自定义描述符字段。报头中添加一个字段,表示报头的长度。

数据封装:

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第3张图片

数据分用:

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第4张图片

2.局域网通信

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第5张图片

数据在自身协议栈自顶向下进行封装:

  • 数据包交给应用层,应用层添加上对应的应用层协议报头,然后把整个数据包向下交付给传输层
  • 传输层再添加上对应的传输层协议报头,然后把整个数据包向下交付给网络层
  • 网络层再添加上对应的网络层协议报头,然后把整个数据包向下交付给数据链路层
  • 数据链路层再添加上对应的数据链路层协议报头,然后把整个数据包通过网络交付给对端数据链路层

数据在对端协议栈自底向上进行分用:

  • 数据链路层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的网络层
  • 网络层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的传输层
  • 传输层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的应用层
  • 应用层将数据包的报头和有效载荷进行解包分离,将最后的数据进行相关处理然后交付给用户

每个主机如何判断该数据是否是发送给自己的?

在数据链路层,有一个MAC地址(48位),网卡硬件地址或者序列号,是全球唯一的,用来标识主机的唯一性。每一个主机在收到一个MAC数据后,都会提取该数据中的目标主机MAC地址,与自己的MAC地址进行比对,如果相同就收下,如果不相同就将数据丢掉。

局域网内进行数据广播

机发送数据时,将MAC地址设置为一个广播地址(1),这样所有的主机收到该数据后都会对该数据进行处理

局域网通信原理:

同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此如果局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰。

一个局域网可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞。

如何判断是否发生碰撞:当该主机收到该数据后就可以将其与之前发送出去的数据进行对比,如果发现收到的数据与之前发送出去的数据不相同,则说明在发送过程中发生了碰撞, 撞检检测

碰撞处理:数据发生碰撞后,发送方不会立即将数据进行重写发送,而是等一段数据,在重新发生,这就是碰撞避免算法

3.跨网络通信

跨网络通信就是分别处于不同局域网的两台主机之间进行通信,两个局域网之间是通过路由器进行通信的

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第6张图片

路由器其实是通过IP地址来确定数据的转发方向的,因特网上的每台计算机都有一个唯一的IP地址,当路由器需要将一个局域网的数据转发到另一个局域网时,在路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层,此时在网络层就可以获取到该数据对应的目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网。

通过IP地址屏蔽了底层协议的差异,不需要关心底层使用的是哪种通信协议,只要有源IP地址和目的IP地址才可以将数据转发出去

三、网络中的地址管理

1.IP地址

  • IP地址是在IP协议中, 用来标识网络中不同主机的地址;
  • 对于IPv4来说, IP地址是一个4字节, 32位的整数;
  • 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

2.MAC地址

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

3.过指令查看IP和MAC

ifconfig 可以查看主机的网络信息

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)_第7张图片


你可能感兴趣的:(计算机网络,网络,tcp/ip,macos)