计算机网络

ps 这仅仅我学习计网的一些心得笔记,和考试无关,备考的话直接面向重点考题复习即可。
1. 计算题 5'x6 第一章和第二章 (概述,物理层)
2. 简答题 5'x4 第六章        (应用层)
3. 分析题 5'x4 第三章和第四章  (数据链路层,网络层)
4. 综合题 10'x3 第四章和第五章 (网络层和传输层)

0x00 概述

网络体系结构

物理层

我们的电脑要与外界通信,首先得连接网络,我们可以用双绞线、光纤、无线电波等方式。这就叫做”实物理层”,它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

数据链路层

单纯的0和1没有任何意义,所以我们使用者会为其赋予一些特定的含义,规定解读电信号的方式:例如:多少个电信号算一组?每个信号位有何意义?这就是”数据链接层”的功能,它在”物理层”的上方,确定了物理层传输的0和1的分组方式及代表的意义。早期的时候,每家公司都有自己的电信号分组方式。逐渐地,一种叫做“以太网”(Ethernet)的协议,占据了主导地位。

以太网规定,一组电信号构成一个数据包,叫做”帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。其中”标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;”数据”则是数据包的具体内容。

那么,发送者和接受者是如何标识呢?以太网规定,连入网络的所有设备都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。每块网卡出厂的时候,都有一个全世界独一无二的MAC地址。

我们会通过ARP(Address Resolution Protocol)来获取接受方的MAC地址,有了MAC地址之后,如何把数据准确的发送给接收方呢?其实这里以太网采用了一种很“原始”的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机都发送,让每台计算机读取这个包的“标头”,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做“广播”(broadcasting)。

网络层

依靠以太网协议的规则我们可以依靠MAC地址来向外发送数据,但发送的数据只能局限在发送者所在的子网络。也就是说如果两台计算机不在同一个局域网,广播是传不过去的。

因此,必须找到一种方法区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则就采用”路由”方式发送。这就导致了”网络层”的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”,简称”网址”。

“网络层”出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是网络管理员分配的。网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。目前,广泛采用的是IP协议第四版,简称IPv4。IPv4这个版本规定,网络地址由32个二进制位组成,我们通常习惯用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。

根据IP协议发送的数据,就叫做IP数据包。IP数据包也分为”标头”和”数据”两个部分:”标头”部分主要包括版本、长度、IP地址等信息,”数据”部分则是IP数据包的具体内容。IP数据包的”标头”部分的长度为20到60字节,整个数据包的总长度最大为65535字节。

运输层

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。但问题是同一台主机上会有许多程序都需要用网络收发数据,比如QQ和浏览器这两个程序都需要连接互联网并收发数据,我们如何区分某个数据包到底是归哪个程序的呢?也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

“端口”是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。有了IP和端口我们就能实现唯一确定互联网上一个程序,进而实现网络间的程序通信。

我们必须在数据包中加入端口信息,这就需要新的协议。UDP和TCP是今后打交道最多的两个协议,也是webSocket编程的基础。

应用层

应用层是网络应用程序及它们的应用层协议存留的地方。应用层包括许多协议,比如HTTP(which provides for Web document request and transfer),SMTP (which provides for the transfer of e-mail messages), and FTP(which provides for the transfer of files between two end systems).An application-layer protocol is distributed over multiple end systems,with the application in one end system using tht protocol to exchange packets s of information with the application in another end system. We’ll refer to this packet of information at the application layer as a message.

0x01 物理层

数据通信基础知识

0x02 数据链路层

0x03 网络层

网络层提供的两种服务

网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。 网络层不提供服务质量的承诺。

🌀网络协议IP

与IP协议配套使用的三个协议:

  • 地址解析协议 ARP(Address Resolution Protocol)
  • 网络控制报文协议 ICMP(Internet Control Messeage Ptotocol)
  • 网际组管理协议 IGMP(Internet Group Management Protocol)

虚拟互联网络

将网络互连起来需要一些中间设备,根据中间设备所在的层次:

  • 物理层:转发器(repeater)
  • 数据链路层:网桥(brudge)
  • 网络层:路由器(router)
  • 网络层以上:网关(gateway)

只要参与互连的计算机网络使用相同的IP协议,尽管互连的各种物理网络存在异构型,但我们可以让这些网络在网络层看起来是一个统一的网络。

分类的IP地址

整个的互联网就是一个单一的、抽象的网络。 IP地址现在由互联网名字和数字分配机构ICANN进行分配。

A 类地址 网络号占一字节,有 7 位可供使用(第一位固定为 0),可指派的网络号位 126 个(27−2)。网络号为 127 (01111111)保留作为本地软件环回测试进程间通信作用。网络号全 0 的 IP 地址是保留地址,意思是本网络

主机号占 3 个字节,A 类网络中最大主机数为 224−2。全 0 的主机号字段表示本主机所连接到的单个网络地址,全1 表示该网络上的所有主机

B 类地址 网络号字段占 2 字节,前两位固定(10),剩下 14 位不可能存在全 0(或全 1)。B 类网络地址 128.0.0.0 不分配,所以可指派的网络数为 214−1。B 类网络最大主机数为 216−2(除去全 0 和全 1 主机号)。

C 类地址 网络号字段占 3 字节,前三位固定(110)。C 类网络地址 192.0.0.0 不分配,但可以指派 C 类最小网络地址 192.0.1.0,所以可指派的网络数为 221−1 。C 类网络最大主机数为 28−2(除去全 0 和全 1 主机号)

按照互联网的观点,一个网络是指具有相同网络号的主机的集合,用转发器或者网桥连接的若干局域网仍是一个网络,具有不同网络号的局域网必须使用路由器互连。

IP地址与硬件地址

从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。

在IP层抽象的互联网上只能看到IP数据报。 路由器只根据目的站的IP地址的网络号进行路由选择。 在局域网的链路层,只能看见MAC帧。

🔍地址解析协议ARP

ARP出现的背景主要是为了通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。每台主机都有一个 ARP 高速缓存,用来存放本局域网各主机和路由器的 IP 地址到 MAC 地址的映射表,成为 ARP 表。使用 ARP 动态维护此 ARP 表。

工作原理:

主机 A 向本局域网某台主机 B 发送 IP 数据报,先在高速缓存中查看有无主机 B 的 IP 地址。有,就可以查出 B 的硬件地址,将此硬件地址写入 MAC 帧,然后通过局域网将此 MAC 帧发送往此硬件地址;无,就通过使用目的地址为 FF-FF-FF-FF-FF-FF 的帧来封装并广播ARP 请求,使同一个局域网里的所有主机收到 ARP 请求。B 收到 ARP 请求后,向 A 发出响应 ARP 分组(ARP 响应分组时普通单播),分组中包含主机 B 的 IP 与 MAC 地址的映射关系,主机 A 收到后将此分组写入 ARP 高速缓存,然后按查询到的硬件地址发送 MAC 帧。

注意事项:

ARP对高速缓存中每一个映射都设置了生存时间。同时也可以主动通过arp -d情况缓存。 ARP用于解决同一个局域网上的IP地址与硬件地址的映射关系。因为本地主机本身也不需要知道远程主机的硬件地址。

实践:

本机:192.168.72.1 虚拟机:192.168.72.100

首先需要管理员权限打开cmd。执行arp -d清空缓存,再通过arp -a查询ARP表

在本机上发起对虚拟机的ping请求:同时在本机上通过捕获流量。

ps:ping命令本身和arp并没有关系,而在而是因为 ping 的过程中,需先访问本机的 arp 表。若该 IP (即192.168.1.100) 无键值对在表中,则需要先发送 arp 包,以此获得mac,并将此 ip 与 mac 键值对填入 arp 表,才继续 ping 操作。关于ping,也就是ICMP协议,后续我们继续讨论。

前两个ARP包,分别对应:

  • 本机在自己的arp表中寻找虚拟机ip,没有找到后,带着自己的mac地址发出广播报文。

  • 在目的主机收到后,会把本地mac缓存,然后带着自己的mac地址进行答复。

🔍IP数据包格式

在 TCP/IP 标准中,各种数据格式常以 32 位为单位来描述。IP 数据报由首部和数据两部分组成,首部前部分为固定长度 20 字节,是所有 IP 数据报必须有的。固定部分后面是可选字节,长度是可变的,可变部分是为了增加 IP 数据报的功能。

IP首部固定部分各字段如下:

  1. 版本:IP协议的版本,占4位。

  2. 首部长度:占4位,最大可以表示15个32位字长,即60字节。最常用的首部长度为20字节,此时不使用任何选项。

  3. 区分服务:很少使用,遇见再说。

  4. 总长度:总长度:占 16 位。指首部和数据之和的长度,单位是字节,最大长度为 216−1=65535。以太网最大传送单元MTU(Maximum Transfer Unit)为 1500B。数据包长度超过MTU将进行分片处理。

    尽然有分片的方法,为什么还设有最大长度呢?

    wiki:ICMP回送消息在数据包的数据部分只有65,536个字节。送出超过65,536字节ping封包对IP通讯协定而言不是合法的用法,若送出ping封包时分成多个片段,目标电脑必须不断重组封包,期间可能引发缓冲区溢位,而导致系统崩溃。

    但实际上通过 ping -l指定缓冲区大小,发现最大只支持65500,查阅资料得知这可能和ddos有关,也不再过多阐述。

  5. 标识:占 16 位。每产生一个数据报就加一,并赋值给标识字段。但它并不是“序号”(IP 是无连接服务)当数据报长度超过 MTU 时必须分片,此时每个数据报都复制一次标识号,以便能还原原来的数据报。

  6. 标志:占 3 位。标志字段最低位为 MF(More Fragment),MF 为 1 表示后面还有分片,0 则表示最后一个分片。标志字段中间还有一位 DF(Don’t Fragment) ,DF=0 时才允许分片。

  7. 片偏移:占13位。

0x04 传输层

0x05 应用层


2021-06-24 23:37 +0800