网络传输之TCP/IP协议族

咱们现实网络无处不在,咱们被庞大的虚拟网络包围,但咱们却对它是怎样把咱们的信息传递并实现通讯的,咱们并无了解过,那么当咱们在浏览器中出入一段地址,按下回车这背后都会发生什么? 好比说通常场景下,客户机和服务器不在一个局域网,输入的是一个域名而不是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发送请求网络

  • 浏览器看到这个域名的时候,就好像去一家从没去过的餐厅吃饭,只知道餐厅名字,殊不知道具体地址,域名就像是一个餐厅的名字,而IP地址至关于一个具体的地址。 浏览器必须知道要请求服务器的IP地址,发出的请求才有目的地。DNS能够将IP转换成地址。
  • http 会生成报文 ,这个请求里面包含了请求的方法,请求的路径“/”,请求的主机名,客户机的类型以及一些其余的信息。

传输层

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

TCP链接的创建过程以下图所示。操作系统

  • 三次握手
    • 主机A经过一个标识为SYN标识位的数据段发送给主机B请求链接,告诉主机B“我想和你建立一条TCP链接”。
    • 当主机B收到SYN请求后,若是其所请求的端口号正在等待链接,则会为这一条TCP链接分配资源,并主机A发送确认应答ACK和同步序列号SYNC标志位的数据段来响应主机。
    • 主机A确认收到了主机B的数据段并能够开始传输实际数据。
  • 四次挥手
    • 主机A发送FIN控制位发出断开链接的请求 。
    • 主机B进行响应,确认收到断开链接请求。
    • 主机B发送FIN控制,随后关闭了链接。
    • 主机A收到以后,又向主机B回复一个ACK应答。过了一段计时等待,主机A也关闭了链接,释放资源。这一段计时等待的时间是为了主机B重传最后的ACK防止其丢失。

网络层

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

在网络中,每台计算机都有一个惟一的地址,方便别人找到它,这个地址称为IP地址。 IP协议处理过的数据拥有本身的名字:IP数据报,让咱们从下图来了解一下IP数据报的格式:代理

  • 版本
    • 一个4位二进制数的标识,用来标识IP协议的版本,目前大部分的协议版本号为4,所以IP有时也称为IPv4。
  • 首部长部
  • 优先级与服务类型
  • 总长度
    • 该字段用以指示整个IP数据包的长度,最长为65535字节,包括头和数据 标识符
    • 惟一标识主机发送的每一份数据报
  • 标志
    • 分为3个字段,依次为保留位、不分片位和更多片位,保留位:通常被置为0 不分片位:表示该数据报是否被分片,若是被置为1,则不能对数据报进行分片,若是要对其进行分片处理,就应将其置为0 更多片位:除了最后一个分片,其余每一个组成数据报的片都要将该位置设置为1.
  • 段偏移量
    • 该分片相对于原始数据报开始处位置的偏移量
  • TTL(Time to Live生存时间)
    • 该字段用于表示IP数据包的生命周期,能够防止一个数据包在网络中无限循环地发下去。TTL的意思是一个数据包在被丢弃以前在网络中的最大周转时间。该数据包通过的每个路由器都会检查该字段中的值,当TTL的值为0时此数据包会被丢弃。TTL对应于一个数据包经过路由器的数目,一个数据包每通过一个路由器,TTL将减去1。
  • 协议号
    • 用以指示IP数据包中封装的是哪一个协议
  • 首部校验和
    • 检验和是16位的错误检测字段。目的主机和网络中的每一个网关都要从新计算报头的校验和,同样表示没有改动过。
  • 源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地址。 经过这种层层打包的方式,最后由物理层传递出去,再有路由器,代理服务器等设备,交给目标计算机。 目标计算机获得传递过来的数据后,从物理层向上传递,每一层会将该层对应协议负责的首部摘除后再传给上层。最后抵达应用层对应的某个应用程序。

相关文章
相关标签/搜索