当前位置: 首页 > article >正文

【网络编程】网络基础


目录

一、协议分层

1、为什么要分层

2、OSI七层模型

3、TCP/IP四层协议(五层协议)

二、网络传输流程

1、同一个网段内的两台主机进行文件传输

2、跨网段的主机的文件传输

三、IP地址和MAC地址

1、IP地址

2、MAC地址


网络通信的本质就是跨主机的进程间通信,用于通信的共享资源是网络。

一、协议分层

1、为什么要分层

网络相关的模块很多,分层是借鉴了软件设计的优势,降低模块间的耦合性。分层的依据是将耦合度较高的模块放在同一层,实现高内聚,每一层都将解决不同的问题。

2、OSI七层模型

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;

它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

层数

分层名称

功能

每层功能

7

应用层

针对特定应用的协议。

6

表示层

设备固有数据格式和网络标准数据格式的转换。

5

会话层

通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层。

4

传输层

管理两个节点"之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址)。

3

网络层

地址管理与路由选择。

2

数据链路层

互连设备之间传送和识别数据帧。

1

物理层

以“0”“1”代表电压的高低、灯光的闪灭。界定连接器和网线的规格.

3、TCP/IP四层协议(五层协议)

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议族。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。(本质上TCP/IP协议也是OSI七层模型,只不过它把会话层、表示层、应用层合为应用层罢了)

物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wififi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层. (硬件层搞软件的不关注哦,仅讨论TCP/IP上四层)

数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.

网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 我们的网络编程主要就是针对应用层:

二、网络传输流程

封装:有效载荷+各层报头

解包:将报头和有效载荷分离的过程

分用:将有效载荷交给指定协议解包的过程

1、同一个网段内的两台主机进行文件传输

每一层的协议有很多种,右侧的那台计算机是如何将报文交给指定协议进行解包分用的呢?1、将报头和有效载荷分离2、将有效载荷正确的交给上层协议进行处理。

2、跨网段的主机的文件传输

数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。

如果两边数据链路层协议不一样怎么办?如图,左侧计算机将报文封装好后交给路由器,路由器将该报文先进行解包,这将去除以太网协议的报头,路由器再将该报文添加令牌环报头,这样就解决了底层协议的差异性,实现了不同数据链路层协议的数据传输。

当然,这可能经过多个路由器,通过MAC地址实现指定路由器的跳转。

三、IP地址和MAC地址

1、IP地址

IP地址通常在广域网使用,图上的是内网IP的地址,IPV4一共4个字节,每个字节范围0-255;IPV6是16个字节。

IP地址可以理解为起点到终点。

2、MAC地址

MAC地址通常在局域网使用,占6个字节。

MAC地址可以理解为起点到终点的一个个站点。


http://www.kler.cn/a/15853.html

相关文章:

  • C函数如何返回参数lua使用
  • ubuntu将firewall-config导出为.deb文件
  • 六、volatile
  • 网络安全之WINDOWS端口及病毒编写
  • 使用 Redis 作为消息队列 - Pub/Sub, List, SortedSet
  • flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例
  • 人工智能之配置环境教程二:在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境
  • leetcode 45. 跳跃游戏 II
  • KALI入门到高级【第三章】
  • iOS autorelease 示例研究
  • 读SQL进阶教程笔记14_SQL编程要点
  • 倾斜摄影超大场景的三维模型的顶层合并的轻量化处理技术
  • 信息系统项目管理师 第9章 项目范围管理
  • 如何理解自动化测试数据驱动与关键字驱动的区别?
  • 【C生万物】 指针篇 (初级)
  • 程序员都有哪些就业方向?不是所有人都能去互联网公司的!
  • Git HEAD及detached head
  • Android JetPack组件之Lifecycle
  • Linux中的阻塞机制
  • NetMQ | 发布订阅时使用含通配符的Topic
  • 第十一章 Transform组件(上)
  • 04_Uboot操作命令与其他命令
  • Shell(五)Bash行操作目录堆栈
  • gitlab部署及整合Jenkins持续构建(四)sonarqube9.9安装和使用(一步一坑)
  • 使用CXF调用WSDL
  • 如何高效的学习接口自动化测试?从零开始学习接口自动化测试:选择合适的学习资源和编程语言