趣谈网络协议-学习笔记1

=Start=

缘由:

  • 首先,我知道网络知识很重要;
  • 其次,我的网络知识学的不算系统、牢靠(虽然大学里有讲、我也较为认真地学了,且平时有机会我也会不断整理,但很多东西,如果没有一个资深的专家较为系统的讲解,没有一些例子去亲身经历、尝试,学习效果会大打折扣);
  • 再次,刘超老师讲的不错;
  • 最后,持续学习总是一件好事。

极客时间专栏地址:「趣谈网络协议」。建议想较为系统的梳理网络协议相关知识的同学都自己去订阅一下该专栏,相较于你可以学习到的知识而言,价格相当便宜了。


记录本文(很可能分成多篇持续总结、整理)的目的很简单——希望在学习了一样知识之后能有个学习笔记之类的东西留下,一来是加深学习印象和效果;二来是方便以后有个参考(随着年龄的增长,需要处理问题的增多,个人的记忆力会越来越不可靠,及时文档化是应对这种问题的有效方式之一)。

正文:

参考解答:
通信协议综述
  • 第1讲 | 为什么要学习网络协议?

为什么网络协议这么重要呢?为什么“计算机组成与系统结构”“数据结构与算法”“操作系统”“计算机网络”“编译原理”,会成为大学计算机的核心课程呢?我刚毕业的时候也很困惑。

但随着见过的世面越来越多,我渐渐发现,无论是对于大规模系统的架构,还是对于程序员的个人职业生涯,网络和网络协议都是绕不过去的坎儿。

不过,要想真正学习和掌握网络协议,也并非易事。下面这些场景,你是不是也感同身受呢?

  • 网络协议知识点太多,学完记不住。
  • 看上去懂了,但是经不住问。
  • 知识学会了,实际应用依旧不会。

那网络协议究竟该怎么学?基于这个问题,我决定从以下三个角度和你分享我所理解的网络协议。

  • 第一,我会从身边经常见到的事情出发,用故事来讲解各种网络协议,然后慢慢扩展到不熟悉的领域。
  • 第二,我会用贴近场景的方式来讲解网络协议,将各个层次的关系串起来,而非孤立地讲解某个概念。
  • 第三,我会在讲解完各个层次的网络协议之后,着重剖析如何在当下热门领域使用这些协议,比如云计算、容器和微服务。

千里之行,始于足下。不管何时,我相信,扎实的功底和过硬的技术,都会是你职业发展的助力器。

希望这个专栏,不仅可以帮你理清繁杂的网络协议概念,帮你构建一个精准的网络协议知识框架,帮你在热门领域应用这些底层知识,更重要的是给你一种学习知识的方法和态度:看似最枯燥、最基础的东西往往具有最长久的生命力。

协议的三要素:

  1. 语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
  2. 语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
  3. 顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。

我们常用的网络协议有哪些?
DNS / HttpDNS
HTTP / HTTPS
TCP / TLS
IP / OSPF / BGP
ARP

  • 第2讲 | 网络分层的真实含义是什么?

这四个问题你真的懂了吗?

  1. 第一个问题来了,TCP 在进行三次握手的时候,IP 层和 MAC 层对应都有什么操作呢?
  2. 第二个问题来了,A 知道自己的下一个中转站是 B,那从 A 发出来的包,应该把 B 的 IP 地址放在哪里呢?B 知道自己的下一个中转站是 C,从 B 发出来的包,应该把 C 的 IP 地址放在哪里呢?如果放在 IP 协议中的目标地址,那包到了中转站,怎么知道最终的目的地址是 D 呢?
  3. 第三个问题来了,你一定经常听说二层设备、三层设备。二层设备处理的通常是 MAC 层的东西。那我发送一个 HTTP 的包,是在第七层工作的,那是不是不需要经过二层设备?或者即便经过了,二层设备也不处理呢?或者换一种问法,二层设备处理的包里,有没有 HTTP 层的内容呢?
  4. 第四个综合问题,从你的电脑,通过 SSH 登录到公有云主机里面,都需要经历哪些过程?或者说你打开一个电商网站,都需要经历哪些过程?说得越详细越好。

网络为什么要分层?

因为,是个复杂的程序都要分层。复杂的程序都要分层,这是程序设计的要求。比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层,让每一层专注做本层的事情(更专注也更专业)。

程序是如何工作的?
封包 – 解包

只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。

  • 第3讲 | ifconfig:最熟悉又陌生的命令行
如何查看机器的IP地址:在 Windows 上是 ipconfig,在 Linux 上是 ifconfig/ip addr
  • ifconfig # net-tools
  • ip addr # iproute2
net-tools起源于BSD,自2001年起,Linux社区已经对其停止维护,而iproute2旨在取代net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。
net-tools通过procfs(/proc)和ioctl系统调用去访问和改变内核网络配置,而iproute2则通过netlink套接字接口与内核通讯。
net-tools中工具的名字比较杂乱,而iproute2则相对整齐和直观,基本是ip命令加后面的子命令。
虽然取代意图很明显,但是这么多年过去了,net-tool依然还在被广泛使用,最好还是两套命令都掌握吧。
无类型域间选路(CIDR):广播地址、子网掩码。
CIDR 可以用来判断IP是不是本地人。
公有 IP 地址和私有 IP 地址(10/192/172 开头的IP地址)
IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码,有定位功能
MAC 地址更像是身份证,是一个唯一的标识,无定位功能
  • 第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
Linux机器上如何配置 IP 地址?
使用 net-tools:
$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up
使用 iproute2:
$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1
IP地址可以自己用上面的命令自由配置,但是如果配置的太随意,则会出现无法正常把包发送出去的情况。
Linux 首先会判断,要去的这个地址和我是一个网段的吗,或者和我的一个网卡是同一网段的吗?只有是一个网段的,它才会发送 ARP 请求,获取 MAC 地址。如果发现不是呢?
Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包发送到网关。
  1. 如果你配置了网关的话,Linux 会获取网关的 MAC 地址,然后将包发出去。对于 192.168.1.6 这台机器来讲,虽然路过它家门的这个包,目标 IP 是它,但是无奈 MAC 地址不是它的,所以它的网卡是不会把包收进去的。
  2. 如果没有配置网关呢?那包压根就发不出去。
  3. 如果将网关配置为 192.168.1.6 呢?不可能,Linux 不会让你配置成功的,因为网关要和当前的网络至少一个网卡是同一个网段的,怎么可能 16.158.23.6 的网关是 192.168.1.6 呢?所以,当你需要手动配置一台机器的网络 IP 时,一定要好好问问你的网络管理员。
动态主机配置协议(DHCP)
解析 DHCP 的工作方式
DHCP Discover
DHCP Offer
DHCP Request
DHCP ACK
IP 地址的收回和续租
DHCP Request
DHCP ACK
预启动执行环境(PXE, Pre-boot Execution Environment)
  • PXE 协议分为客户端和服务器端,由于还没有操作系统,只能先把PXE客户端放在 BIOS 里面。当计算机启动时,BIOS 把 PXE 客户端调入内存里面,就可以连接到服务端做一些操作了。
  • 如果想使用 PXE,则需要在 DHCP Server 上配置 next-server,指向 PXE 服务器的地址,另外要配置初始启动文件 filename。

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4012.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注