Linux网络基础 (二) ——(IP、MAC、端口号、TCPUDP协议、网络字节序)

news2024/12/25 1:19:20

文章目录

  • IP 地址
    • 基本概念
    • 源IP地址 & 目的IP地址
  • MAC 地址
    • 基本概念
    • 源MAC地址 & 目的MAC地址
  • 端口号
    • 基本概念
    • 源端口号 & 目的端口号
  • TCP & UDP 协议
    • 基本概念
    • TCP 与 UDP 的抉择
  • 网络字节序
    • 大端、小端字节序

🎖  博主的CSDN主页:Ryan.Alaskan Malamute
📜 博主的代码仓库主页 [ Gitee ]:@ryanala      [GitHub]: Ryan-Ala

IP 地址

基本概念

  • 在 TCP/IP 网络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则无法实现正常的通信。IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。

  • IP地址采用点分十进制的标记方式,将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制。例如:192.168.42.137

  • IP 地址最大值也就是 232 = 4294967296 ,即最大允许 43 亿台计算机连接到网络。但是以现在的网络的发展,通信设备的增加,IPv4 的地址是完全不够用的。但 IP 地址并不是根据主机台数来配置的,而是以网卡来配置的。服务器、路由器等设备都是有 2 个以上的网卡,也就是它们会有 2 个以上的 IP 地址,所以是不可能让43亿台计算机全部联网。

那么如何解决这个问题?

  1. 动态分配
    使用 动态分配 IP 地址:就是当有设备联网的使用分配一个 IP 地址给当前设备,如果当前设备不联网了,那么就不分配。但是这种方案是治标不治本的;
  2. NAT机制
    使用 NAT 机制:把 IP 分为 外网 IP内网 IP,用一个 外网 IP 代替 N 个内网 IP。

    举个例子
    在送快递时,收货地址填写学校,而学校里有很多人,每个人用姓名和手机号区分。那么网络也是如此,进入内网 IP 后则是使用 端口号 区分。

  3. 使用IPv6
    使用能够表示更多IP地址的IPv6 解决这个问题,这里不再过多展开

源IP地址 & 目的IP地址

在网络编程中不同主机间进行进程通信需要有IP地址分为源IP地址目的IP地址

  • 源IP地址: 表示该条信息来源于哪个机器。
  • 目的IP地址:表示该条信息去往于哪个进程。

在这里插入图片描述

  以太网上的每台计算机都有一个唯一的IP地址,假如一台主机上的数据要传输到另一台主机,那么发送信息的主机IP就是源IP地址,而接收这条信息的对端主机的IP地址就为目的IP地址。
  但网络通信是极其复杂的,在信息的交互过程中仅仅知道目的IP地址是不够的,当对端主机收到该数据后,对端主机还需要对该主机做出响应,因此对端主机也需要发送数据给该主机,此时对端主机就必须知道该主机的IP地址。因此一个传输的数据当中应该涵盖其源IP地址和目的IP地址,目的IP地址表明该数据传输的目的地,源IP地址作为对端主机响应时的目的IP地址。

  这两个地址在数据传输过程中基本是不会发生变化的(存在一些特殊情况,比如在数据传输过程中使用NET技术,其源IP地址会发生变化,但至少目的IP地址是不会变化的)

  在数据进行传输之前,会先自顶向下贯穿网络协议栈完成数据的封装,其中在网络层封装的IP报头当中就涵盖了源IP地址和目的IP地址。而除了源IP地址和目的IP地址之外,还有源MAC地址和目的MAC地址的概念。

MAC 地址

基本概念

Mac地址(英语:Media Access Control Address),称为局域网地址,Mac地址用于确认一个网络设备位置的位址

  • Mac地址也称物理地址,硬件地址,是网络硬件(如无线网卡或以太网卡)分配的唯一地址
  • 在ISO模型中,第三层网络层负责IP地址,第二层链路层负责Mac位址
  • Mac地址为六组两位字符组成,由冒号分隔,例:00:A4:31:3A:1B:B7
  • Mac地址用于在网络中标识一个唯一的网卡,一台设备如果由一个或者多个网卡,则每张网卡都需要有一个唯一的MAC地址

示例:
在这里插入图片描述

源MAC地址 & 目的MAC地址

  大部分数据的传输都是跨局域网的,数据在传输过程中会经过若干个路由器,最终才能到达对端主机。

  源MAC地址和目的MAC地址是包含在链路层的报头当中的,而MAC地址实际只在当前局域网内有效,因此当数据跨网络到达下一个局域网时,其源MAC地址和目的MAC地址就需要发生变化,因此当数据达到路由器时,路由器会将该数据当中链路层的报头去掉,然后再重新封装一个报头,此时该数据的源MAC地址和目的MAC地址就发生了变化。

再举个送快递的例子:
假如此时你买了一个快递,其发货地是江苏省南京市XXX街道105号,收货地是浙江省宁波市东部新城XXX路231号,那么此时途中需要经过 苏州站——杭州站——宁波站,这里的每一站就相当于是数据在以太网传送过程中的MAC地址

因此数据在传输的过程中是有两套地址:

  1. 源IP地址和目的IP地址,这两个地址一般情况下在传送过程中不会发生改变
  2. 源MAC地址和目的MAC地址,这两个地址是一直在发生变化的,数据每一次到达下一个路由器就会去掉之前的MAC地址,转而加上新的MAC地址

端口号

基本概念

  端口号的主要作用是表示一台计算机中的特定进程所提供的服务。一台计算机上可以同时提供很多个服务,如数据库服务、FTP服务、web服务等,我们就通过端口号来区别相同计算机所提供的这些不同的服务

端口号(port)是传输层协议的内容

  • 端口号是一个2字节16位的整数
  • 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理
  • IP地址 + 端口号 能够标识网络上的某一台主机的某一个进程
  • 一个端口号只能被一个进程占用

按端口号可分为2大类:

  1. 公认端口(Well-KnownPorts):范围从0到1023。

  2. 动态端口(Dynamic Ports):范围从1024到65535

源端口号 & 目的端口号

由于IP地址能够唯一标识公网内的一台主机,而端口号能够唯一标识一台主机上的一个进程,因此用IP地址+端口号就能够唯一标识网络上的某一台主机的某一个进程

当数据在传输层进行封装时,就会添加上对应源端口号和目的端口号的信息

  1. 通过源IP地址+源端口号就能够在网络上唯一标识发送数据的进程
  2. 通过目的IP地址+目的端口号就能够在网络上唯一标识接收数据的进程

这样就实现了跨网络的进程间通信。

注意一个进程可以绑定多个端口号,但是一个端口号不能被多个进程同时绑定。

TCP & UDP 协议

基本概念

  网络协议栈是贯穿整个体系结构的,在应用层、操作系统层和驱动层各有一部分。当我们使用系统调用接口实现网络数据通信时,不得不面对的协议层就是传输层,而传输层最典型的两种协议就是TCP协议和UDP协议。

  1. TCP(Transmission Control Protocol 传输控制协议)

    传输层协议、有连接、可靠传输、面向字节流

    TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

    TCP协议是面向连接的,如果两台主机之间想要进行数据传输,那么必须要先建立连接,当连接建立成功后才能进行数据传输。其次,TCP协议是保证可靠的协议,数据在传输过程中如果出现了丢包、乱序等情况,TCP协议都有对应的解决方法。

  • UDP(User Datagram Protocol 用户数据报协议)

    传输层协议、无连接、不可靠传输、面向数据报

    UDP协议是一种无需建立连接的、不可靠的、面向数据报的传输层通信协议。

    使用UDP协议进行通信时无需建立连接,如果两台主机之间想要进行数据传输,那么直接将数据发送给对端主机就行了,但这也就意味着UDP协议是不可靠的,数据在传输过程中如果出现了丢包、乱序等情况,UDP协议本身是不知道的。

TCP 与 UDP 的抉择

  • TCP协议是一种可靠的传输协议,使用TCP协议能够在一定程度上保证数据传输时的可靠性,而UDP协议是一种不可靠的传输协议,为什么还要用UDP协议呢?

  • 首先,TCP协议虽然是一种可靠的传输协议,但这意味着TCP协议在需要做更多的工作来保证可靠性,因此TCP协议实现很复杂,TCP协议面向连接虽然可靠,但底层复杂,在传输速率上没有UDP快速。

  • UDP协议虽然是一种不可靠的传输协议,但UDP协议不需要做过多的工作,因此UDP协议实现一定比TCP协议要简单,UDP协议虽不可靠,但是它能够快速的将数据发送给对方。

  • 编写网络通信代码时具体采用TCP协议还是UDP协议,完全取决于上层的应用场景。如果应用场景严格要求数据在传输过程中的可靠性,此时我们就必须采用TCP协议,如果应用场景允许数据在传输出现少量丢包,那么肯定优先选择UDP协议,因为UDP协议足够简单,快速。

网络字节序

大端、小端字节序

  大端 和 小端表示多字节值的哪一端存储在该值的起始地址处,小端存储在起始地址处,即是小端字节序,大端存储在起始地址处,即是大端字节序。

  • 大端字节序(Big Endian):最高有效位存于最低内存地址处,最低有效位存于最高内存处;
  • 小端字节序(Little Endian):最高有效位存于最高内存地址,最低有效位存于最低内存处。

如图:
在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五、Jenkins、Docker、SpringClound持续集成

Jenkins、Docker、SpringClound持续集成 一、部署介绍1.部署图2.微服务项目结构3.项目启动顺序 二、微服务项目在Windows运行1.配置java、maven环境2.初始化数据库表/数据2.1 tensquare_gathering服务表2.2 tensquare_gathering服务表 3.启动微服务4.微服务接口测试4.1 获取用户…

Tomcat源码解析——Tomcat的启动流程

一、启动脚本 当我们在服务启动Tomcat时,都是通过执行startup.sh脚本启动。 在Tomcat的启动脚本startup.sh中,最终会去执行catalina.sh脚本,传递的参数是start。 在catalina.sh脚本中,前面是环境判断和初始化参数,最终…

架构师系列-搜索引擎ElasticSearch(六)- 映射

映射配置 在创建索引时,可以预先定义字段的类型(映射类型)及相关属性。 数据库建表的时候,我们DDL依据一般都会指定每个字段的存储类型,例如:varchar、int、datetime等,目的很明确,就…

45.HarmonyOS鸿蒙系统 App(ArkUI)创建列表(List)

列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列…

Qt快速入门(MV架构之TableView + QStandardItemModel + 自定义代理小案例)

Qt快速入门(MV架构之TableView QStandardItemModel 自定义代理小案例) 关于MV架构的简单介绍 在Qt框架中,代理(Delegate)、模型(Model)和视图(View)之间的关系构成了…

14_SpringMVC

文章目录 MVCSpringMVC与JavaEE对比SpringMVCSpringMVC的核心流程SpringMVC入门案例RequestMapping注解的使用Handler方法的返回值Handler方法的形参keyvalue形式的请求参数Json请求参数 RESTful风格接口静态资源处理FilterHandlerInterceptor异常处理SpringMVC核心流程流程图 …

自动化收集Unity版本更新日志

自动化收集Unity版本更新日志 🍥功能介绍🥪食用手册填写配置开始搜集 🍨数据展示 🍥功能介绍 💡获取指定年份中所有的Unity版本更新日志。 💡根据指定字符串过滤。 💡.收集后自动保存成markdow…

架构师系列-搜索引擎ElasticSearch(四)- 高级查询

ES查询 matchAll 脚本方式 该方式可以通过kabana、curl、elasticsearch-head(纯前端)去操作 # 默认情况下,es一次展示10条数据,通过from和size来控制分页 # 查询结果详解 GET goods/_search {"query": {"match_all":…

如何在MacOS上使用OpenHarmony SDK交叉编译?

本文以cJSON三方库为例介绍如何通过OpenHarmony的SDK在Mac平台进行交叉编译。 环境准备 SDK准备 我们可以通过 openHarmony SDK 官方发布渠道下载对应mac版本的SDK,当前OpenHarmony MAC版本的SDK有2种,一种是x86架构,另一种是arm64&#x…

二叉树例题分享

文章目录 二叉树例题分享[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)[701. 二叉搜索树中的插入操作](https://leetcode.cn/problems/insert-into-a-binary-search-tree/)[108. 将有序数组转换为二叉搜索树…

分享一些有趣的 Linux 命令

1、sl 会显示一辆火车穿过你的终端屏幕 2、cmatrix 在终端中显示类似于《黑客帝国》电影中的绿色数字雨效果 3、fortune 显示一个随机的名人名言或者笑话 4、cowsay 让一头牛说出你输入的话 5、toilet 在终端中将输入的文本以艺术字体的形式呈现 6、figlet 类似于 toile…

Python数据分析案例41——基于CNN-BiLSTM的沪深300收盘价预测

案例背景 虽然我自己基于各种循环神经网络做时间序列的预测已经做烂了.....但是还是会有很多刚读研究生或者是别的领域过来的小白来问这些神经网络怎么写,怎么搭建,给我一篇论文看看感觉很厉害的样子。我一看:普刊、单变量时间序列预测、一个…

软考中级工程师网络技术第二节网络体系结构

OSPF将路由器连接的物理网络划分为以下4种类型,以太网属于(25),X.25分组交换网属于(非广播多址网络NBMA)。 A 点对点网络 B 广播多址网络 C 点到多点网络 D 非广播多址网络 试题答案 正确答案: …

VS2019调试

最近开始了解单步调试 开始我按下F11键是没用的。 Visual Studio 调试快捷键失效_visual studio code用不了快捷键-CSDN博客 我的F11对应的系统功能是调小音量。 所以有两种模式: (1)按下F11,调小音量 (2)按下F11,单步调试 通过Fnesc键进行模式的切换。 还有一…

数据结构初阶:二叉树(二)

二叉树链式结构的实现 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在对二叉树结构掌握还不够深入,为了降低学习成本,此处手动快速创建一棵简单的二叉树,快速进入二…

网络篇10 | 网络层 IP

网络篇10 | 网络层 IP 01 简介02 名称解释03 IP报文格式(IPv4)1)4位版本协议(version)2)4位首部长度(header length)3)8位服务类型(Type Of Service, TOS)4)16位总长度5)16位(分片)标识6)3位(分片)标志7&am…

【算法】回溯:与递归,dfs的同质与分别,剪枝与恢复现场的详细理解,n皇后的回溯解法及算法复杂度分析。

目录 ​编辑 1.什么是回溯 2.关于剪枝 3.关于恢复现场 4.题目:二叉树的所有路径(凸显恢复现场:切实感受回溯与深搜) 问题分析 ①函数设置为:void Dfs(root) ②函数设置为:void Dfs(root,path) 解题思想&…

unity记一下如何播放动画

我使用的版本是2022.3.14fc 展开你的模型树,是会出现这个三角形的东西的 然后在资源面板创建一个animation controller 进去之后,把三角形拖进去,就会出现一个动画,然后点击他 在左侧给他创建这么个状态名字,类型…

【JavaEE多线程】理解和管理线程生命周期

目录 ThreadThread类的常用构造方法Thread类的常见属性启动一个线程-start()终止一个线程等待一个线程-join()线程的状态 Thread Thread 就是在 Java 中,线程的代言人。系统中的一个线程,就对应到 Java 中的一个 Thread 对象。围绕线程的各种操作&#…

webrtc中的Track,MediaChannel,MediaStream

文章目录 Track,MediaChannel,MediaStream的关系MediaStream的创建流程创建VideoChannel的堆栈创建VideoStream的堆栈 sdp中媒体参数信息的映射sdp中媒体信息参数设置体系参数设置流程参数映射体系 Track,MediaChannel,MediaStream的关系 Audio/Video track,MediaC…