网络协议概述

       网络,几乎大家每天都会用到,但是如果真的让给网络定义,好像还不太容易。百度百科定义是:在计算机领域中,网络是信息传输、接收和共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。在软件开发中,通过网络,可以使我们的程序被别人访问或访问其他地方的资源。

       协议是个很重要的概念,也是我们学网络编程的核心内容。协议其实就是一个约定,大家都按这个规则来,来交谈,来交易,或是来编程。协议最重要的概念有三个:语法、语义和顺序。语法是指内容要合规则和格式,如用“;”结束一行语句,括号成对出现等。语义是指代表的含义,当我问一加一等于几,你回答“嗯”,这个就不符合语义了。顺序是规则的一部分,先做什么再做什么要有逻辑。

       浏览器能上网能访问网站,也是因为它收到了一段遵守HTTP协议的内容,然后经过浏览器的解析,就呈现出了我们经常看到的页面。

       下面,通过一个访问网站的一般流程来介绍一下网络协议的大概内容。

        当我们在浏览器输入baidu.com,它并不知道“baidu”是哪个网站,所以要先去地址簿协议DNS(或HTTPDNS)去查询,找一下baidu.com的IP地址是谁,这个IP地址就是一串数字了,比如“102.116.162.5”,计算机最喜欢也只认识这样的数字。

       知道了目标地址,浏览器就开始打包它的请求。对于普通请求,往往会使用HTTP协议,对于购物或是其他涉及财产的请求,一般使用安全级别更高的HTTPS协议。不过无论是用了哪种协议,都要带上自己访问这个网站想做的事。

      在这一个阶段,我们用到了DNS协议,HTTP/HTTPS协议,这些协议所在的层被称为应用层,经过应用层的封装之后,通过socket编程,浏览器会将应用层的包转发到下一层,也就是传输层。

      在传输层,最重要的是两个协议,UDP和TCP协议,二者的区别是UDP是无连接的协议,也就是只管发,不关心能不能发到,而TCP就良心多了,不光发送,还要确认是否发送成功,如果数据包没有到达目的地,就会重新发送。

      TCP协议里面有两个端口,一个是浏览器监听的端口,一个是目标服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该分给哪个进程。

     经过传输层的封装,数据包又多了一个TCP头,然后浏览器将包传给下一层,也就是操作系统的网络层,在这一层,也有一个协议进行管控,就是IP协议。

     在网络层的IP协议里会有两个IP地址,一个是源IP地址,就是浏览器所在计算机的IP地址,另一个是目标IP地址,就是打算访问的那个网站的服务器所在的IP地址。经过了网络层的封装,数据包又多了一个IP头。

IP地址就像是网络世界的门牌号,操作系统拿到了目标IP地址后,就开始寻找目标服务器。一般目标服务器都不是在本机,所以操作系统将IP地址发给网关,网关也会响应自己的本地MAC地址。(如何将IP地址发给网关,用的是ARP协议)

       于是操作系统将IP包交给了下一层,也就是MAC层。网卡再将包发出去,由于这个包里面含有MAC地址,所以它能够到达网关。

       网关收到包之后,会根据自己的知识,判断下一步怎么走。网关往往是一个路由器,到某个IP地址应该怎么走,叫路由表。

       路由器连接着两个局域网,每个局域网内部可以使用本地的MAC地址进行通信。一旦需要跨越路由器,则需要拿出IP头来,IP头写着源IP和目标IP,根据目标IP,加上路由器之间通过路由协议(常用的有OSPF和BGP)会知道到达目标地址的路径。当网络包知道下一步去到哪个路由器的时候,还是要使用局域网的MAC地址,再通过下一个路由器的MAC地址找到下一个路由,然后再问怎么走,一直到走出最后一个路由。

        最后一个路由知道网络包要去的服务器,通过ARP协议找到目标服务器,目标服务器会回应一个MAC地址。网络包通过路由器后,根据这个MAC地址就可以找到目标服务器。

        目标服务器发现MAC地址对上了,就取下MAC头来,发送给操作系统网络层。发现IP头也对应上了,就取下IP头。IP头里会写上一层封装的是哪种协议,比如TCP协议,然后将其传给传输层,即TCP层。在TCP层,刚说了它比UDP连接有良心,因为它要保证传输到达,否则会进行失败重传,所以在这一层,对于每个收到的包,都会回复一个包说明自己收到客户端的请求包了(这个包仅仅是TCP层的一个说明,和请求实体的内容没有关系)。如果一段时间之后没有发送回复包,客户端会TCP层会重新发送这个包,直到收到服务器端TCP层的回复。这个重新发送,不是用户再次请求,而是TCP层自己默默地重试。除非是TCP这一层出了问题,如链接断开,才会让浏览器的应用层再次发送请求。

        当网络包到达了TCP层之后,TCP头中有目标服务器端口号,通过这个端口号,可以找到目标服务器的进程正在监听这个端口,该进程得到HTTP请求的内容之后,知道了客户端想做什么,就会再回复一个HTTP包,这个HTTP包会像之前的请求包来的时候那样,历尽千辛万苦到达用户浏览器,这样用户就能看到自己的请求结果了。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值