网络梳理

2019-10-10  本文已影响0人  链人成长chainerup

最近一段时间,看了一下极客时间的《趣谈网络协议》,简单整理一下。网络,虽然是计算机行业的基础知识,但是更多的像文科内容,这么多年了,还是那些内容,同样也需要记忆。那本文就通过几个经典案例,梳理一下网络的核心知识。

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

配置IP.png

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。

ip分类.png

另外,在大的局域网中,还区分了内网跟外网,每个分类给自己留了一堆内网地址。

1.3.2 IP的结构与组成

A、B、C类的组成结构:

ABC分类划分.png

1.3.3 DNS 域名解析

前面讲了IP的分类与组成,这部分我们来看下根据一个域名,是如何找到对应的IP的。
其流程如下:


DNS.png

画个图说明一下根、顶级、权威三级域名服务器的关系:


image.png

另外,DNS处理域名解析之外,还有负载均衡的作用,在大型网络部署中通过DNS解析,使得对应地区的用户访问就近机房的机器。这儿我们就不讲解了。

1.3.4 ARP: 连接建立之前,先要找到对应的MAC地址

前面我们讲过,网络传输是从上层到下层的,IP的下一层是传输链路层,对应的是MAC。找到了域名对应的IP,那我们看下MAC。

1.3.4.1 MAC地址
MAC地址.png
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 网关路由
网关路由.png

1.4 建立连接

1.4.1 三次握手

找到了ip ,那我们就要开始建立连接了。经典的三次握手。


三次握手.png

1.4.2 为什么不是两次握手?为什么不是四次握手?

二次跟四次.png

1.5 消息传输的TCP可靠性保证

握手建立了,都说TCP是可靠的,那它是如何保证的呢?

1.5.1 可靠性保证需要关注哪几方面?

可靠性保证四方面.png

1.5.2 TCP的格式

TCP为了解决上述四个问题,有哪些结构上的保障呢?


TCP包头.png

1.5.3 缓冲区

另外在发送端、接收端都有缓冲区来支持:


缓冲区.png

1.5.4 靠谱的机制

靠谱的机制.png

1.6 发送请求

1.6.1 请求格式

连接建立了,保障机制也有了,那我们看一下这个请求里面到底包含了什么?

请求格式.png

1.6.2 数据传输

1.6.2.1 遇到大文件传输怎么办?
大文件.png
1.6.2.2 怎么保证有状态的?

http本身是无状态的,http怎么保证状态流转呢?


cookie与session.png
1.6.2.3 提高安全性 https

为了提高安全性,很多网站引入了https 。采用非对称加密跟对称加密的组合。


https.png

https具体的交互流程 网上随处可见,这儿就不展开了,列个连接:
https的交互流程: https://www.cnblogs.com/xiohao/p/9054355.html

1.6.2.4 提高传输性能 http2
http2-概述.png http2 再啰嗦一下.png

1.6.3 首部字段梳理

首部字段.png

1.7 响应处理

1.7.1 响应格式

响应.png

1.7.2 状态码

状态码.png

1.8 断开连接

1.8.1 四次挥手

四次挥手.png

1.8.2 TCP状态机

状态图.png

2 网络不通了,我们怎么确认下是哪儿出了问题?

网络不通,ping一下看看。ping是ICMP 互联网传输控制协议的一种。
另外,ICMP还包含了差错报文控制协议。


image.png

3 传统C/S要变了,我们需要去中心

3.1 对等网络 P 2 P

P2P.png

3.2 算法 KAD

3.2.1 节点角色

一个节点两个角色.png

一个节点,提供了两个角色:
一个是通过UDP协议组建的节点网络;
另外一个是启动一个TCPserver,用于上传和下载。

3.2.2 DHT算法的规定

DHT算法的规定.png

3.2.3 核心流程

相近或者相似 的哈希,在KAD算法中,是通过异或来计算的。

3.2.3.1 新 node 下载某文件(比如文件1)的过程
节点下载文件.png
3.2.3.2 DHT网络中的多节点关系是怎么维护的?
节点维护.png
3.2.3.3 一个节点是如何查找另外一个节点的?
节点查找.png
3.2.3.4 节点间沟通?
节点沟通.png
3.2.3.5 DHT网络节点更新?
节点更新.png

4 socket编程 了解一下?

4.1 概述

socket概述.png

4.2 基于TCP的socket编程

TCP-SOCKET.png

一旦connect之后,握手成功,服务端的accept就会返回另外一个socket . 就是监听socket跟真正用来传数据的socket 是两个。

socket在Linux中,就是一个文件,这个文件指向socket在内核中的结构。这个结构里面有另两个队列,发送队列和接收队列。

4.3 基于UDP的socket编程

UDP-SOCKET.png

4.4 服务器如何处理更多的任务?

multi-task.png

5 再说一下UDP?

UDP.png

6 速度再快一点-CDN

CDN.png

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” 提问留言,或者加入知识星球“链人成长” 与我深度链接~

上一篇下一篇

猜你喜欢

热点阅读