1. 什么是协议?
人与人之间通过语言进行沟通,计算机之间通过0和1进行沟通,程序员和计算机之间通过计算机语言沟通。
计算机语言是人类和计算机沟通的一种协议,通过这个协议,计算机可以知道我们想让他干什么。
计算机语言还比较接近人类语言,计算机不能直接读懂,还需要通过编译计算机才能直接读懂。
1.1 协议的三要素
语法:这一段内容要符合一定的格式;
语义:这一段内容要代表某种意义;
顺序:就是先干啥,后干啥。
学会计算机语言就可以教给一台计算机完成你想让他做的事了,如果想教给一片机器做什么,这时候就需要网络协议了。只有通网络协议,才能让一大片机器相互协作,共同完成一件事。
2. 一个HTTP请求的前世今生
当你在浏览器地址栏输入 https:www.baidu.com会发生什么呢?
a. https:www.baidu.com 只是一个URL,浏览器只知道名字,不知道具体的地点。这时他使用地址簿协议(常用的地址簿协议有DNS和HTTPDNS)查找得到119.75.217.109这个IP地址。IP地址是互联网世界的门牌号。
b. 得到目标地址后,浏览器开始打包他的请求。请求一般采用HTTP协议或者HTTPS协议。DNS,HTTP,HTTPS所在的层为应用层,经过应用层封装后,浏览器将请求包交给下一层传输层去完成。
c. 传输层一般有面向连接的TCP协议和无连接的UDP协议。所谓面向连接就是TCP会保证这个包可以到达目的地,如果不能到达,就重新发送,直到到达。TCP头里面有两个端口,一个是当前程序使用的端口,一个是请求服务器监听的端口,操作系统往往通过端口判断他得到的包应该给哪个进程。传输层封装完成后将包交给下一层网络层去完成。
d. 网络层的协议是IP协议,经过封装后IP头里面有源IP地址和目标IP地址。操作系统根据目标IP地址就能知道这个它是本地人还是外地人。如果是外地人的话就要去网关,操作系统启动时会被DHCP协议配置IP地址和默认的网关地址192.168.1.1。操作系统提供ARP协议得到本地网关的MAC地址。于是操作系统将IP包交给下一层MAC层去完成。
e. 到了MAC层之后,网卡(网卡是电脑的一个接收信息 转换信息 暂储信息的一个硬件。它负责把接受到信息递交给上层)将包发出去,因为这个包里面有MAC地址,因此是可以到达本地网关的。网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到某个IP的地址怎么走,这个叫做路由表。
f. 路由器相当于一个局域网,局域网内可以直接通过MAC地址进行通信,一旦跨越路由器,就需要根据路由协议(常用的有OSPF和BGP)确定到这个IP怎么走。
g. 最后到了目标地址的路由器,路由器根据这个IP地址通过ARP就知道其MAC地址,根据MAC地址就可以找到目标服务器了。
h. 目标服务器确认MAC地址无误后,去下MAC头,发送给操作系统的网络层;
i. 网络层确认IP无误后,取下IP头,根据IP头中的传输层协议,发送给传输层;
j 对于传输层,对于受到的每个包,都会回复一个包表明包收到了(这个回复包只是说明包收到了,并不是这个包的请求结果),这个回复沿着来的方向走回去报个平安。如果一段时间后发送端的TCP层未收到平安到达的回复,TCP层就会一直闷头重试,直到收到平安到达的回复。如果TCP层除了问题,则应用层重新发送请求。报完平安之后,传输层根据端口号发送给应用层指定的应用程序。
k. 应用程序通过解析HTTP请求即可获知里面的请求信息。
3 . 重点
1. 网络可以有下层没上层,但是绝对不可能有上层没下层。就像一栋楼可能很高,可能很低,但是中间绝对不可能有断层一样。
2. 网络上跑的包都是完整的。每个包发送时都要经过一层层协议的封装,接收时要一层层协议的解析。
3. IP地址用于网络寻址,mac地址用于局域网寻址。