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

2024-04-15 08:28

本文主要是介绍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规定的网络字节序来发送/接收数据;
  • 如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

这篇关于Linux网络基础 (二) ——(IP、MAC、端口号、TCPUDP协议、网络字节序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905324

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定