计算机网络(基础概念)

  • 1 初识协议
    • 1.1 协议分层
  • 2 OSI七层模型
    • 2.1 物理层
    • 2.2 数据链路层
    • 2.3 网络层
    • 2.4 传输层
    • 2.5 应用层
  • 3 TCP/IP协议族
    • 3.1 什么是TCP/IP协议?
      • 3.1.1 OS与网络关系
  • 4 网络传输的基本流程
    • 4.1 局域网
    • 4.2 MAC地址
  • 5 跨网络传输
    • 5.1 IP地址
  • 6 Socket编程预备
    • 6.1 源IP地址和目的IP地址
    • 6.2 端口号
  • 7 传统层的典型代表
  • 8 了解协议
    • 8.1 协议
    • 8.2 网络字节序
  • 9 socket 编程接口
    • 9.1 socket 常用API

1 初识协议

协议的本质就是一种约定
总的来说,协议在生活中无处不在。

1.1 协议分层

协议本质上也是软件,在设计上为了更好地模块化、解耦合,也是被设计为层状结构的
分层就是解耦合的有效方式,增强了代码的可维护性

2 OSI七层模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来我们只学习1-4层,其它层基本使用不到

2.1 物理层

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

2.2 数据链路层

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

2.3 网络层

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

2.4 传输层

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

2.5 应用层

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

在这里插入图片描述

OSI参考模型中,传输层的主要任务是向用户提供可靠的端到端服务,透明地传送报文,它向高层屏蔽了下层数据通信的细节,是计算机通信体系结构中最关键的一层。网络层的主要任务是通过路由算法,为分组通过通信子网选择最适当的路径。数据链路层的主要任务是在链路上无差错地传送以帧(frame)为单位的数据。物理层的主要任务是把用户的数据转换为电信号,透明地传送信号,是通信系统中最基本的扫描算法实现层。

3 TCP/IP协议族

在这里插入图片描述
所以,为什么要有 TCP/IP 协议?本质就是通信主机距离变远了

3.1 什么是TCP/IP协议?

TCP/IP 协议的本质是一种解决方案
TCP/IP 协议能分层,前提是因为问题们本身能分层

3.1.1 OS与网络关系

在这里插入图片描述
总结:网络就是OS的一部分,TCP/IP网络也是C语言写的,不管什么OS网络代码和数据一定是一样的,所谓的协议就是一个结构体
关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型
因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。

4 网络传输的基本流程

4.1 局域网

两台主机连接同一个局域网是能够直接通信的

4.2 MAC地址

1、MAC 地址用来识别数据链路层中相连的节点;
2、长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
3、在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址).
命令:ifconfig,查看自己的MAC地址(linux)(ehth0)
在这里插入图片描述
局域网通信
在这里插入图片描述
将每一台设备都看为一个网络协议栈,主机A向主机E发送信息,实际上是向所有的设备都发送这条信息,然后经由数据链路层来判断是否向本机发送的,如果不是直接忽略即可,所以对于上层的我们来说,我们根本不知道接没接收到消息

在以太网中同一时刻只允许存在一份报文,因为如果有多台设备互相发消息,可能会造成数据的污染,在这里以太网被视为临界资源,我们需要互斥的访问

1、以太网中,任何时刻,只允许一台机器向网络中发送数据
2、如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞
3、所有发送数据的主机要进行碰撞检测和碰撞避免
4、没有交换机的情况下,一个以太网就是一个碰撞域
5、局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac 地址判定
这里可以试着从系统角度来理解局域网通信原理

在这里插入图片描述
其中每层都有协议,所以当我进行进行上述传输流程的时候,要进行封装和解包
在这里插入图片描述
每一层添加报头的过程就是封装的过程
在这里插入图片描述
问题:网卡(硬件)怎么知道有数据传来?(中断)
同层之间的通信我们可以视为直接通信。

整体复盘一下
在这里插入图片描述

从今天开始,我们学习任何协议,都要先宏观上建立这样的认识:
1.要学习的协议,是如何做到解包的?只有明确了解包,封包也就能理解
2.要学习的协议,是如何做到将自己的有效载荷,交付给上层协议的?

5 跨网络传输

5.1 IP地址

IP 协议有两个版本, IPv4 和 IPv6. 我们整个的课程, 凡是提到 IP 协议, 没有特殊说明的,默认都是指 IPv4
•IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;
•对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;
•我们通常也使用 “点分十进制” 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

ifconfig :查看linux机器的ip地址

Mac VS IP:
在这里插入图片描述
通信图:
在这里插入图片描述
路由器是工作在网络层的设备,在A和B看来路由器就是一台主机,A和B也可以视为具有路由功能
在这里插入图片描述
在这里插入图片描述
在同一个路由器子网中,路由器会自动分配IP地址,同一个子网IP地址前缀一致

真实的网络通信:

在这里插入图片描述
IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异

6 Socket编程预备

6.1 源IP地址和目的IP地址

IP 在网络中,用来标识主机的唯一性
数据传输到主机不是目的,而是手段。到达主机内部,在交给主机内的进程,才是目的。
在这里插入图片描述

6.2 端口号

端口号(port)是传输层协议的内容.
• 端口号是一个 2 字节 16 位的整数;
端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
• IP 地址 + 端口号能够标识网络上的某一台主机的某一个进程;
一个端口号只能被一个进程占用.
在这里插入图片描述

IP地址标识特定主机,端口号标识特定进程
在这里插入图片描述

端口号范围划分
•0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的.
•1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的.

7 传统层的典型代表

如果我们了解了系统,也了解了网络协议栈,我们就会清楚,传输层是属于内核的,那么我们要通过网络协议栈进行通信,必定调用的是传输层提供的系统调用,来进行的网络通信。
在这里插入图片描述

8 了解协议

8.1 协议

认识 TCP 协议
此处我们先对 TCP(Transmission Control Protocol 传输控制协议)有一个直观的认识;后面我们再详细讨论 TCP 的一些细节问题.
•传输层协议
•有连接
•可靠传输
•面向字节流

认识 UDP 协议
此处我们也是对 UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识; 后
面再详细讨论.
•传输层协议
•无连接
•不可靠传输
•面向数据报

因为我们暂时还没有深入了解 tcp、udp 协议,此处只做了解即可

8.2 网络字节序

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?

发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;
接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;
•因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.
TCP/IP 协议规定,网络数据流应采用大端字节序,即低地址高字节.
•不管这台主机是大端机还是小端机, 都会按照这个 TCP/IP 规定的网络字节序来发送/接收数据;
•如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

9 socket 编程接口

9.1 socket 常用API

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address,
socklen_t address_len);
// 开始监听 socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address,
socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

在这里插入图片描述
上面我们可以用多态和继承来看待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88864.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88864.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88864.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专题 JavaScript 函数基础

你将知道:函数声明和表达式函数声明和表达式之间的区别什么是匿名函数什么是 IIFE命名函数表达式this 关键字函数是调用该函数时执行的代码块 。函数声明和表达式让我们回顾一下它的语法:functionfunctionName(param1, param2, ..., paramN) {// Functio…

数据结构——优先队列(priority_queue)的巧妙运用

优先队列是一种相对高级的数据结构,它的底层原理是二叉堆。然而本篇不会执着于深挖其背后的原理,更主要的是理一下它在题目中的一些实用方法,帮助你更快的上手使用。 优先队列(priority_queue) 优先队列的特别之处就在于它可以自动进行排序&…

Java:继承和多态(必会知识点整理)

主要内容继承多态向上转型向下转型方法重写方法重载super关键字动态绑定封装访问控制构造方法规则一、继承 1. 概念: 一句话说就是:“共性抽取,代码复用”子类会将父类中的成员变量或者成员方法继承到子类中子类继承父类之后,必须…

基于esp32系列的开源无线dap-link项目使用介绍

基于esp32系列的开源无线dap-link项目使用介绍🔖有关esp32/8266相关项目:需要自己搭建编译环境: https://github.com/windowsair/wireless-esp8266-dap/tree/master🌿支持esp32/c3/s3,支持在线固件烧录,支持AP配网&…

深入了解linux系统—— 进程信号的产生

前言 进程在收到信号之后,可以立即处理,也可以在合适的时间再处理(1-31号普通信号可以不被立即处理) 信号不是被立即处理,信号就要被保存下来,让进程在合适的时间再去处理。 相关概念 在了解进程是如何保存…

【Bluedroid】蓝牙协议栈enable流程深度解析

本文详细剖析 Bluedroid 蓝牙功能启用的核心流程,从enable()函数触发开始,深入解析蓝牙协议栈的异步启动机制、核心协议模块初始化、硬件控制器绑定及状态同步全流程。重点阐述接口就绪性检查、异步线程管理、配置文件回调机制等关键环节,揭示…

各种开发语言主要语法对比

各类主流编程语言的语法有着显著差异,这些差异源于语言设计哲学(简洁性 vs 显式性)、应用领域(系统级、Web、数据科学)、运行方式(编译 vs 解释)以及支持的范式(面向对象、函数式、过…

小鹏汽车6月交付车辆34,611辆,同比增长224%

小鹏汽车-W(09868)发布公告,2025年6月,小鹏汽车共交付智能电动汽车34,611辆,同比增长224%,这标志着小鹏汽车已连续第八个月交付量超过了30,000辆。2025年第二季度,小鹏汽车共交付103,181 辆智能电动车,创下…

深入理解观察者模式:构建松耦合的交互系统

在软件开发中,我们经常遇到这样的场景:一个对象的状态变化需要通知其他多个对象,并且这些对象需要根据变化做出相应的反应。比如,用户界面中的数据变化需要实时反映到多个图表上,或者电商系统中的库存变化需要通知订单…

React强大且灵活hooks库——ahooks入门实践之常用场景hook

什么是 ahooks? ahooks 是一个 React Hooks 库,提供了大量实用的自定义 hooks,帮助开发者更高效地构建 React 应用。其中场景类 hooks 是 ahooks 的一个重要分类,专门针对特定业务场景提供解决方案。 安装 ahooks npm install …

Qt常用控件之QWidget(一)

Qt常用控件之QWidget(一)1.QWidget2.enabled属性2.geometry🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Qt的学习】 📝📝本…

AIOT开发选型:行空板 K10 与 M10 适用场景与选型深度解析

前言 随着人工智能和物联网技术的飞速发展,越来越多的开发者、学生和爱好者投身于创意项目的构建。 在众多的开发板中,行空板 K10 和 M10 以其独特的优势脱颖而出。 本文旨在为读者提供一份详尽的行空板 K10 和 M10 对比分析,从适用场景、…

redis汇总笔记

语雀完整版: https://www.yuque.com/g/mingrun/embiys/calwqx/collaborator/join?tokensLcLnqz5Rv8hOKEB&sourcedoc_collaborator# 《Redis笔记》 Redis 一般问题 Redis内存模型(I/O多路模型)多路复用IO如何解释 为什么Redis要使用单线…

STM32用PWM驱动步进电机

硬件介绍:连线:注意这里stp连的是pwm脉冲,dir连的是方向到时候代码pwm波形就是从这里来的,具体接线根据你的代码来注意要点:步进电机和舵机驱动是不一样的,它是根据步长来移动的,所以要开一个中…

力扣25.7.10每日一题——重新安排会议得到最多空余时间 II

Description 今天这道题和昨天类似,只是允许顺序变化。 Solution 把会议区间视作桌子,空余时间视作空位,我们要把一个桌子移到别的空位中。 初步想法是枚举桌子,找一个长度大于等于桌子长度的空位移过去。看上去,找…

IP报文分片与重组原理及实现分析

IP报文分片与重组原理及实现分析 引用: ppp/net/packet/IPFragment.hppp/net/packet/IPFragment.cpp 1. IP分片原理 当IP数据包大小超过MTU(最大传输单元)时,路由器/主机将其分割为多个片段传输,每个片段包含&…

[python]在drf中使用drf_spectacular

安装drf_spectacular 文档 pypi链接:https://pypi.org/project/drf-spectacular/ 文档链接:https://drf-spectacular.readthedocs.io/en/latest/readme.html 安装步骤 在环境中添加 pip install drf-spectacular在setting的INSTALLED_APPS中添加 INSTALLED_APPS [# ALL…

【Datawhale AI 夏令营】 用AI做带货视频评论分析(二)

5.预训练模型跑分 回顾赛题 回顾赛题任务 挑战与难点: 标注数据少 ——> 半监督学习 or 数据增强 聚类分析噪点影响严重 回顾Baseline 问题: TF-IDF无法捕捉以下语义。聚类分析粗糙,未评估聚类质量。 提升方案: 分类任务…

SPSSPRO:数据分析市场SaaS挑战者的战略分析

目录 第一部分:执行摘要 第二部分:平台解构:产品、架构与用户体验 2.1 SaaS范式转移:架构与起源 2.2 功能能力:分析师的工具箱 2.3 “智能分析”的价值主张 第三部分:市场渗透与受众细分 3.1 目标用户…

低版本hive(1.2.1)UDF实现清除历史分区数据

目标&#xff1a;通过UDF实现对表历史数据清除 入参&#xff1a;表名、保留天数N 一、pom文件 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.…