谈一谈计算机网络---漫谈网络协议

人类简史这本书说过“十万年前,地球上至少有六种不同的人,但今日,世界舞台为什么只剩下了我们自己?“ 十万年前,六种人中智人是最弱的一种,如今只剩下我们自己,靠的就是很好地沟通、交流、协作能力,即认知革命,这是人类发展的一大进步。
计算机的世界也是如此,试想一下如果计算机不能通过网络连接起来,我们能构造大型分布式软件么?能轻松的获得各种各样的信息么?那肯定是不可能的。
就像语言一样要能让大家都可以理解对方表达的意思,那么沟通的时候就要有协议。
协议的三要素:
1 语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
2 语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
3 顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。
同样,如果需要一大堆的计算机共同工作,那么作为计算机集群里面的计算机都必须要有共同的沟通基础—网络协议。
当你浏览网页的时候,比如你在搜索引擎里面输入了关键字,浏览器就给你显示了相关的网页(当然,鉴于某些原因,也可能是虚假广告。。。)。这里面到底发生了什么呢?
这是因为浏览器收到了HTTP协议返回的文本
比如:
谈一谈计算机网络---漫谈网络协议_第1张图片
这是在google输入了关键字返回来的文本。
首先是语法,浏览器接收到的文本,必须要用上面返回的头部格式浏览器才能识别。
第二是语义,status code必须要是200才是成功的,返回404则是找不到网页,500是内部错误等等。
第三是顺序,符合顺序,你一点浏览器,就是发送出一个 HTTP 请求,然后才有上面那一串 HTTP 返回的东西。
常用的网络协议
当你往浏览器里面敲入了网址以后发生了什么呢?首先是浏览器要知道去那里请求,这个就需要DNS。DNS负责解析网址为具体的IP地址。IP地址就像是互联网世界的门牌号。有了IP地址才能知道具体请求到哪里。有了IP地址,浏览器就需要向这个IP地址请求资源。此时就用到了HTTP协议。如果需要更加安全的协议就会用到HTTPS协议。
DNS,HTTP,HTTPS这些是工作在网络层。
网络层的内容需要发送出去就需要底层socket编程的支持。SOCKET编程是叫做传输层,主要分为两种协议,TCP和UDP。这两种协议及里面都需要包含端口,一个是客户端的端口,一个是远程服务器的端口。因为操作系统才能找到对应的进程去处理内容。
网络层把内容打包好了以后,就会交给网络层。网络层里面包含了源IP地址和目的IP地址。
操作系统既然知道了目标 IP 地址,就开始想如何根据这个门牌号找到目标机器。如果是在本地的,操作系统根据IP地址就找到了对应的机器。而如果是远方的,那么就需要去"国外"。去国外那么就必须要经过海关,这里充当海关角色的就是–网关。操作系统跟网关的通信就是靠吼,这个协议就算ARP协议。通过ARP协议,拿到了网关的MAC地址。操作系统拿到MAC地址,就把包传递到下一层MAC层,然后通过网卡把包发出去,由于包里面包含了网关的MAC地址,所以能找到网关。
到达网关,网关实现了路由协议,包括 OSPF 和 BGP。通过路由协议保存了去哪里的知识,这个知识是通过路由表保存起来。然后把包通过指定的出口,找到指定的路由器,然后一步一步的找到目标。网关之间的通信也是要通过MAC地址。这是因为目标IP地址是不能发生改变的,改变了网关是不知道目标机器的,所以只能通过修改目标MAC地址,然后通过ARP协议,使得通过IP地址找到MAC地址,实现通信。
目标服务器发现 MAC 地址对上了,取下 MAC 头来,发送给操作系统的网络层。发现 IP 也对上了,就取下 IP 头。IP 头里会写上一层封装的是 TCP 协议,然后将其交给传输层,即 TCP 层。
TCP层是可靠连接的,但是网络包一路上不知道遇到多少距离,也不知道会不会被丢弃,所以TCP超过一定时间没有受到回复的包,就会尝试重发。当超过重试次数以后,就会认为网络发生问题,或者服务器出问题了。
TCP层收到网络包以后,会通过端口号找到操作系统的进程,比如nginx,网关的进程。当网关受到网络包以后,通过解析包里面的内容,识别出这个包是要进行的行为,就会把包转发给对应的后台服务器,服务器处理完了以后,返回处理的结果和进行数据的记录,计算等行为。包含结果的包也要通过上面发包的行为,最后发给请求的客户端,比如你的浏览器。最后你就能收到回应,拿到自己想要的结果。

你可能感兴趣的:(谈一谈计算机网络,计算机网络)