您现在的位置是:首页 >技术教程 >unix网络网站首页技术教程

unix网络

Answer﹄ 2026-04-10 00:01:04
简介unix网络

unix网络

  1. 网卡:网络适配器 将模拟信号转换为数字信号 48bit ,6字节

  2. ip地址:标识网卡的虚拟ip 组成为 子网ID+主机ID

    1. ipv4 :32b (局域网里面一般是ipv4、广域网是ipv6)

      1. ipv6 :128b
      2. ip分为:host_id 、子网id
    2. 子网掩码:连续的1和0组成,单独存在无意义,

      10.1.2.2/255.255.255.0

      二进制

      0000 1010 0000 0001 0000 0010 0000 0010

      子网掩码

      1111 1111 1111 1111 1111 1111 0000 0000

      子网id:ip中被子网掩码1连续覆盖的位 就是10.1.2

      主机id:ip中被子网掩码0连续覆盖的位 就是2

      10.1.2.2/255.255.0.0 该子网可以容纳多少主机呢?

      主机id是2.2 两个字节16bit 、子网id是10.1.0.0

      故支持 2^16 - 2(主机id全为0网段地址 10.1.0.0,主机地址全为1的广播地址 10.1.255.255

      网关:也是一块网卡,占用该局域网的一个ip,一般负责将数据转发到外网中

  3. ip地址划分

    1. A类:(1.0.0.0-126.0.0.0) 默认8bit 子网ID 第一bit 为0

      举例 ip: 10.100.50.20 掩码:255.0.0.0

      第一bit为0,故剩7bit,0111 110 = 126。 127是特殊地址

    2. B类:(128.0.0.0-191.255.0.0) 默认16bit 子网ID 第两位为10

      1000 0000 0000 0000 ----- 1011 1111 0000 0000 (128.0 --- 191.255)

    3. C类:(192.0.0.0-223.255.255.0) 默认24bit 子网ID 第一位为110

    4. D类:前四位为1110,多播地址

    5. E类:前五位为11110,保留

    划分子网情况

    假设将一个 A 类网络 172.0.0.0 进行子网划分,比如借 3 位主机位来划分子网。原来的 8 位网络 ID 部分就会发生变化,子网掩码变为255.224.0.0​,二进制为11111111.111​​​​​​​​ 00000.00000000.00000000​。网络ID 部分实际上变成了 11 位,其中前 8 位是原来 A 类网络的网络 ID 位,后 3 位是从主机位借来用于子网划分的位,而主机 ID 部分则剩下 21 位。

    • 子网数量:借 3 位主机位后,可划分出的子网数量为 2³ = 8 个。因为这 3 位可以有 2³ 种不同的组合,每种组合代表一个不同的子网。
    • 每个子网的主机数量:每个子网可用的主机数量变为 2²¹ - 2 = 2097150 台。这里减去 2 是因为要去掉全 0 的网络地址和全 1 的广播地址,它们不能分配给具体的主机使用。

    如何区分ip是哪类地址

    127 开头的 IP地址进行网络通信时,数据并不会真正发送到外部网络,而是直接在本地计算机内部进行回环处理

    A:第一个字节的取值范围是 1 到 126 1.0.0.0 到 126.255.255.255。

    B:第一个字节的取值范围是 128 到 191 128.0.0.0 到 191.255.255.255。

    C:第一个字节的取值范围是 192 到 223 192.0.0.0 到 223.255.255.255。

    D:第一个字节的取值范围是 224 到 239 224.0.0.0 到 239.255.255.255。

    E:第一个字节的取值范围是 240 到 255 240.0.0.0 到 255.255.255.255。

    公有ip 直接连接外网

  4. 回环ip 127.0.0.1 - 127.255.255.254 (去掉全 0 的网络地址和全 1 的广播地址

    也是本地ip。不会经过链路层

  5. 端口

    两个字节 端口号范围 0 - 65535

    一些著名服务程序有默认使用端口。我们使用需要避开

    公认端口(Well - Known Ports)

    范围:0 - 1023。

    注册端口(Registered Ports)

    范围:1024 - 49151。

    动态或私有端口(Dynamic or Private Ports)

    范围:49152 - 65535。

  6. 计算方式

    16个bit, 2左移16位就是2^16-1=65535

    image

  7. osi

    应用层

    表示层(数据的转换)

    会话层(建立会话层)

    传输层(不同主机上的应用程序提供可靠或不可靠的端到端服务、TCP、UDP)

    网络层(将帧封装成数据包,根据ip找到目标节点)

    链路层(比特流组成帧,具有错误检测和纠正)

    物理层(物理设备)

  8. UDP(User Datagram Protocol)即用户数据报协议

    • 在发送时,UDP 会给每个报文添加一个 UDP 首部,然后直接封装成 IP 数据报发送出去。接收方收到 UDP 数据报后,去掉首部就得到了原始的应用层报文。
    • 开销小:UDP 的首部只有 8 个字节,相比 TCP 的首部(通常至少 20 个字节)要小很多,因此在传输过程中带来的额外开销较小,这使得 UDP 在对传输效率要求较高的场景中具有优势。

    UDP 首部固定长度为 8 字节,由 4 个字段组成,每个字段占 2 字节(16 位),具体结构如下:

    字段长度(字节)描述
    源端口(Source Port)2标识发送该 UDP 数据报的应用程序端口号。若不需要回复,该字段可以置为 0。通过源端口,接收方在需要响应时能知道将数据发回哪个应用程序。例如,客户端向服务器发送请求时,源端口就是客户端应用程序所使用的端口。
    目的端口(Destination Port)2标识接收该 UDP 数据报的应用程序端口号。它告诉网络设备将数据报递交给目标主机上的哪个应用进程。比如,当用户访问网页时,HTTP 服务默认使用 80 端口(HTTP/2 使用 443 端口),客户端发送的 UDP 数据报的目的端口就会设置为 80(或 443)。
    长度(Length)2指整个 UDP 数据报的长度,包括首部和数据部分。其最小值为 8(仅包含首部),最大值为 65,535 字节。这个字段可以帮助接收方确定数据报的边界,正确提取出数据。
    校验和(Checksum)2用于检测 UDP 数据报在传输过程中是否发生错误。计算校验和时,不仅会涵盖 UDP 首部和数据部分,还会引入一个伪首部(包含源 IP 地址、目的 IP 地址、协议号等信息),以增强校验的准确性。接收方会重新计算校验和并与接收到的校验和进行对比,如果不一致则表明数据可能在传输中受损
  9. IP数据报文

    报文组包和拆包详细

    在 IPv4 协议里,IP 头部固定部分的长度是 20 字节,不过完整的 IP 头部长度会因可选字段的存在而有所变化。下面从固定部分结构、可选字段情况以及 IPv6 头部情况展开介绍:

    IPv4 头部固定部分(20 字节)

    |这 20 字节包含多个关键字段,各字段协同完成网络数据传输的基础功能,以下是详细的字段结构及作用:|||

    字段名所占字节数作用
    版本1明确 IP 协议版本,常见为 4(IPv4)和 6(IPv6),告知接收方按对应规则解析数据报。
    首部长度1以 4 字节为单位表示 IP 首部长度,固定部分最小为 5(即 20 字节),若有可选字段则值会增大。
    服务类型1早期用于指定优先级、延迟、吞吐量和可靠性等服务质量参数,现在多被 DSCP 和 ECN 替代。
    总长度2整个 IP 数据报(含首部和数据)的长度,单位为字节,受限于链路层 MTU。
    标识2唯一标识一个 IP 数据报,当数据报分片时,所有分片具有相同标识,方便接收方重组。
    标志1含三个标志位,保留位(必为 0)、不分片位(DF,为 1 时禁止分片)、更多分片位(MF,为 1 表示后续还有分片)。
    片偏移2以 8 字节为单位表示该片在原始数据报中的相对位置,辅助接收方按序组装分片。
    生存时间(TTL)1数据报在网络中可经过的最大跳数,每经一个路由器减 1,减为 0 则丢弃,防止无限循环。
    协议1指示 IP 数据报封装的上层协议,如 6 代表 TCP,17 代表 UDP。
    首部校验和2仅对 IP 首部进行校验,检测传输中首部是否出错。
    源 IP 地址4发送方的 IP 地址。
    目的 IP 地址4接收方的 IP 地址。

    IPv4 头部可选字段

    可选字段并非必需,其存在会使 IP 头部长度超过 20 字节。这些字段用于实现排错、测量以及安全等特殊功能,例如记录路径选项(记录数据报经过的路由器 IP 地址)、时间戳选项(记录每个路由器处理数据报的时间)等。不过,由于会增加首部处理的复杂度和数据报的长度,在实际网络中使用相对较少。

    IPv6 头部情况

    IPv6 对头部结构进行了简化和优化,其基本头部固定长度为 40 字节。与 IPv4 相比,移除了一些不常用的字段,同时采用了扩展头部的方式来实现可选功能,这样既保证了基本头部的简洁性,又能灵活支持各种扩展需求。

    1. IP协议解析

      C:Usersqwe>ping www.baidu.com

      正在 Ping www.a.shifen.com [220.181.111.232] 具有 32 字节的数据:
      来自 220.181.111.232 的回复: 字节=32 时间=6ms TTL=53
      来自 220.181.111.232 的回复: 字节=32 时间=6ms TTL=53

      初始 TTL 值通常为 64 或 128 等,经过若干跳后剩余 53,大致推断源设备与本地设备之间经过的路由器数量,这里大约经过了 11 跳。11个路由器,当TTL为0时也没到服务器,数据报文丢失。

      1. 16位总长度: 指定IP包的总长

        • 利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。
        • 因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。以太网的最小帧长为46个字节,但IP数据可能会更短。所以通过总长度字段,在IP层中确定46字节中有多少是IP数据报的内容。
      2. 8位协议: 封包所使用的网络协议类型,如ICMP、DNS等。各协议对应的值如图:

        协议号(十六进制)协议协议号(十六进制)协议
        00IP22XNS - IDP
        01ICMP27RDP
        02IGMP29ISO - TP4
        03GGP36XTP
        04IP - ENCAP37DDP
        05ST39IDPR - CMTP
        06TCP73RSPF
        08EGP81VMTP
        12PUP89OSPFIGP
        17UDP94IPIP
        20HMP98ENCAP
  10. 举例A发送数据过程,B接收过程 倒着来就行

    应用层: 飞秋协议+hello

    传输层: udp协议(源、目端口)+飞秋协议+hello

    网络层: ip协议(源、目ip地址)+udp协议(源、目端口)+飞秋协议+hello

    链路层:mac+ ip协议(源、目ip地址)+udp协议(源、目端口)+飞秋协议+hello

    image

    1. IEEE 802.3 数据帧结构 和以太网封装

      帧结构类型字段 1字段 2字段 3字段 4字段 5字段 6字段 7
      IEEE 802.3 LLC/SNAP 帧结构目的 MAC 地址源 MAC 地址长度字段LLC 首部SNAP 首部数据帧校验序列
      Ethernet II 帧结构目的 MAC 地址源 MAC 地址类型字段数据帧校验序列//

      这两者数据 都是ip报文、arp请求应答、rarp请求应答等填充

      类型字段判断是ip报文、arp请求应答、rarp请求应答 哪个

      当为0x0800时,表示该数据包是IPv4协议包。

      当为0x08DD时,表示该数据包是IPv6协议包。

      当为0x0806时,表示该数据包是ARP协议包。

      当为0x0835时,表示该数据包是RARP协议包。

      以太网帧解析 一定点开看看

      image

  11. 网络开发模型

    B/S: 浏览器和服务器

    • 优点:客户端零维护,业务扩展易,访问便捷,通用性强。
    • 缺点:服务器压力大,有浏览器兼容性问题,响应速度受限,功能实现受限。

    C/S: 客户端和服务器

    • 优点:本地资源利用好,响应快,定制性强,安全控制优。
    • 缺点:安装不便,维护成本高,扩展性受限,操作系统兼容性差。
  12. 网络字节序函数

    1. 主机转网络字节序

      无论主机是大端,运行下面函数都是转成大端序

      htonl 将32位主机字节序转为网络字节序

      htons 将16位主机字节序转为网络字节序

      头文件 <arpa/inet.h>
    2. 网络字节序转主机

      ntohs

      ntohl

    3. 地址转换

      1. 点分十进制串:192.168.1.123

        int inet_pton(int af, const char *src, void *dst);

        将点分十进制串转换为32位大端的整数

      2. const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

        size:存储点分十进制大小

UTP通迅

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。