1 - 网络协议通识

广义协议

代码也是一种协议,只有通过这种协议,计算机才知道我们想让它做什么。

协议三要素

计算机语言作为程序员控制一台计算机工作的协议,具备了协议的三要素。
语法,语义(代码一定是有意义的),顺序(先干啥后干啥)

只把协议教给一台计算机是不行的,教给一大片计算机才能使这些机器相互协作,共同完成一件事。这就需要网络协议。

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>
以上
1.符合语法,只有按照这个格式来,浏览器才认,状态-首部-内容
2.符合语义,就是要按照约定的意思来。
3.符合顺序,先发送HTTP请求,才有后来HTTP返回的东西。

常用的网络协议

      以用户访问网易考拉海购为例,首先通过 url 找到 ip 这个过程是用到地址簿协议 DNS,或者用更加精准的地址簿查找协议HTTPDNS。找到 IP 后打包 http 请求,如果要加密则用 HTTPS 协议,无论 HTTP 还是 HTTPS ,里面都要写清楚要买什么或者买多少(即具体内容),此时 DNS , HTTP , HTTPS 所在的层,我们称为应用层。
      经过应用层封装以后,把包交给下一层:传输层。
      传输层有两种协议,无连接协议 UDP,面向连接协议 TCP ,对于支付来说,一般使用TCP。面向连接的含义就是,TCP 会保证这个包到达目的地,如果不能到达,就会重新发送,直到到达。TCP协议有两个端口,一个是浏览器监听的端口,一个是电商服务器监听的端口,操作系统就是通过端口来判断它得到的包应该给哪个进程。
    传输层之后,浏览器会把包交给操作系统的网络层,IP协议里会有源IP地址和目标IP地址。
    有了Ip地址,操作系统就想如何根据这个门牌号找到目标机器,会先判断是本地人还是外地人,如果是本地地址,从门牌号就可以看出来。如果是要去外地,就可以想象,出国要海关,去外地要网关。操作系统启动的时候,会被DHCP协议配置IP地址,以及默认的网关IP地址 192.168.1.1 。操作系统想要将IP地址发给网关,本地通信基本靠吼,于是操作系统大吼,谁是192.168.1.1啊,网关会吼回去,我就是!我的本地地址在村东头!而这个本地地址就是MAC地址,那一声大吼就是ARP协议。
    于是操作系统将IP包交给下一层,也就是MAC层。网卡再将包发出去,因为这个包里是有MAC地址的,因而他能够到达网关。网关收到包之后,会根据他自己的知识,判断下一步应该怎么走。网关往往是个路由器,到某个ip下一步应该怎么走,这个是路由表。路由器就像玄奘出行时候的城关,每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的MAC地址进行通信。一旦跨越城关,就要拿出IP头来,里面写着贫僧来自东土大唐,到西天拜佛求经。路过宝地,借宿一晚,明日起行。请问接下来该怎么走?城关往往是直到这些知识的,因为城关和临近的城关也会经常沟通。到哪里应该怎么走,这种沟通的协议称为路由协议,常用的有OSPF和BGP。最后一个城关知道这个网络包要去的地方,于是对着这个国家大吼,谁是目标ip啊?目标服务器就会回复一个MAC地址,网络包过关后,通过这个MAC地址就能找到目标服务器。
    目标服务器发现MAC地址对上了,取下MAC头来,发送给操作系统的网络层。发现IP也对上了,取下IP头。IP头里会写上一层封装的是TCP协议,然后交给传输层,即TCP层。
    在这一层,对于收到的每个包,都会有一个回复的包说明收到了。这个回复的包绝非这次下单请求的结果,例如购物是否成功,扣了多少钱等等,而仅仅只是TCP层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去,报个平安。因为一旦出了国门,西行路上千难万险,如果这个过程中,有意外怎么办呢?所以到了要报个平安。
    如果过了一段时间还是没到,发送端的TCP层会重新发送这个包,还是上面的过程,直到有一天收到平安的答复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次。只是TCP层不断自己闷头重试。
    当网络包平安到达TCP层后,TCP层有目标端口号,通过这个端口号,可以找到电商网站的进程正在监听这个端口号,假设一个Tomcat,将这个包发给电商网站。电商网站的进程得到HTTP请求的内容,知道了要买东西,买多少。往往一个电商请求最开始接待请求的这个Tomcat只是一个接待员,它会告诉专门管理订单的进程,登记买某个商品,买多少,告诉管理库存的进程,库存要减少多少,告诉支付的进程,应该付多少钱等等。如果告诉相关的进程呢?往往通过RPC调用,即远程过程调用的方式来实现。远程过程调用就是当告诉管理订单进程的时候,接待员不用关系中间的网络互连问题,会由RPC框架统一处理。RPC框架有很多种,有基于HTTP协议放在HTTP报文里面的,有直接封装在TCP报文里面的。
    当接待员发现相应的部门都处理完毕,就回复一个HTTPS的包,告知下单成功。这个HTTPS的包会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显示支付成功。

一个包结构(其中的内容):

 
MAC 地址
客户端电 脑MAC:192.168.1.101 的 MAC
网关的MAC : 192.168.1.1 的 MAC
IP头
客户端电脑IP : 192.168.1.101
电商服务器IP: 106.114.138.24
TCP头
浏览器端口:12345
电商应用端口:443
HTTP头 POST,URL,HTTP 1.1,正文格式:json,正文长度:1234
实际要传送的信息 我要买什么,买多少

应用层:DHCP HTTP HTTPS RTMP P2P DNS GTP RPC
传输层:UDP TCP
网络层:ICMP IP OSPF BGP IPSec GRE
链路层:ARP VLAN STP
物理层:网络跳线

猜你喜欢

转载自blog.csdn.net/weixin_42491578/article/details/80741257
今日推荐