我们为了可以在互联网进行相关的通信,一定要保证一定的协议下进行通信,才能让彼此知道对方想要做什么?

协议中的三要素,

语法:一段的内容要符合一定的规则或者格式,比如括号必须成对出现?

语义:这段内容的含义,要做什么?

顺序:先干啥,后干啥,比如,加上某个数值,再去减去某个数值

我们有了这个规定的协议,就能控制一大批的机器去协作,去共同做一件事,这既是网络协议

那么,假如我们按照一段HTTP协议的东西,进行请求一次

我们请求一个网站,获得结果是如下的HTTP协议

HTTP/1.1 200 OK

Date: Tue, 27 Mar 2018 16:50:26 GMT

Content-Type: text/html;charset=UTF-8

Content-Language: zh-CN

<!DOCTYPE html>

<html>

<head>

<base href=”https://pages.kaola.com/” />

<meta charset=”utf-8″/> <title>网易考拉3周年主会场</title>

那么HTTP协议的语法就是如上,先是状态,然后是首部,最后是内容

在语义上,他们利用一个状态码来表示协议的状态

最后顺序,上面的顺序是不会变的,而且必须在我们发出HTTP请求后才能返回

我们常说的网络协议呢?

假设我输入了

www.baidu.com

这就是一个URL,对于浏览器来说,这是一个名字,但是对应的地址不知道,所以他需要去DNS服务器去找,或者使用HTTPDNS来查找对应协议

最后解析得到了对应的地址112.80.248.75

有了这个IP地址,我们需要知道怎么去这个IP地址,发往请求

1.首先浏览器会打包这个请求,打包方式不同,对于一般的请求,是HTTP协议的,对于一些购物的协议,则需要加密,使用了HTTPS协议,但是协议内部都会写了买什么和买多少

图片

然后在这一层,我们叫做应用层,打包过后,进行传输给下一层去完成,就是传输层,中间使用了Socket编程,然后传输层会选择使用TCP或者UDP协议传输,一般在支付的时候,我们会使用TCP协议传输,TCP是一种保证稳定的协议,能够确保这个包能够到达目的地,如果不能到达,就重发

TCP协议中包含了两个端口,一个是浏览器监听的端口,就是自身端口,一个是电商的端口,就是目的端口

双方的操作系统就是通过端口来判断,这个包应该给哪个进程

图片

传输层完成后,浏览器会传给操作系统的网络层

网络层就是IP协议,里面会包含着源IP,目的IP

图片

知道了目的IP,就需要根据这个IP找到对应的机器,操作系统先判定,这个IP是否在本地,不在的话,需要进行外地寻找,也就是互联网环境,从本地跨往外地需要过网关,

而一般一个系统启动的时候,就会被DHCP协议分配了IP地址和对应的网关IP地址192.168.1.1

然后如何知道我们这个本地网络的网关在哪呢?基本靠吼,也就是在本地广播一下,等待网关的回应,这个广播利用的就是ARP协议,而网管回应的,则是网关的MAC地址

图片

然后这就从IP层走到了MAC层,网卡会将包发送出去,

网关收到包之后,需要知道往哪里发送,

路由器中就具有路由表

表里会告诉你的下一跳要往哪里走,就好比我们出去问路,有人不会直接告诉你目的地,而是告诉你先到哪里,再到哪里,再到那里

图片

而不同路由器直接是有沟通的,就是路由协议,常见的是OSPF和BGP两种

图片

然后我们一直走到了最后的一个城关的地址,最后的一个城关知道网络包的位置,于是,对着这个IP段广播了一下,谁是目的IP啊,然后就能知道具体的服务器的MAC地址,然后通过这个MAC地址找到目的服务器,目的服务器发现MAC地址对上了,取下来MAC头,发给操作系统的网络层,发现IP也

图片 对上了,就取出来IP头,IP头上会表示我们使用的什么协议,,TCP,然后传给传输层

在这一层,我们对于收到的包进行确认,就是返回一个确认收到的回复

对于上面的流程,如果我们客户端发送了这个请求后,一直没有回到返回的包,会重新发送这个包

TCP会一直尝试重发,知道出现一些问题

当网络包到达了TCP层后,TCP头中有目的的端口号,就是找到了监听这个端口的进程

图片

然后接受到HTTP请求后,就是内部的做的事情了

内部如果是微服务的话,还会通过RPC调用,通过远程调用的方式实现,RPC的实现很多种,有HTTP内部报文的,有TCP报文的

然后处理完成后,回复一个HTTPS的包,告诉下单成功,整个流程结束

一个简单的请求过程中,涉及了这么多的协议,那么我们会依次学习这些网络协议

图片

课后思考

1.为何通过路由表获取到了IP地址了之后,还需要通过本地的MAC地址呢?

因为上面说了DHCP会在启动的时候分配IP地址,也就是可能是动态的,而Mac地址是写死在网卡中,是不会改变的

这就好比,Mac地址就是你的身份证,但是身份证上的地址不是你现在的地址,而Ip能确定你现在的地址,确定了现在的地址之后,再利用Mac去确定身份

在整体的传输过程中,保存着的ip地址不变,也就是目的地址和源地址,但是没经过一个网关,就会改变源mac和目的mac,利用mac的变化来保存下一跳

所以下一跳看起来是IP地址,其实是通过ARP得到MAC地址,然后将MAC地址放在目的MAC地址中

2.MAC地址是否会变

mac被称为硬件地址,长度是6字节,分为前24位和后24位,前面的交给组织唯一标志符

是厂家的标识,后面的是伸长的ID,是厂家分配的,

虽然MAC伴随的设备越生产越多,越来越可能出现冲突,但是在一个局域网内还是很少见的,即使有了,也很好解决

3.TCP重试是否可能导致重复下单?

TCP层的重复尝试,并不会引起HTTP层的恐慌,因为TCP层会进行相对应的去重工作

那么什么时候会导致重复下单呢?是因为TCP连接断了,导致的HTTP重发

或者请求被黑客拦截,导致的发送多了,当然,在Https中,有很手段

4.TCP报平安的包是否是原路返回

当然不是,这里的原路返回是指的是原样返回,并不是完全一样的路径

5.最后一跳的时候,IP改变了怎么办?

如果原本的IP不见了,那么ARP会找不到,导致发送包失败了,IP层的工作就结束了

但是TCP层会重试,超过一定次数则会放弃,如果重启了,IP还是原来的,但是端口没有启动,导致不行

即使起来了端口,因为TCP的服务器端是新的,导致对不上Sequence Number,根本不是原本的连接,会发送RST

只有那种热迁移的虚拟机,什么都不变,才能直接对上

6.TCP层报的平安,如何确定浏览器收到了呢?

这并不保证一定收到了,而是通过一个Socket获取到TCP连接,然后从中读取数据,当读取失败的时候,也可以直接抛出错误

7.ARP协议在哪一层

这其实并不规范,可以说是介于第二层和第三层之间吧,但是这个没有必要深入了解

发表评论

邮箱地址不会被公开。 必填项已用*标注