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

文章目录

  • 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.mzph.cn/news/815672.shtml

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

相关文章

DAY8|344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词

344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词 344.反转字符串541. 反转字符串II151.翻转字符串里的单词 344.反转字符串 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时…

1.9 数据结构之 并查集

编程总结 在刷题之前需要反复练习的编程技巧,尤其是手写各类数据结构实现,它们好比就是全真教的上乘武功 本栏目为学习笔记参考:https://leetcode.cn/leetbook/read/disjoint-set/oviefi/ 1.0 概述 并查集(Union Find&#xff09…

vue2/vue3定时处理某个方法

一、vue2定时器 在Vue 2中,你可以使用mounted生命周期钩子来启动一个定时器,并在beforeDestroy钩子中清除它,以确保不会发生内存泄漏。以下是一个简单的例子: export default {data() {return {timerId: null};},mounted() {// …

# Nacos 服务发现-快速入门-测试多实例 Ribbon 负载均衡

Nacos 服务发现-快速入门-测试多实例 Ribbon 负载均衡 1、修改 服务生产模块 quickstart_provider 子工程中的 配置文件 application.yaml port: ${port:56010} # 启动端口 # 修改为动态传参,如果未传参数,默认端口为 56010 2、在 idea 中,…

内网渗透-Linux内网渗透

系列文章目录 文章目录 系列文章目录一、Linux内网渗透二、提权 2.1 利用内核漏洞进行提权2.2 利用文件权限配置不当进行提权2.3 利用SUID程序进行提权 三、隧道 3.1 SSH3.2 nc/ncat3.3 portmap3.4 portfw 四、反弹shell 4.1 bash4.2 netcat4.3 php4.4 perl4.5 python4.6 ruby4…

Prime (2021): 2

前言 这个靶机有亿点难,收获很多。打靶的时候,前面很顺,到创建ssh公钥之后就一点不会了。 1 01 arp扫描,发现有一个130,再查看端口 有22,80,129,445,10123 dirb扫描目录 这…

蓝牙技术在智能硬件中应用火热,你的蓝牙适配测试如何解决?

蓝牙技术在物联网中的应用非常广泛,可以为人们的生活和工作带来更多的便利和智能化体验,主要五大核心应用场景,具体如下: 1、智能家居 通过蓝牙连接智能家居设备,如智能灯泡、智能插座、智能恒温器等,可以…

chrome截屏插件用到的JavaScript 库,图像处理库,

包含的库介绍 javascripts\libs\ InboxSDK.js InboxSDK 是一个 JavaScript 库,用于在 Gmail 中添加应用菜单项目。它允许开发者向 Gmail 的应用菜单添加自己的项目,这些项目通常用于提供高级可折叠面板、导航或发送用户到已注册的不同路由 diigo-image-…

mysql 查询实战-变量方式-解答

对mysql 查询实战-变量方式-题目,进行一个解答。(先看题,先做,再看解答) 1、查询表中⾄少连续三次的数字 1,处理思路 要计算连续出现的数字,加个前置变量,记录上一个的值&#xff0c…

如何用C++判断一个系统是16位、32位还是64位?

如何用C判断一个系统是16位、32位还是64位&#xff1f; 方法一&#xff1a;使用指针的sizeof()判断 #include <iostream> using namespace std;int main() {int *p nullptr;if(sizeof(p) 8){cout << "64 bits system" << endl;}else if(sizeof(…

AI大模型日报#0413:谷歌引入“无限注意力”、Picsart AI 开源120秒超长AI视频模型

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 速递&#xff5c;木头姐 ARK 宣布已投资 OpenAI&#xff01;还将 Anthropic 及 Figure1 等 AI 独角兽一网打尽摘要: ARK已通过其风…

helm upgrade时 报错: another operation (install/upgrade/rollback) is in progress

用helm upgrade的时候&#xff0c;报错Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress 原因可能是之前有一次使用helm upgrade的时候&#xff0c;强制退出了命令(ctrlc) 解决方法: 对于 Helm v3 Helm 3 使用特殊的 Secrets 或 ConfigMap…

MySQL 建表语句详解

目录 基本建表语句 数据类型 列级约束 表级约束 表选项 示例 基本建表语句 CREATE TABLE table_name (column_name1 data_type(size) [column_constraints],column_name2 data_type(size) [column_constraints],...[table_constraints] ) [table_options]; table_name:…

IO流基本流

目录 什么是IO流 IO流的体系 字节流 FileOutputStream FileInputStream 字符集 字符流 FileReader FileWriter 字节流和字符流的使用场景 什么是IO流 内存不能永久化存储,程序停止,数据丢失,所以要添加一个存档功能,存储到硬盘的文件,我们要知道文件在哪里和如何传…

async-validator --- 中文文档

目录 async-validator Install Usage API Validate Rules Type 内置类型 Required Pattern Range Length Enumerable Whitespace Deep Rules 深层规则 defaultField 默认字段 Transform 变换 Messages 提示信息 asyncValidator 异步校验函数 validator 校验函…

【web3技术】什么是 WEB3?

Web3 简介 中心化网络已经帮助数十亿人融入了互联网,并在其上创建了稳定、可靠的基础设施。 与此同时,少数中心化巨头几乎垄断了互联网,甚至可以为所欲为。 Web3 是摆脱这一困境的方案。 不同于科技巨头垄断的传统互联网,Web3 采用去中心化,由所有用户构建、运营和拥有。…

day57 判断子序列 不同的子序列 两个字符串的删除操作 编辑距离

题目1 392 判读子序列 题目链接 392 判断子序列 题意 判断字符串s是否为字符串t的子序列 &#xff08;子序列的相对位置在原字符串中不改变&#xff09; 就是求最长公共子序列的长度与字符串s的长度是否相等 动态规划 1&#xff09;确定dp数组及下标i的含义 dp[i][j]…

城市预约挂号统一平台的实现

目录 一、需求分析 二、界面设计 ​ 三、前端开发 四、代码下载 一.需求分析 二、界面设计 三、前端开发 <!DOCTYPE html> <html lang"zh-ch"> <head><meta charset"UTF-8"><title>基本样式页</title><link rel…

Python中的可哈希与不可哈希对象详解

文章目录 1. 前置知识&#xff1a;哈希是什么2. 可哈希和不可哈希对象的定义2.1可哈希2.2 不可哈希 3. 对象的哈希方法3.1 自定义对象的哈希方法3.2 可哈希性与等价性3.3 哈希值的用途 推荐 在复习可变对象和不可变对象时&#xff0c;学到了这个内容 1. 前置知识&#xff1a;哈…