最近一段时间,看了一下极客时间的《趣谈网络协议》,简单整理一下。网络,虽然是计算机行业的基础知识,但是更多的像文科内容,这么多年了,还是那些内容,同样也需要记忆。那本文就通过几个经典案例,梳理一下网络的核心知识。
1 浏览器中输入网址,敲击回车,到底发生了什么?
1.1 分层
因为后续所有的分析都要基于网络分层这个概念,所以我们先简单讲一下网络分层。
网络分为4层(OSI的7层只是理论指导,我们在此不分析)。
- 传输链路层: MAC
- 网络层: IP
- 传输层: TCP/UDP
- 应用层: HTTP 等
但是没有想过,为什么要分层呢?
就是因为网络太复杂了,分层之后,各层之间相互协作,上层依赖下层,每一层有自己的使命。
1.2 本机配置IP(DHCP)
在点击回车发送之前,我们有一个默认前提, 就是自己的电脑已经有了IP,但是我们有没有想过,这个IP是怎么设置的呢?
很久之前,都是手动配置。
但是有没有想过,如果在一个几万人的公司,你需要抱着电脑到处开会沟通,如果每到一个区域都要配置一个网络,是不是要累死了,那怎么办呢?就是用了DHCP - 动态主机配置协议。
DHCP主要分了三个过程: 为主机配置IP , IP 回收, IP 续租。
1.2.1 为主机配置IP
1.2.2 IP 回收
不用了,直接收回即可。
1.2.3 IP 续租
租期过去50%,客户机要想DHCP server发送续租请求,进行续租即可。
1.3 查找域名对应的IP与MAC
我们已经为主机配置了IP,此时就进入点击回车的步骤了。
我们输入的是域名,那么会怎样找到对应的机器呢?不要慌,我们先找ip。
1.3.1 IP的分类
在找ip之前,我们先看下IP的分类。
ip之前分A/B/C/D/E几类,前三类 分网络号+ 主机号,主机号太短,可用的主机太少,后来就淡化分类,采用CIDR。
另外,在大的局域网中,还区分了内网跟外网,每个分类给自己留了一堆内网地址。
1.3.2 IP的结构与组成
A、B、C类的组成结构:
1.3.3 DNS 域名解析
前面讲了IP的分类与组成,这部分我们来看下根据一个域名,是如何找到对应的IP的。
其流程如下:
画个图说明一下根、顶级、权威三级域名服务器的关系:
另外,DNS处理域名解析之外,还有负载均衡的作用,在大型网络部署中通过DNS解析,使得对应地区的用户访问就近机房的机器。这儿我们就不讲解了。
1.3.4 ARP: 连接建立之前,先要找到对应的MAC地址
前面我们讲过,网络传输是从上层到下层的,IP的下一层是传输链路层,对应的是MAC。找到了域名对应的IP,那我们看下MAC。
1.3.4.1 MAC地址
1.3.4.2 ARP
ARP的功能很简单,就是实现了IP到MAC的转换。
如果IP是同一网段,发个广播,对应IP的MAC地址就找到了。
如果目标IP跟源IP不是同一网段,则需要路由器转发(转发规则在下一小节介绍),一级一级地找。
具体流程参见 参考文献部分。
插播一条 RARP: 由MAC找IP, 主要用在无盘工作站。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络
1.3.4.3 网关路由
1.4 建立连接
1.4.1 三次握手
找到了ip ,那我们就要开始建立连接了。经典的三次握手。
1.4.2 为什么不是两次握手?为什么不是四次握手?
1.5 消息传输的TCP可靠性保证
握手建立了,都说TCP是可靠的,那它是如何保证的呢?
1.5.1 可靠性保证需要关注哪几方面?
1.5.2 TCP的格式
TCP为了解决上述四个问题,有哪些结构上的保障呢?
1.5.3 缓冲区
另外在发送端、接收端都有缓冲区来支持:
1.5.4 靠谱的机制
1.6 发送请求
1.6.1 请求格式
连接建立了,保障机制也有了,那我们看一下这个请求里面到底包含了什么?
1.6.2 数据传输
1.6.2.1 遇到大文件传输怎么办?
1.6.2.2 怎么保证有状态的?
http本身是无状态的,http怎么保证状态流转呢?
1.6.2.3 提高安全性 https
为了提高安全性,很多网站引入了https 。采用非对称加密跟对称加密的组合。
https具体的交互流程 网上随处可见,这儿就不展开了,列个连接:
https的交互流程: https://www.cnblogs.com/xiohao/p/9054355.html
1.6.2.4 提高传输性能 http2
1.6.3 首部字段梳理
1.7 响应处理
1.7.1 响应格式
1.7.2 状态码
1.8 断开连接
1.8.1 四次挥手
1.8.2 TCP状态机
2 网络不通了,我们怎么确认下是哪儿出了问题?
网络不通,ping一下看看。ping是ICMP 互联网传输控制协议的一种。
另外,ICMP还包含了差错报文控制协议。
3 传统C/S要变了,我们需要去中心
3.1 对等网络 P 2 P
3.2 算法 KAD
3.2.1 节点角色
一个节点,提供了两个角色:
一个是通过UDP协议组建的节点网络;
另外一个是启动一个TCPserver,用于上传和下载。
3.2.2 DHT算法的规定
3.2.3 核心流程
相近或者相似 的哈希,在KAD算法中,是通过异或来计算的。
3.2.3.1 新 node 下载某文件(比如文件1)的过程
3.2.3.2 DHT网络中的多节点关系是怎么维护的?
3.2.3.3 一个节点是如何查找另外一个节点的?
3.2.3.4 节点间沟通?
3.2.3.5 DHT网络节点更新?
4 socket编程 了解一下?
4.1 概述
4.2 基于TCP的socket编程
一旦connect之后,握手成功,服务端的accept就会返回另外一个socket . 就是监听socket跟真正用来传数据的socket 是两个。
socket在Linux中,就是一个文件,这个文件指向socket在内核中的结构。这个结构里面有另两个队列,发送队列和接收队列。
4.3 基于UDP的socket编程
4.4 服务器如何处理更多的任务?
5 再说一下UDP?
6 速度再快一点-CDN
7 参考文献
同一局域网ARP : https://zhuanlan.zhihu.com/p/28771785
跨局域网ARP: https://zhidao.baidu.com/question/2009765406663037188.html?qbl=relate_question_2
《趣谈网络协议》
整理笔记xmind文件: https://pan.baidu.com/s/1RTD5JtwzJIIaNfSzzSlUtA
8 其他
本文是基础知识系列-网络,如果有疑问,可以直接留言,也可以关注公众号 “链人成长chainerup” 提问留言,或者加入知识星球“链人成长” 与我深度链接~