网络是怎样连接的读书笔记

缘由:系统整理下计算机网络的知识吧-_-

一、浏览器生成消息,探索浏览器内部

URL和URI的区别
URL uniform resource location(统一资源位置)
URI uniform resource identification(统一资源定位符)
HTTP的基本思路:客户端发送http请求,主要告诉服务器2个东西,一个是在哪里(URI),一个是怎么操作(GET,POST),其中POST操作的URI一般是index.php之类的可执行脚本文件,然后可执行的文件收到发送的请求参数,并进行处理。

二、ip以太包的收发操作

2-1、基本概念

1、数据包由2部分组成,包头和数据(内容);例子(tcp/ip包)如下:

1
2
3
以太包:MAC头部+IP头部+TCP头部+数据块
ip包:IP头部+TCP头部+数据块
MAC头部:以太控制信息;IP头部:IP控制信息;一般来说TCP头部和数据块加起来就是包的内容。

2、集线器(hub)和交换机(switch)的区别
之前看过一个youtube的视频,一个光头橙色衣服的大叔讲解网络,hub和switch的区别,经过他讲解后清楚明了,hub是比较久远的设备了,目前基本已经不用了,取而代之的是switch。举个例子:
我现在有一个8端口的hub,如果我在端口1要和端口8进行通信,那么端口1在检测到hub上没有数据传播后,开始广播,呼叫端口8,端口8听到后请回到,这个广播包会传递到所有端口上,造成通信拥堵。
我现在有一个8端口的switch,如果我在端口1要和端口8进行通信,如果端口1已经和端口8进行过通信后,端口1可以直接在地址对应表上找到端口8的地址,直接通信,如果2者之前没有进行过通信,那么会重复hub的操作。
【注意:】上述的广播操作就是:ARP协议

3、路由器和集线器的区别
路由器:路由器根据目标地址判断下一个路由器的位置
集线器:集线器在子网中将网络包传输到下一个路由
实际上,集线器是按照以太网规则传输包的设备,而路由器是按照 IP 规则传输包的设备,因此我们也可以作如下理解。
(1)IP 协议根据目标地址判断下一个 IP 转发设备的位置
(2)子网中的以太网协议将包传输到下一个转发设备

要理解两者之间的关系,关键点在于计算机在发送网络包时,或者是 路由器在转发网络包时,都需要在前面加上 MAC 头部。之前的讲解都是 说在开头加上 MAC 头部,如果看图 3.16 大家可以发现,准确的说法应该 是将 IP 包装进以太网包的数据部分中。也就是说,给包加上 MAC 头部并 发送,从本质上说是将 IP 包装进以太网包的数据部分中, 托以太网去传 输这些数据。IP 协议本身没有传输包的功能,因此包的实际传输要 托以 太网来进行。路由器是基于 IP 设计的,而交换机是基于以太网设计的,因 此 IP 与以太网的关系也就是路由器与交换机的关系。换句话说,路由器将 包的传输工作 托给交换机来进行 A。当然,这里讲的内容只适用于原原本 本实现 IP 和以太网机制的纯粹的路由器和交换机,实际的路由器有内置交 换机功能的,比如用于连接互联网的家用路由器就属于这一种,对于这种 路由器,上面内容可能就不适用了。但是,如果把这种“不纯粹”的路由 器拆分成“纯粹”的路由器和“纯粹”的交换机,则它们各自都适用上面 的内容。

从包的转发目标也可以看出路由器和交换机之间的 托关系。IP 并不 是 托以太网将包传输到最终目的地,而是传输到下一个路由器。在创建 MAC 头部时,也是从 IP 的路由表中查找出下一个路由器的 IP 地址,并通过 ARP 查询出 MAC 地址,然后将 MAC 地址写入 MAC 头部中的,这表 示 IP 对以太网的 托只是将包传输到下一个路由器就行了。当包到达下 一个路由器后,下一个路由器又会重新 托以太网将包传输到再下一个 路由器。随着这一过程反复执行,包就会最终到达 IP 的目的地,也就是 通信的对象。

到这里我们已经梳理了路由器与交换机之间的关系。简单来说,IP (路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一
个路由器的过程则是由以太网(交换机)来负责的。

2-2、tcp/ip传输过程

1、tcp/ip包包含以下2个头部
(a)MAC 头部(用于以太网协议) (b)IP 头部(用于 IP 协议)
这两个头部分别具有不同的作用。首先,发送方将包的目的地,也就 是要访问的服务器的 IP 地址写入 IP 头部中。这样一来,我们就知道这个 包应该发往哪里,IP 协议就可以根据这一地址查找包的传输方向,从而找 到下一个路由器的位置,也就是图 2.16 中的路由器 R1。接下来,IP 协议 会 托以太网协议将包传输过去。这时,IP 协议会查找下一个路由器的以 太网地址(MAC 地址),并将这个地址写入 MAC 头部中。这样一来,以太 网协议就知道要将这个包发到哪一个路由器上了。

网络包在传输过程中(图 2.16 1)会经过集线器,集线器是根据以太 网协议工作的设备。为了判断包接下来应该向什么地方传输,集线器里有 一张表(用于以太网协议的表),可根据以太网头部中记录的目的地信息查 出相应的传输方向。这张图中只有一个集线器,当存在多个集线器时,网 络包会按顺序逐一通过这些集线器进行传输。

接下来,包会到达下一个路由器(图 2.16 2)。路由器中有一张 IP 协 议的表,可根据这张表以及 IP 头部中记录的目的地信息查出接下来应该发 往哪个路由器。为了将包发到下一个路由器,我们还需要查出下一个路由 器的 MAC 地址,并记录到 MAC 头部中,大家可以理解为改写了 MAC 头 部 A。这样,网络包就又被发往下一个节点了。

再往后的过程图上就没有画出来了。网络包会通过路由器到达下一个 路由器 R2。这个过程不断重复,最终网络包就会被送到目的地,当目的地 设备成功接收之后,网络包的传输过程就结束了。

【简单概述】:ip头部信息可以获取数据包传输方向,并且获取下一个目的地的mac地址,并且加入到(修改)mac头部信息,以太网协议根据mac头部,负责将数据传递到目的地。

图解如下:
tcp/ip包传输过程

三、TCP与UDP

3-1、tcp

3-1-1、tcp三次握手

我初学tcp的时候就有这个疑问,为什么是三次握手?2次不行嘛?
这里做个通俗的讲解,通信双方是甲和乙
第一次握手:甲发出请求,并附带加密确认消息(确保是乙收到)
第二次握手:乙回复甲的请求,并回复加密消息,附加乙的加密消息
第三次握手:甲回复乙请求,并回复加密消息

仔细思考一下,是不是第二次握手的时候,甲收到乙的消息后,甲就已经可以确认双方可正常通信呢?当然,这个时候,甲知道自己发送的数据可达乙处,乙发动的消息可达甲处,这不就是可接受可发送嘛。但是乙呢?乙并不知道自己的消息可到达甲处,乙只能确定自己可接受甲的消息,所以对于乙,通信只能是可接受不一定可达,所以进行第三次我握手,网上也有人说是信道不稳定,确认稳定性,但是从逻辑上看,我觉得我说的很有道理的。

3-1-2、tcp协议头部格式

Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接;

Sequence Number:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号;主要用来解决网络报乱序的问题;

Acknowledgment Number:32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。主要用来解决不丢包的问题;

Offset:给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节;

TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。每个标志位的意思如下:

1
2
3
4
5
6
7
8
9
10
11
URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;
ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;
PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队;
RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;
SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;
FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制;这是一个复杂的问题,这篇博文中并不会进行总结的;

ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。

FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

四、RSA、数字签名、数字证书

4-1、基本概念

  • 数字证书:证书中心(certificate agent)用自己的私钥对某个公钥和该公钥相关信息加密的生成的(digital certificate),数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
  • 数字签名:通信中,私钥拥有者用私钥加密信息摘要(信息hash函数生成)产生的(digital signature),用来保证身份。接收者,拿到传递的信息和数字签名后,用公钥解码数字签名,用hash函数解码信息,对比2个解码后的数据,如果一致,则说明信息来源可靠
  • RSA非对称加密算法:该名称来自于发明这个算法的3人名字的首字母,核心是利用一个最基本的数学原理,2个大质数相乘,所得的大质数,很难逆向分解得出这2个质数。(在量子计算和分布式日益成熟的今天,也不知道还能保证多久)

4-2、实际应用

上述的基本概念中,数字证书的出现,其实是防止一种情况发生,如果小A和小B通信,小A首先用hash函数生成信息的摘要,然后对摘要进行私钥加密生成数字签名,将信息+hash函数+数字签名发送给小B,小B拿到后,用小A的公钥解码数字签名,然后用hash函数加密信息,将上述2种操作得到的摘要进行比对,相同,则证明信息是完整,没有被篡改的。

这个时候小C如果在小B不注意的时候,修改了小B保留的小A的公钥,换成自己的公钥,冒充小A给小B发送信息,这个时候小B就被欺骗了,所以公钥应该在通信的时候保证其正确性,这个时候就有了(certificate agent)证书机构和数字证书。

小A的公钥不再由小A发送给小B了,而由小B直接去证书机构申请,例子如下:

1
2
3
4
5
6
A与B安全通信认证过程
1 A 向CA请求B的数字证书
2.1 CA把B的数字证书做输入参数,生成一个Hash
2.2 CA用自己的私钥加密Hash,生成一个数字签名(Digital Signature)
2.3 CA把数字签名附在B的数字证书之后,即 B的数字证书 + CA 数字签名,发给A
3 A拥有CA的公钥(预装或者离线方式获得),可以解密CA的数字签名(CA私钥加密),得到Hash,同时对接收到的B的数字证书做Hash运算,也得到一个Hash,如果两个Hash 相等,则认为此证书安全可靠,在传输途中没有被篡改,我们称这个过程为数据完整性(Data Integrity )保护

比较详细的参考说明

参考资料

书籍

《网络是怎么连接的》

网络

tcp协议通俗讲解

坚持原创技术分享,您的支持将鼓励我继续创作!