前言
来自极客时间上的讲师刘超的关于网络协议的课程,质量非常高,强烈推荐。
一、概念
-
协议三要素
- 语法
- 语义
- 顺序
以太网 Ethernet
当今局域网采用的最通用的通信协议标准,处于数据链路层。它规定了包括物理层的连线、电子信号和介质访问层协议的内容。网关gateway,路由器router,交换机switch,集线器hub,网桥bridge
hub: broadcast to every port, one-line
switch: better hub, intelligent
they are both used to exchange data within a local network
hub->switch。bridge已淡出
router: routes data from one network to another, base on ip address
gateway: 离开局域网就要经过一个网关,网关是路由器的一个网口
参考1
参考2
tips:
- 想象自己是一个处理网络包的程序,如何拿到网络包,如何处理,如何发出去
- 网络上跑的包都是完整的,可以有下层没上层(例如:Ping),而不可能有上层没下层
二、分层结构
二层定义了本地局域网的传输行为,ip层定义了端到端的传输行为。网络传输以包为单位,二层叫帧,网络层叫包,传输层叫段。
- 二层设备 三层设备
- 二层设备: 工作在链路层的设备,摘下mac头,判断丢弃、转发或留着,转发出去前要把mac头再填上
- 三层设备: 工作在ip层的设备,把mac头、ip头都摘下来,然后同上
三、ip地址
- ipv6=128位
- mac地址=6byte=48位,无定位功能
- 无类型域间选路CIDR:将32位ip地址一份为二,前面网络号,后面主机号
思考题
1.网络包到达网关时,可以通过路由表得到下一个网关的ip,直接通过ip就可以了,为何还要通过本地的mac地址呢?
摘评论里@芒果的发言:ip地址不是固定的。为何不直接用mac呢?因为ip选址+mac定位效率更高
2.网络分层协议的类比,比总经理&员工的比喻更恰当的?
评论里的快递比喻个人更认同
3.STP协议缺点
- 拓扑发生变化,新的配置消息需要一定时延才能传播到整个网络,期间会导致网络不稳定
- 网络规模大时,链路阻塞将不承担任何流量,造成带宽浪费
4.ICMP差错报文也出问题了呢?
差错报文不会产生差错报文
5.回复的包,公网ip NAT成内网ip时,怎么知道发给谁的?
是ip+端口(TCP、UDP)或ID(ICMP)哈希匹配算法
6.路由协议交换的信息本身,还要走路由吗,不是死锁了吗
OSPF直接基于IP协议,只发给邻居,只有一跳,不经过中间设备。BGP基于TCP, 在BGP peer之间交换信息
7. 计算机看来,怎样才算一个连接呢?
接收端和发送端为维护连接所保持的数据结构,即socket,就是连接
8. 如何在某个系统中查看TCP连接的状态?
netstat,lsof,ss等
9. bbr如何达到最优点的?
进入缓存并等待,会增加额外的时延
10. epoll是linux的函数,windows对应的机制是什么呢?如何写一个跨平台的程序呢
windows是IOCP,事件发生时,IOCP机制将数据直接copy到缓冲区,应用可以直接使用。而epoll的异步通知,应用需要调用IO函数获取数据。跨平台可以使用libevent库,这是一个事件通知库,适用于linux、win、bsd等。
11. 哪些手段可以提高https的效率?
从https设计的流程考虑:DNS查询(httpdns),tcp三次握手(改用基于udp的quic),交换3个key(共享密钥)
12. RTMP视频流传输机制存在什么问题?如何优化
基于TCP,不适合实时场景。使用基于udp的quic。
13.如何做跨机房的高可用?
-
同城双活
-
异地灾备