青青子衿
Published on 2026-07-16 / 0 Visits
0
0

IP地址与TCP协议

IP地址与TCP协议——互联网的"门牌号"与"快递规则"

导读:如果把互联网比作一座超级大城市,那IP地址就是每栋楼的"门牌号",而TCP协议就是快递员送货时必须遵守的"签收流程"。没有门牌号,快递找不到地方;没有签收规则,包裹丢了都不知道。今天我们就来搞清楚这两件大事!


一、IP地址:给每台电脑一个"身份证号"

1.1 为什么需要IP地址?

问题场景:小明在家用电脑上网课,同时手机也在刷视频。路由器怎么知道网课数据该给电脑、视频数据该给手机呢?

解决方案:每台设备都有一个唯一的IP地址,就像每个人都有一个身份证号。路由器根据IP地址把数据"快递"到正确的设备。

生活类比:IP地址 = 你家的详细收货地址。快递员(路由器)根据地址把包裹(数据)送到正确的地方。

1.2 IPv4的结构

IPv4地址是一个 32位 的二进制数,为了方便人类阅读,我们把它分成4组,每组8位,用十进制表示,中间用点隔开——这就是点分十进制表示法

二进制:11000000 . 10101000 . 00000001 . 00000001
十进制:   192    .    168   .     1    .     1

点分十进制的范围:每一组(8位)最小 00000000=0,最大 11111111=255。

所以合法的IP地址范围:0.0.0.0 ~ 255.255.255.255

1.3 二进制与十进制的互相转换

这是网络基础中的基础,考试常考!

十进制 → 二进制(除2取余法)

以192为例:

192 / 2 = 96  ... 余 0
 96 / 2 = 48  ... 余 0
 48 / 2 = 24  ... 余 0
 24 / 2 = 12  ... 余 0
 12 / 2 = 6   ... 余 0
  6 / 2 = 3   ... 余 0
  3 / 2 = 1   ... 余 1
  1 / 2 = 0   ... 余 1
从下往上读:11000000

快捷方法——记住权值表

1286432168421

例如:168 = 128 + 32 + 8 = 10101000

二进制 → 十进制:把为1的位的权值加起来。

例如 10101000:128 + 32 + 8 = 168

互动提问:请把十进制数 200 转换成二进制。提示:200 = 128 + 64 + 8,答案是什么?(答:11001000

1.4 查看和配置IP地址

操作RHEL系(CentOS/Rocky)Debian系(Ubuntu)
查看IPip addrip aip addrip a
旧版查看ifconfig(需装net-tools)ifconfig(需装net-tools)
临时设置IPip addr add 192.168.1.100/24 dev eth0同左
永久配置编辑 /etc/sysconfig/network-scripts/ifcfg-eth0编辑 /etc/netplan/01-netcfg.yaml
重启网络nmcli connection reloadnetplan apply

RHEL系配置文件示例

# /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8

Debian系Netplan配置示例

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

二、子网掩码:区分"自己人"和"外人"

2.1 子网掩码的作用

问题场景:你的电脑IP是 192.168.1.100,想给 192.168.1.200 发文件——这是同一个局域网内的"自己人",直接发就行。但如果你想访问 8.8.8.8(Google DNS),那就得通过网关(路由器)转发。电脑怎么知道对方是"自己人"还是"外人"?

解决方案:用子网掩码!把IP地址和子网掩码做"按位与"运算,如果结果相同,说明在同一个子网内,可以直接通信。

生活类比:子网掩码就像"同一个小区"的判断规则。如果你的楼栋号和对方的楼栋号在同一个小区范围内(同一子网),你可以直接走过去;否则你得走小区大门(网关)。

2.2 子网掩码的表示方法

传统写法255.255.255.0

CIDR表示法(斜线记法):/24

CIDR的含义:子网掩码中连续1的个数。

CIDR子网掩码二进制子网掩码可用主机数
/8255.0.0.011111111.00000000.00000000.0000000016,777,214
/16255.255.0.011111111.11111111.00000000.0000000065,534
/24255.255.255.011111111.11111111.11111111.00000000254
/25255.255.255.12811111111.11111111.11111111.10000000126
/26255.255.255.19211111111.11111111.11111111.1100000062
/27255.255.255.22411111111.11111111.11111111.1110000030
/28255.255.255.24011111111.11111111.11111111.1111000014
/30255.255.255.25211111111.11111111.11111111.111111002

可用主机数公式:2^(32-CIDR) - 2(减去网络地址和广播地址)

互动提问:子网掩码 255.255.255.240 对应CIDR是多少?这个子网有多少可用IP?
(答:/28,可用IP = 2^4 - 2 = 14个)

2.3 按位与运算示例

IP: 192.168.1.100,掩码: 255.255.255.0

IP地址:   11000000.10101000.00000001.01100100  (192.168.1.100)
子网掩码: 11111111.11111111.11111111.00000000  (255.255.255.0)
按位与:   11000000.10101000.00000001.00000000  (192.168.1.0) ← 网络地址

三、子网划分实战

3.1 为什么需要子网划分?

问题场景:学校有4个部门——教务处(60台电脑)、学生机房(120台)、行政办公室(30台)、图书馆(14台)。如果全放一个子网里,广播风暴会影响所有部门,而且不便于安全管理。

解决方案:把一个大的网段划分成多个小的子网,每个部门一个子网。

生活类比:一栋教学楼有很多班级,如果所有人都在一个大厅里上课,吵得根本听不见。所以要隔成多个教室,每个班级独立上课。

3.2 子网划分步骤

需求:将 192.168.1.0/24 划分给4个部门。

第一步:确定每个子网需要的最大主机数——120台(学生机房)。

第二步:计算主机位。120 < 126 = 2^7 - 2,所以需要7位主机位。

第三步:网络位 = 32 - 7 = 25,即 /25,子网掩码 255.255.255.128

第四步:划分结果:

子网网络地址可用范围广播地址容量
子网1192.168.1.0/25192.168.1.1 ~ 192.168.1.126192.168.1.127126
子网2192.168.1.128/25192.168.1.129 ~ 192.168.1.254192.168.1.255126

如果还需要更细的划分,可以在子网2的基础上继续划:

子网网络地址可用范围广播地址容量
子网2a192.168.1.128/26.129 ~ .190.19162
子网2b192.168.1.192/26.193 ~ .254.25562

继续细分2b:

子网网络地址可用范围广播地址容量
子网2b-1192.168.1.192/27.193 ~ .222.22330
子网2b-2192.168.1.224/27.225 ~ .254.25530

继续细分2b-2:

子网网络地址可用范围广播地址容量
子网2b-2a192.168.1.224/28.225 ~ .238.23914
子网2b-2b192.168.1.240/28.241 ~ .254.25514

最终分配方案

部门子网容量
学生机房192.168.1.0/25126
教务处192.168.1.128/2662
行政办公室192.168.1.192/2730
图书馆192.168.1.224/2814

四、私有地址与公网地址

4.1 为什么会有私有地址?

问题场景:IPv4总共约43亿个地址,全球有上百亿台设备,IP地址不够用怎么办?

解决方案:划定一些"私有地址段",只能在局域网内使用,不需要全球唯一。你家的路由器和邻居家的路由器可以使用相同的私有地址(如 192.168.1.1),互不干扰。

4.2 三类私有地址

类别私有地址范围CIDR地址数量典型场景
A类10.0.0.0 ~ 10.255.255.25510.0.0.0/8约1677万大型企业/云内网
B类172.16.0.0 ~ 172.31.255.255172.16.0.0/12约104万中型企业
C类192.168.0.0 ~ 192.168.255.255192.168.0.0/16约6.5万家庭/小型办公室

互动提问:你家的路由器管理页面地址是什么?常见的有 192.168.1.1192.168.0.1,它们属于哪类私有地址?(答:C类私有地址)

4.3 NAT(网络地址转换)

问题场景:你家有3台设备(手机、电脑、平板),都用的私有地址(如192.168.1.x),但上网时运营商只给了你1个公网IP。3台设备怎么共享1个公网IP上网?

解决方案:NAT(Network Address Translation)。路由器在转发数据时,把内部的私有IP替换成公网IP,并记住对应关系,收到回包时再转换回来。

生活类比:NAT就像公司前台。外面的人只认识公司总机号码(公网IP),前台(路由器)接到电话后,根据分机号(私有IP)转接到具体的人。

内部网络                   路由器(NAT)              互联网
手机 192.168.1.2 ───→  替换源IP为公网IP  ───→  目标服务器
电脑 192.168.1.3 ───→  替换源IP为公网IP  ───→  目标服务器
平板 192.168.1.4 ───→  替换源IP为公网IP  ───→  目标服务器
          ↑                    │
          └──── 根据端口映射表 ──┘
              把回包转给正确的设备

五、IPv6简介

5.1 为什么需要IPv6?

问题:IPv4的43亿个地址已经用完了(2019年IANA正式宣布IPv4地址池耗尽)。

解决方案:IPv6采用 128位 地址,地址总数约 3.4x10^38 个——号称能给地球上每一粒沙子都分配一个IP。

5.2 IPv6 vs IPv4 对比

特性IPv4IPv6
地址长度32位128位
表示方式点分十进制(192.168.1.1)冒号分隔十六进制
地址数量约43亿约3.4x10^38
配置方式手动或DHCP支持自动配置(SLAAC)
安全性IPSec可选IPSec内置
NAT必需理论上不需要

IPv6地址示例

完整:2001:0db8:85a3:0000:0000:8a2e:0370:7334
简写:2001:db8:85a3::8a2e:370:7334

简写规则:连续的0段可以用 :: 代替(只能用一次);每段的前导0可省略。

查看IPv6地址

ip -6 addr show
# 或
ifconfig | grep inet6

六、TCP/IP协议族

6.1 OSI七层模型(简化版)

OSI模型是网络通信的理论框架,我们用"寄快递"来类比:

层次名称快递类比代表协议
7应用层你写了一封信(内容)HTTP、FTP、SMTP、DNS
6表示层翻译成对方看得懂的语言SSL/TLS、JPEG
5会话层确定跟谁对话建立/管理会话
4传输层选择快递方式(顺丰=TCP/普通=UDP)TCP、UDP
3网络层规划运输路线IP、ICMP
2数据链路层每一段路上的交通工具Ethernet、ARP
1物理层公路、铁路等基础设施网线、光纤、WiFi信号

实际中:我们更常用简化的 TCP/IP四层模型:应用层、传输层、网络层、网络接口层。


6.2 TCP三次握手——建立连接

TCP是面向连接的可靠传输协议,通信前必须先"握手"建立连接。

生活类比:就像打电话——

  1. 你:喂,听得到吗?(SYN)
  2. 对方:听得到,你听得到我吗?(SYN+ACK)
  3. 你:听得到!那我们开始说吧。(ACK)
客户端                                    服务器
  |                                         |
  |---- 1 SYN (seq=x) ------------------->|   客户端发起连接请求
  |                                         |
  |<--- 2 SYN+ACK (seq=y, ack=x+1) ------|   服务器确认并回复
  |                                         |
  |---- 3 ACK (ack=y+1) ----------------->|   客户端确认,连接建立
  |                                         |
  |              连接建立成功!               |
  |              开始传输数据...              |

为什么是三次而不是两次?
如果只有两次握手,一个延迟的旧SYN包到达服务器时,服务器会认为连接已建立,白白浪费资源。第三次握手让客户端确认"确实是我要建立的连接"。

6.3 TCP四次挥手——断开连接

客户端                                    服务器
  |                                         |
  |---- 1 FIN (seq=u) ------------------->|   客户端:我发完了
  |                                         |
  |<--- 2 ACK (ack=u+1) -----------------|   服务器:收到,但我可能还没发完
  |                                         |
  |       (服务器继续发送剩余数据)           |
  |                                         |
  |<--- 3 FIN (seq=w) --------------------|   服务器:我也发完了
  |                                         |
  |---- 4 ACK (ack=w+1) ----------------->|   客户端:收到,连接关闭
  |                                         |
  |         等待 2MSL(超时时间)             |   确保对方收到最后的ACK
  |                                         |
  |              连接完全关闭!               |

为什么是四次而不是三次?
因为TCP是全双工的(双方可以独立收发数据)。一方说"我发完了"不代表对方也发完了,所以需要各自独立关闭发送通道。

互动提问:你在浏览器打开一个网页后关闭标签页,TCP连接经历了什么过程?
(答:先经过三次握手建立连接,传输完网页数据后,通过四次挥手断开连接。)

6.4 UDP vs TCP 对比

特性TCPUDP
连接方式面向连接(三次握手)无连接
可靠性可靠(确认、重传、排序)不可靠(发了就不管)
速度较慢
头部大小20字节8字节
典型应用网页(HTTP)、SSH、文件传输视频直播、DNS查询、游戏

生活类比

  • TCP = 顺丰快递:保证送达、签收确认、有单号追踪
  • UDP = 校园广播:播了就播了,不管你听没听到

七、常见端口号

端口号就像"门牌号里的房间号"。IP地址找到了大楼,端口号找到具体哪个房间(哪个程序)接收数据。

端口协议用途说明
20FTP-DataFTP数据传输传输文件内容
21FTP-ControlFTP控制连接发送命令(登录、列目录等)
22SSH安全远程登录加密传输,替代Telnet
23Telnet远程登录(明文)不安全,生产环境禁用
25SMTP发送邮件发件用
53DNS域名解析域名转IP地址
80HTTP网页浏览明文传输
443HTTPS加密网页HTTP + TLS加密
3306MySQLMySQL数据库默认端口
6379RedisRedis缓存内存数据库
8080HTTP-AltWeb替代端口常用于Tomcat/开发环境

查看本机开放端口

# 通用
ss -tlnp          # 查看TCP监听端口及对应进程
netstat -tlnp     # 旧版命令(需安装net-tools)

# RHEL系
ss -tlnp | grep -E ':(80|443|22) '

# Debian系(同上)
ss -tlnp | grep -E ':(80|443|22) '

互动提问:为什么HTTPS用443端口而不是80端口?如果HTTP也用443会怎样?
(答:端口号本身不决定加密与否,但约定俗成80=HTTP、443=HTTPS,浏览器会根据协议自动选择端口。混用会导致连接混乱。)


八、DNS域名解析

8.1 为什么需要DNS?

问题场景:人类记不住 142.250.80.46 这样的数字IP,但能轻松记住 www.google.com

解决方案:DNS(Domain Name System)就像一本全球"电话簿",把域名翻译成IP地址。

生活类比:DNS = 114查号台。你告诉接线员"我要找张三"(域名),接线员帮你查到张三的电话号码(IP地址)。

8.2 DNS解析流程

用户浏览器输入 www.example.com
        |
        v
 1 查本地DNS缓存(浏览器缓存 -> 操作系统缓存 -> hosts文件)
        |
        v (没找到)
 2 向本地DNS服务器(运营商/Google 8.8.8.8)发送递归查询
        |
        v
 3 本地DNS服务器向根域名服务器发起迭代查询
        |  根服务器回复:".com 的权威服务器是 a.gtld-servers.net"
        v
 4 本地DNS服务器向 .com 权威服务器查询
        |  回复:"example.com 的权威DNS是 ns1.example.com"
        v
 5 本地DNS服务器向 example.com 权威DNS查询
        |  回复:"www.example.com 的IP是 93.184.216.34"
        v
 6 本地DNS服务器把结果返回给用户,并缓存该记录
        |
        v
 7 浏览器用IP地址发起HTTP连接

递归查询 vs 迭代查询

类型含义类比
递归查询客户端问一次,DNS服务器必须给出最终答案你打114,接线员帮你查到底
迭代查询DNS服务器之间互相询问,每次得到"更接近答案的线索"接线员A问B,B说"你去问C",C说"你问D"

8.3 常用DNS工具

# 通用
nslookup www.baidu.com          # 基础查询
dig www.baidu.com               # 详细查询(含TTL、记录类型等)
dig www.baidu.com +trace        # 追踪完整解析路径
host www.baidu.com              # 简单查询

# 查看当前DNS配置
cat /etc/resolv.conf            # 查看DNS服务器地址
cat /etc/hosts                  # 查看本地hosts映射

九、ARP协议

9.1 ARP的作用

问题场景:在局域网内,数据链路层(第二层)需要知道目标设备的 MAC地址 才能发送数据帧,但我们只知道目标的IP地址。

解决方案:ARP(Address Resolution Protocol)负责把IP地址翻译成MAC地址。

生活类比:你知道同事的名字(IP地址),但要走到他面前说话,需要知道他的工位在哪(MAC地址)。ARP就是帮你查工位的那张"座位表"。

9.2 ARP工作过程

电脑A(192.168.1.2)想跟电脑B(192.168.1.3)通信:

1 A广播:"谁是192.168.1.3?请告诉我你的MAC地址!"
  (ARP Request,广播帧,目标MAC=FF:FF:FF:FF:FF:FF)

2 局域网内所有设备都收到,但只有B回复:
  B单播:"我是192.168.1.3,我的MAC是 AA:BB:CC:DD:EE:FF"
  (ARP Reply,单播帧)

3 A把 B的IP->MAC映射 存入ARP缓存表

查看ARP缓存

arp -n          # 显示ARP缓存表
ip neigh        # 新版命令(推荐)

十、ICMP协议与ping命令

10.1 ICMP是什么?

ICMP(Internet Control Message Protocol)是网络层的"诊断协议",用于传递错误报告和网络状态信息。

生活类比:ICMP就像快递公司的"异常通知系统"——"包裹无法投递"、"地址不存在"等通知。

10.2 ping的工作原理

ping 命令利用ICMP的 Echo RequestEcho Reply 消息来测试网络连通性。

你的电脑                                    目标服务器
  |                                           |
  |---- ICMP Echo Request (Type=8) -------->|
  |                                           |
  |<--- ICMP Echo Reply (Type=0) -----------|
  |                                           |
  |  计算往返时间(RTT):15ms                  |

常用ping命令

ping www.baidu.com              # 基础ping测试
ping -c 5 www.baidu.com         # ping 5次后停止(Linux)
ping -c 10 -i 0.2 192.168.1.1  # 快速ping(间隔0.2秒)
ping -s 1000 192.168.1.1        # 指定数据包大小

# RHEL系 / Debian系命令相同

10.3 traceroute——追踪路由路径

traceroute www.baidu.com        # 追踪到达目标的路由(RHEL常用)
tracepath www.baidu.com         # Debian系常用
mtr www.baidu.com               # 综合实时监测(推荐,需安装)

十一、子网划分练习题

练习题1

172.16.10.0/24 划分为4个等大的子网,求每个子网的:网络地址、子网掩码、可用IP范围、广播地址。

点击查看答案

4个子网需要借2位主机位,新掩码 = /26 = 255.255.255.192

子网网络地址可用范围广播地址
1172.16.10.0/26.1 ~ .62.63
2172.16.10.64/26.65 ~ .126.127
3172.16.10.128/26.129 ~ .190.191
4172.16.10.192/26.193 ~ .254.255

练习题2

某公司需要将 192.168.10.0/24 划分为3个子网:

  • A部门:100台主机
  • B部门:50台主机
  • C部门:20台主机

请使用VLSM(可变长子网掩码)进行最优划分。

点击查看答案

按从大到小的顺序分配(VLSM原则):

部门子网掩码可用IP范围容量
A(100台)192.168.10.0/25255.255.255.128.1 ~ .126126
B(50台)192.168.10.128/26255.255.255.192.129 ~ .19062
C(20台)192.168.10.192/27255.255.255.224.193 ~ .22230

剩余:192.168.10.224/27(30个地址,留作将来扩展)

练习题3

判断以下两个IP是否在同一个子网:192.168.5.130192.168.5.200,子网掩码 255.255.255.192(/26)。

点击查看答案
  • 192.168.5.130 与 255.255.255.192 -> 网络地址 = 192.168.5.128
  • 192.168.5.200 与 255.255.255.192 -> 网络地址 = 192.168.5.192

网络地址不同(128 != 192),不在同一个子网

练习题4

一个 /29 的子网有多少个可用主机地址?适合什么场景?

点击查看答案

/29:主机位 = 32 - 29 = 3 位,可用地址 = 2^3 - 2 = 6个

典型场景:两台路由器之间的点对点链路(只需要2个地址),但/30更合适(刚好2个可用地址),/29适合小型设备群组。


附录A:运维常用命令精选

命令用途示例
ip addr查看所有网络接口的IP地址ip a
ip route查看路由表ip route show
ss -tlnp查看TCP监听端口及进程ss -tlnp
ping测试网络连通性ping -c 4 8.8.8.8
traceroute / tracepath追踪网络路径tracepath www.baidu.com
digDNS详细查询dig www.example.com A
nslookupDNS基础查询nslookup www.baidu.com
arp -n / ip neigh查看ARP缓存ip neigh show
curl发送HTTP请求/测试端口curl -I http://example.com
telnet测试端口连通性telnet 192.168.1.1 80
nmcliNetworkManager命令行(RHEL)nmcli device status
netplan网络配置(Debian/Ubuntu)netplan apply
hostnamectl查看/设置主机名hostnamectl set-hostname web01
mtr实时网络质量监测mtr www.baidu.com
nmap网络扫描/端口探测nmap -sT 192.168.1.0/24

附录B:趣味命令

# 1. 查看你的公网IP
curl ifconfig.me
curl ip.sb

# 2. 用JSON格式看你的IP详细信息
curl ipinfo.io

# 3. 查看本机所有网络接口的详细统计
ip -s link

# 4. 实时监控网络流量(像心电图一样)
watch -n 1 'cat /proc/net/dev'

# 5. 查看你的网络走了哪些路由器
mtr --curses www.baidu.com

# 6. 用nc(netcat)搭建一个超简易聊天
# 服务器端:
nc -l 9999
# 客户端:
nc 服务器IP 9999
# 然后双方就可以打字聊天了!

# 7. 查看DNS解析的完整过程(像侦探一样追踪)
dig +trace www.google.com

# 8. 用arp-scan扫描局域网内所有设备(需安装)
# RHEL: yum install arp-scan
# Debian: apt install arp-scan
sudo arp-scan --localnet

# 9. 生成随机MAC地址(有趣但实用)
openssl rand -hex 6 | sed 's/../&:/g; s/:$//'

# 10. 查看当前有多少个TCP连接处于各种状态
ss -s

# 11. 看看你的网卡支持多大速率
ethtool eth0 | grep Speed

# 12. 用tcpdump抓包看实时网络流量(需安装)
# RHEL: yum install tcpdump
# Debian: apt install tcpdump
sudo tcpdump -i eth0 -n port 80

小结:IP地址是网络世界的基础标识,子网掩码决定了网络的划分方式,TCP/UDP协议则保障了数据能正确、有序地传输。掌握这些基础知识,是成为一名合格运维工程师的第一步。下一章我们将学习如何保护网络安全——防火墙!


Comment