大二下 计算机网络:蓝桥云课 笔记 20250325

一、TCP/IP协议簇简介

1.IP 地址

网络上每一个节点都必须有一个独立的 IP 地址,通常使用的 IP 地址是一个 32bit 的数字,被 . 分成 4 组,例如,255.255.255.255 就是一个 IP 地址。有了 IP 地址,用户的计算机就可以发现并连接互联网中的另外一台计算机。
在 终端输入 ifconfig -a 命令查看自己的 IP 地址。

2.域名

用 12 位数字组成的 IP 地址很难记忆,在实际应用时,用户一般不需要记住 IP 地址,互联网给每个 IP 地址起了一个别名,习惯上称作域名。
域名与计算机的 IP 地址相对应,并把这种对应关系存储在域名服务系统 DNS(Domain Name System) 中,这样用户只需记住域名就可以与指定的计算机进行通信了。
常见的域名包括 com、net 和 org 三种顶级域名后缀,除此之外每个国家还有自己国家专属的域名后缀(比如我国的域名后缀为 cn)。目前经常使用的域名诸如百度(www.baidu.com)、Linux 组织(www.lwn.net)等等。
我们可以使用命令 nslookup 或者 ping 来查看与域名相对应的 IP 地址,由于蓝桥云课的实验楼网络限制,我们可以使用 ping github.com(如果 github 也 ping 不通,那么可以使用 ping labfile.oss.aliyuncs.com,如果是会员账户,那么也可以 ping 其他的域名)查看。

3.MAC 地址

MAC(Media Access Control)地址,或称为物理地址、硬件地址,用来定义互联网中设备的位置。
在 TCP/IP 层次模型中,网络层管理 IP 地址,链路层则负责 MAC 地址。因此每个网络位置会有一个专属于它的 IP 地址,而每个主机会有一个专属于它 MAC 地址。

4.端口号

IP 地址是用来发现和查找网络中的地址,但是不同程序如何互相通信呢?这就需要端口号来识别了。如果把 IP 地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是端口采用 16 比特的端口号标识,一个 IP 地址的端口可以有 65536(即:216)个之多!
服务器的默认程序一般都是通过人们所熟知的端口号来识别的。例如,对于每个 TCP/IP 实现来说,SMTP(简单邮件传输协议)服务器的 TCP 端口号都是 25,FTP(文件传输协议)服务器的 TCP 端口号都是 21,TFTP(简单文件传输协议)服务器的 UDP 端口号都是 69。任何 TCP/IP 实现所提供的服务都用众所周知的 1-1023 之间的端口号。这些人们所熟知的端口号由 Internet 端口号分配机构(Internet Assigned Numbers Authority,IANA)来管理。
常用协议对应端口号:
SSH 22
FTP 20 和 21
Telnet 23
SMTP 25
TFTP 69
HTTP 80
SNMP 161
Ping 使用 ICMP,无具体端口号。

5.封装和分用

封装

当应用程序发送数据的时候,数据在协议层次当中自顶向下通过每一层,每一层都会对数据增加一些首部或尾部信息,这样的信息称之为协议数据单元(Protocol Data Unit,缩写为 PDU),在分层协议系统里,在指定的协议层上传送的数据单元,包含了该层的协议控制信息和用户信息。如下图所示:

物理层(一层)PDU 指数据位(Bit)
数据链路层(二层)PDU 指数据帧(Frame)
网络层(三层)PDU 指数据包(Packet)
传输层(四层)PDU 指数据段(Segment)
第五层以上为数据(data)

分用

当主机收到一个数据帧时,数据就从协议层底向上升,通过每一层时,检查并去掉对应层次的报文首部或尾部,与封装过程正好相反。

二、IP网络协议

1.IP 数据报

IP 协议位于网络层,它是 TCP/IP 协议簇中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是不可靠、无连接的数据报传送服务。
我们已经知道了 IP 协议提供的数据传送服务是不可靠和无连接的,具体表现如下:
不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明,IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。
我们先看一下 IP 数据报的格式,其中没有一个字段是多余的,学习 IP 协议就应从学习它的报文字段意义和作用开始。

如上图所示,普通的 IP 数据报的报头长度 20 字节(除非有选项字段),各个部分的作用:

版本号:4 位,用于标明 IP 版本号,0100 表示 IPv4,0110 表示 IPv6。目前常见的是 IPv4。
首部长度:4 位,表示 IP 报头长度,包括选项字段。
服务类型(TOS):分别有:最小时延、最大吞吐量、最高可靠性、最小花费 4 种服务,如下图所示。4 个标识位只能有一个被置为 1。
总长度:16 位,报头长度加上数据部分长度,便是数据报的总长度。IP 数据报最长可达 65535 字节。
标识:16 位,接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组。通常每发送一份报文它的值就会加 1。
标志:3 位,用于标识数据报是否分片。其中的第 2 位是不分段(DF)位。当 DF 位被设置为 1 时,则不对数据报进行分段处理;第 3 位是分段(MF)位,除了最后一个分段的 MF 位被设置为 0 外,其他的分段的 MF 位均设置为 1。
偏移:13 位,在接收方进行数据报重组时用来标识分片的顺序。
生存时间(TTL):8 位,用于设置数据报可以经过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每经过一个处理它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被丢弃。
协议:8 位,用来标识是哪个协议向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。
首部校验和:根据 IP 首部计算的校验和码。
源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。
选项:是数据报中的一个可变长、可选的信息,不常用,多用于安全、军事等领域。

了解了上面的理论知识过后,我们可以使用 tcpdump 这个抓包工具来实际看一下。
代码如下:
sudo tcpdump -ntx -c 1

-n :显示 IP 地址而非域名地址
-t :不显示时间戳
-x :以十六进制显示包内内容
-c :tcpdump 将在接受到几个数据包后退出

首先看到开头的 192.168.42.3.3001 > 172.16.2.250.44632 代表的是源 ip 为 192.168.42.3,端口 3001,目的 ip 为 172.16.2.250,端口 44632。

然后看到 0x0000 那行:

协议版本: 0x4 表示的是协议版本为 IPv4;
首部长度: 0x5,5*4=20,表示 IP 报头长度为 20 字节。一个字节通常等于 8 位,所以这里可以知道 IP 报头为 4500 到 2a02;
TOS 服务类型:0x00,意味着是一般服务;
总长度:0x0136,换算下来为 310 字节;
标识:0x172a;
3bit 标志 + 13bit 片偏移:0x4000;
生存时间:0x40,值为 64;
协议:0x06,代表 TCP 协议;
首部校验和:0x88e2。
其他信息可依次类推。

2.IP地址分类

IP 地址分类
为了便于寻址以及层次化构造网络,每个 IP 地址可被看作是分为两部分,即网络号和主机号。同一个区域的所有主机有相同的网络号(即 IP 地址的前半部分相同),区域内的每个主机(包括路由器)都有一个主机号与其对应。
IP 地址被分为 A、B、C、D、E 五类:
A 类给大型网络或政府机构等;
B 类分配给中型网络、跨国企业等;
C 类分配给小型网络;
D 类用于多播;
E 类用于实验。
各类可容纳的地址数目不同,其中我们最常见的为 A、B、C 这三类。
IP 地址用 32 位二进制数字表示的时候,A、B、C 类 IP 的网络号长度分别为 8 位、16 位、24 位:

A 类地址:

A 类地址网络号范围:1.0.0.0---127.0.0.0;
A 类 IP 地址范围:1.0.0.0---127.255.255.255;
A 类 IP 的私有地址范围:10.0.0.0---10.255.255.255 (所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址);
127.X.X.X 是保留地址,用做循环测试用的;
因为主机号有 24 位,所以一个 A 类网络号可以容纳 224-2=16777214 个主机号。
B 类地址:

B 类地址网络号范围:128.0.0.0---191.255.0.0;
B 类 IP 地址范围:128.0.0.0---191.255.255.255;
B 类 IP 的私有地址范围:172.16.0.0---172.31.255.255;
169.254.X.X 是保留地址;191.255.255.255 是广播地址;
因为主机号有 16 位,所以一个 B 类网络号可以容纳 216-2=65534 个主机号。
C 类地址:

C 类地址网络号范围:192.0.0.0---223.255.255.0;
C 类 IP 地址范围:192.0.0.0---223.255.255.255;
C 类 IP 的私有地址范围:192.168.0.0---192.168.255.255;
因为主机号有 8 位,所以一个 C 类网络号可以容纳 28-2=254 个主机号。
下面使用 ifconfig 命令来查看本机 ip:

这是一个C类的IP地址

posted @ 2025-03-25 15:21  陆舟LandBoat  阅读(50)  评论(0)    收藏  举报