JavaScript 进阶营

网络传输之TCP/IP协议族

2018-02-09  本文已影响15人  JOKER_HAN

我们现实网络无处不在,我们被庞大的虚拟网络包围,但我们却对它是怎样把我们的信息传递并实现通信的,我们并没有了解过,那么当我们在浏览器中出入一段地址,按下回车这背后都会发生什么?
比如说一般场景下,客户机和服务器不在一个局域网,输入的是一个域名而不是IP地址。那么当按下回车后,首先浏览器会通过DNS解析找到我们对应的IP地址,将http报文发送给目标IP地址对应的服务器,之后服务器做出响应,将请求的资源发送给浏览器。
TIP/IP在这当中扮演着重要的作用。

TCP/IP历史

在计算机发展的早期阶段,很多不同的厂商生产各种不同的计算型号,他们运行完全不同的操作系统,为了让他们之间能够相互通信,TCP/IP协议族诞生了。

那么为什么我们叫它协议族呢? 因为实际上TCP/IP是一组不同层次上的多个协议的组合。
那么协议组合是什么?——TCP/IP模型

TCP/IP模型

TCP/IP模型是一个四层结构,从上往下依次是应用层,运输层(传输层),网络层,网络接口层(数据链路层)。
通过开头我们输入一个url的例子,自上而下进行介绍TIP/IP参考模型


应用层

为用户提供各种服务,比如我们浏览网页时用到的HTTP,收发邮件时用的SMTP,登录远程主机用的SSH或者FTP协议,DNS等协议。
假设我们对 www.xxx.com发送请求

传输层

传输层位于应用层下层,网络借口层的上层,主要有TCP和UDP两种协议。
UDP是用户数据报协议,不关心是否收到,不需要建立连接就可以通信,传输效率高,比如说微信。
而TCP是一种可靠的面向连接的协议,就是在交互数据前先建立一个TCP连接,如同打电话,首先要拨号,然后等待对方响应后才能彼此交流
TCP提供全双工服务,即数据可在同一时间双向传播
TCP将若干个字节构成一个分组,此分组称为报文段(Segment)


TCP连接的建立过程如下图所示。

网络层

在这一层中主要是 IP 协议处理数据传输。用于把数据从源主机经过若干个中间节点传送到目标主机,并向传输层提供最基础的数据传输服务。

在网络中,每台计算机都有一个唯一的地址,方便别人找到它,这个地址称为IP地址。

IP协议处理过的数据拥有自己的名字:IP数据报,让我们从下图来了解一下IP数据报的格式:

数据链路层

在这一层中,上层传来的数据经过协议处理后的一份数据,我们称之为一帧(Frame)
在链路层中的地址指的的是计算机中网卡的硬件地址,即mac地址。我们知道,每一个网卡在出厂时,其内部都存有一个全世界独一无二的硬件标识,称为mac地址,它是的长度为6个字节。在网络中,两个计算机之间的通信实际上就是计算机中的两张网卡之间的通信。如果没有mac地址,就无法得知通信的具体位置,因此获取mac地址是计算机通信的基础保障。

但是实际上,计算机程序在发送连接请求时,一般只知道目的主机的IP地址,那么mac地址是如何获取的呢?这就要靠ARP协议来实现。

ARP协议(地址解析协议)可以看做是链路层的一个协议,它的作用是为IP地址与对应的mac地址之间提供动态的映射,这个过程是自动完成的,因此无需用户或管理员关心。ARP协议将IP映射为mac地址的过程大致如下:

如果目的主机与源主机位于同一网段,那么ARP协议会向本网段发送一个广播,网段中的所有主机都会受到一条消息,这条消息询问哪台主机的IP地址与目的主机地址相同。当目的主机接受到这条消息,就做出应答,将自己的mac地址发送过去。其他主机则将这条消息忽略。

如果目的主机与源主机位于不同网段,那么ARP协议会将消息发送给本地的路由,路由经过IP寻址找到目的主机所在网段的路由,再由目的路由将消息广播出去,获得目的主机响应后再返回给源主机。

一般来说, 每台机器都维护的有一个ARP缓存表, 存储了近期的IP地址和硬件地址的映射关系, 可以用 arp -a 命令来查看缓存表中内容。

总结

事实上当我们http访问一个地址的时候,从应用层开始向下传递,没经过一层,该层的协议会把上层传递的数据在这个基础上加一个首部,该首部包含了该层协议管理的信息,比如说网络层会打包IP信息,数据链路层打包mac地址。
通过这种层层打包的方式,最后由物理层传递出去,再有路由器,代理服务器等设备,交给目标计算机。
目标计算机得到传递过来的数据后,从物理层向上传递,每一层会将该层对应协议负责的首部摘除后再传给上层。最后抵达应用层对应的某个应用程序。

上一篇 下一篇

猜你喜欢

热点阅读