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

相关文章

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了