咱们现实网络无处不在,咱们被庞大的虚拟网络包围,但咱们却对它是怎样把咱们的信息传递并实现通讯的,咱们并无了解过,那么当咱们在浏览器中出入一段地址,按下回车这背后都会发生什么? 好比说通常场景下,客户机和服务器不在一个局域网,输入的是一个域名而不是IP地址。那么当按下回车后,首先浏览器会经过DNS解析找到咱们对应的IP地址,将http报文发送给目标IP地址对应的服务器,以后服务器作出响应,将请求的资源发送给浏览器。 TIP/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) url
TCP链接的创建过程以下图所示。操作系统
在这一层中主要是 IP 协议处理数据传输。用于把数据从源主机通过若干个中间节点传送到目标主机,并向传输层提供最基础的数据传输服务。3d
在网络中,每台计算机都有一个惟一的地址,方便别人找到它,这个地址称为IP地址。 IP协议处理过的数据拥有本身的名字:IP数据报,让咱们从下图来了解一下IP数据报的格式:代理
在这一层中,上层传来的数据通过协议处理后的一份数据,咱们称之为一帧(Frame) 在链路层中的地址指的的是计算机中网卡的硬件地址,即mac地址。咱们知道,每个网卡在出厂时,其内部都存有一个全世界独一无二的硬件标识,称为mac地址,它是的长度为6个字节。在网络中,两个计算机之间的通讯实际上就是计算机中的两张网卡之间的通讯。若是没有mac地址,就没法得知通讯的具体位置,所以获取mac地址是计算机通讯的基础保障。code
可是实际上,计算机程序在发送链接请求时,通常只知道目的主机的IP地址,那么mac地址是如何获取的呢?这就要靠ARP协议来实现。
ARP协议(地址解析协议)能够看作是链路层的一个协议,它的做用是为IP地址与对应的mac地址之间提供动态的映射,这个过程是自动完成的,所以无需用户或管理员关心。ARP协议将IP映射为mac地址的过程大体以下:
若是目的主机与源主机位于同一网段,那么ARP协议会向本网段发送一个广播,网段中的全部主机都会受到一条消息,这条消息询问哪台主机的IP地址与目的主机地址相同。当目的主机接受到这条消息,就作出应答,将本身的mac地址发送过去。其余主机则将这条消息忽略。
若是目的主机与源主机位于不一样网段,那么ARP协议会将消息发送给本地的路由,路由通过IP寻址找到目的主机所在网段的路由,再由目的路由将消息广播出去,得到目的主机响应后再返回给源主机。
通常来讲, 每台机器都维护的有一个ARP缓存表, 存储了近期的IP地址和硬件地址的映射关系, 能够用 arp -a 命令来查看缓存表中内容。
事实上当咱们http访问一个地址的时候,从应用层开始向下传递,没通过一层,该层的协议会把上层传递的数据在这个基础上加一个首部,该首部包含了该层协议管理的信息,好比说网络层会打包IP信息,数据链路层打包mac地址。 经过这种层层打包的方式,最后由物理层传递出去,再有路由器,代理服务器等设备,交给目标计算机。 目标计算机获得传递过来的数据后,从物理层向上传递,每一层会将该层对应协议负责的首部摘除后再传给上层。最后抵达应用层对应的某个应用程序。