导读
目标:建立对计算机网络基础的整体认知
预计阅读时间:15min
适用群体:
- 被广域网,局域网,网桥,网关,交换机,子网掩码等各种名词困扰的萌新;
- 啃《TCP/IP 详解》等教科书啃到哭的苦逼工程师;
- 正在准备面试的求职者。注1
首发于:计算机网络基础(0门槛)
Before We Start
忘掉脑中零碎的概念、认知,让我们从最简单的地方开始。
物流?数据流?
快递包这样走:
数据帧这样走:
快件是快递运输的基本单位,片区内住户可以直接互送快件;每个片区有一收发点,外来快递由收发点统一派送,送往外部的快递,由收发点统一转发给上级集散站;每个集散站负责多个片区,集散站之间进行快递转发,并把属于自己片区内的快递分发给对应收发点。
数据帧是网络传输的基本单位,网段内主机可以直接相互通信;每个网段有一交换机,外来数据帧由交换机广播给所有主机,发往外的数据帧,由交换机统一转发给上级路由器;每个路由器负责多个网段,路由器之间进行数据帧转发,并把自己负责网段内的数据帧分发给对应的交换机。
认识快递包数据帧
一件完整的快递至少包含:收件人地址、收件人手机,发件人地址、收件人手机,被寄送物件。
数据帧跟快递真的很像 ? ?...
-
目的 MAC => 收件人手机
-
源 MAC => 发件人手机
-
目的 IP 地址 => 收件人地址
-
源 IP 地址 => 发件人地址
-
数据 => 被寄送物件
一个完整的数据帧如下所示:
这里需补充一点基础知识:
另外数据帧多了个帧校验序列,其作用是让接收数据帧的网卡或接口判断该数据帧是否发生了错误 注2。
数据帧传递
发件人要发物件,先看收件人跟自己是否在同一小区, 如是,直接给他;不是,那就交给收发点转发。
主机要发数据帧,先检查目标主机跟自己是否在同一个网段注3。是,直接把帧丢给对方;不是,就交由交换机转发。
传输要可靠,管杀还管埋
上面介绍了数据帧如何从一台主机传到另一台主机,不过主机上有很多程序,数据帧过来后给谁用?
在数据前面加上端口吧,哪个程序用了这个端口,就把数据丢给谁。
这就是 UDP。 通过 UDP,我们实现了应用程序间的数据传递。
但还有问题,快递都会丢件,数据帧想顺利传过去也不那么容易...
如何保证数据帧传递到位?这就要聊聊TCP了。
为了确保传输通信可靠,至少要解决三个问题:
- 如何建立连接和断开连接?
- 我发的数据帧,如何确认对方已成功接收?
- 一方掉线了怎么办?
1. 建立/断开连接
建立连接通过 3 次握手,断开连接通过 4 次挥手。
Q:为啥握手要 3 次?
(图片来源于网络,如侵权请联系作者删除。)
Q: 为啥要挥手要 4 次?
(图片来源于网络,如侵权请联系作者删除。)
2. "回执"机制
TCP 约定:
发出端发出一包后,会启动一个定时器,等待目的端发回“回执”。如没及时收到“回执”,将重发这个包。
目的端收到一个包后,会发一个“回执”,告诉发出端我收到了。
回执也是个数据帧,一个“回执”专门发一次,是不是有点浪费啊。。。
TCP 很鸡贼,它约定接收端不会立刻发送“回执”,而是先等等(一般 200ms 左右)看发送端有没有请求数据。要是有,就把“回执”塞到对方需要的数据里,一起发回去;要是没有,就专门发一个“回执”。
3. 重置机制
TCP 设计了一套重置机制,专门处理断线、数据帧错误等问题。
如果接收方掉线了,你再重复多少次发送,对方也不会有响应。所以,TCP 默认 重传 5 次(次数可自行设置)依然失败,就重置这个连接。
如果某一方觉得对方或对方发来的数据有问题,也可以随时主动触发连接重置,以保障通信稳定和正确。
Q:为啥说 TCP 开销大?
Q: TCP 这么牛逼,还要 UDP 干啥?
把数据用起来
感谢 TCP、感谢 IP、感谢 MAC,终于把数据安全的从一个程序传递给另一个程序了!!
但这坨数据怎么用?他是图片?视频?文本?彩蛋?还是啥玩意???
显然,这需要两端的程序约定好用啥协议,传的是个啥,该怎么处理... 等等。
怎么办?在数据头上拼好这些信息呗 ~ 这就是 HTTP、POP3、SMTP 这些协议干的事儿了。
最后让我们看看从数据到一个完整的数据帧的包装过程:
结尾
等等啊喂,协议讲了这么多连 OSI 七层模型也不介绍?
不止这些,广域网、网桥、网关、ARP、DARP、IP 协议、路由协议之类的,都没介绍,如无必要,勿增概念。注5
参考资料
TCP/IP 协议族到底怎么回事
你了解快递就能明白什么是路由器和交换机
TCP/IP 详解
以太网发展史
有了 IP 地址,为什么还要用 MAC 地址? - 你好啊世界的回答 - 知乎
子网、局域网、网段的关系
- 笔者当前工作于 神策数据·营销云。如希望内推,请将简历发送至anzhen@sensorsdata.com。↩
- 校验原理可参考: crc 计算和原理,非网络工程师不必深究。↩
- 具体方式是将两个 IP 地址分别与本机子网掩码作按位与操作,结果一致则在同一网段,否则两者分别位处不同网段。↩
- 如果行话看着太累,跳过即可。↩
- 偷自“如无必要 勿增实体”。笔者认为学习应先关注问题本质及核心解决思路,在学习解决方案及衍化的过程中逐渐理解概念和细节不迟。↩
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!