【HTTP基础】HTTP协议详解之TCP/IP协议蔟

TCP/IP协议蔟分为4层结构,分别是应用层、传输层、网络层和数据链路层,每一层都由特定的协议与对方进行通讯,在进行数据通讯时,发送端的数据从应用层往数据链路层方向流动,接收端的数据从数据链路层往应用层流动。缓存

数据链路层

数据链路层的主要工做是对电信号进行分组并造成具备特定意义的数据帧,而后以广播的形式经过物流介质发送给接受方,数据链路层处理数据的协议是以太网协议,它将传输的数据分组封装成数据帧,每一个数据帧由首部、数据和尾部三部分组成,首部包含目标MAC地址、源MAC地址和类型,尾部为数据帧校验序列,用于肯定数据包在传输过程当中是否损坏。数据传输采用广播形式,把数据包发送给该子网内的全部主机,子网内每台主机接收到这个包之后,都会读取首部里的目标MAC地址,而后和本身的MAC地址进行比对,若是相同则进行下一步处理,若是不一样,则丢弃这个包。网络

网络层

对于上面的过程,有几个细节值得咱们思考:spa

  1. 发送者如何知道接受者的MAC地址?
  2. 发送者如何知道接受者和本身同属一个子网?
  3. 若是接受者和本身不在同一个子网,数据包如何发送给对方?

网络层有以下几个协议:图片

IP协议:MAC地址只与厂商有关,与所处的网络无关,因此没法经过MAC地址来判断两台主机是否属于同一个子网,所以,网络层引入IP协议,制定了一套新地址,用于区分两台主机是否同属于一个网络,这套地址就是网络地址-IP地址。路由

ARP协议:地址解析协议,根据IP地址获取MAC地址。ARP首先发起一个请求数据包,数据包的首部包含了目标主机的IP地址,数据包在链路层被封装成数据帧并在子网内广播,每一台主机都会接受到这个数据包,并取出目标IP地址,并与本身的IP地址进行比较,若是相同就返回本身的MAC地址,ARP接收返回消息,以此肯定目标机的MAC地址,与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存并保留一段时间。同步

路由协议:经过ARP协议的工做原理能够发现,ARP的MAC寻址仍是局限在同一个子网中,所以网络层引入路由协议,首先经过IP协议判断两台主机是否在同一个子网中,若是在,经过ARP协议查询对应的MAC地址,而后以广播形式向该子网内的主机发送数据包,若是不在,以太网会将数据包转发给本子网的网关进行路由,网关是子网与子网间的桥梁,通过网关的屡次转发,最终将数据包转发到目标IP所在的子网,而后再经过ARP协议获取MAC地址。完成这个路由协议的设备就是路由器。it

在网络层被包装的数据包就叫IP数据包,IP数据包由首部和数据两部分组成,首部包含目标IP地址和源IP地址,网络层的主要工做是定义网络地址,区分网段,子网内MAC寻址,对不一样子网的数据进行路由。class

传输层

链路层定义了MAC地址,网络层定义了IP地址,有了这两个地址,数据就能从一个主机发送到另外一个主机,可是数据其实是从一个主机上的某个应用程序发出,当数据包被接收后,也没法肯定哪一个应用程序要接收这个数据包。原理

所以传输层引入UDP协议来解决这个问题,UDP定义了端口号,同一个主机的每个应用程序都须要指定惟一的端口号,而且在传输数据时在数据上加上端口信息,UDP定义的数据包叫作UDP数据包。UDP数据包由首部和数据两部分组成,首部包括源端口和目标端口。ftp

UDP协议比较简单,实现容易,可是没有确认机制,可靠性较差,为了解决这个问题,TCP协议就被引入,TCP协议是一种面向链接的、可靠地、基于字节流的通讯协议。TCP协议每发出一个数据包都要求确认,若是数据包丢失,收不到确认信息,发送发就必须重发这个数据包。

TCP协议

TCP为了保证传输的可靠性,在正式收发数据前,必须和对方创建可靠的链接。由此才有TCP的三次握手机制。下面是TCP三次握手过程当中使用到的几个名词:

  • 序列号seq:是TCP报文段的第一个字节的数据编号,其中第一个TCP报文段的第一个字节编号由本地随机产生。
  • 确认号ack:期待收到对方下一个报文段的序列号,所以确认号为序列号+1。
  • 确认ACK:ACK=1表示确认号字段有效,ACK=0确认号无效。
  • 同步SYN:SYN这个标志在TCP创建链接时才会被置为1,握手完成被置为0。
  • 终止FIN:FIN=1表示发送数据已发送完毕,要求释放链接。

主机A向主机B请求创建TCP链接,其TCP的三次握手过程以下:

  1. 主机A向主机B发送TCP链接请求数据包,SYN=1,seq=x。
  2. 主机B向主机A发送链接确认数据包,SYN=1,ACK=1,seq=y,ack=x+1。
  3. 主机A向主机B发送再次确认数据包,ACK=1,seq=x+1,ack=y+1。

图片描述
主机A主机B的TCP连接断开,其TCP的四次挥手过程以下:

因为TCP链接时双全工的(即数据能够在两个方向上同时传递),因此进行关闭时每一个方向都要单独进行关闭,这个单方向的关闭就叫半关闭,当一方完成它的数据发送任务,就发送一个FIN来向另外一方通告将要终止这个方向的链接。

  1. A确认发送完数据后,想要关闭链接,发送FIN给B。
  2. B收到A发送的FIN,发送ACK回复。
  3. 但这时B可能还在发送数据,因此没有想要关闭链接的意思,因此FIN和ACK不是同时发送的,等B数据发送完毕后,才会发送ACK=1,FIN=1。
  4. A收到B发来的FIN,回复ACK=1,A等待2MSL之后,没有收到B传来的任何消息,知道B已经收到本身的确认消息ACK,A就关闭连接。

在A发送最后的ACK回复时,该ACK可能丢失,B若是没有收到ACK,将不断重复发送FIN片断,因此A不能当即关闭,它必须确认B接收到该ACK并关闭后,在2MSL内没有收到FIN,才会进行关闭。MSL指一个报文段在网络中的最大存活时间。
图片描述

传输层的主要工做内容是定义端口,标识应用程序身份,实现端口到端口的通讯,TCP协议保证数据传输的可靠性。

应用层

理论上来说,有了以上三层协议的支持,数据已经能够从一个主机的应用程序传输到另外一台主机的应用程序上了,可是传输过来的数据是字节流,不能被程序识别,所以应用层定义了各类各样的协议来规范数据格式,常见的有http、ftp等。应用层的主要工做就是定义数据格式并按照对应的格式解读数据。

TCP/IP协议蔟

  • 链路层:对数据进行分组,定义数据帧,确认主机的物理地址,传输数据。
  • 网络层:定义IP地址,确认主机所在的网络位置,并经过IP进行MAC寻址,对外网数据包进行路由转发。
  • 传输层:定义端口号,确认主机上应用程序的身份,并将数据包交给对应的应用程序。
  • 应用层:定义数据格式,并按照对应的格式解读数据。

当输入一个网址并按下回车键的时候,首先,应用层协议对该请求包作了格式定义,紧接着传输层协议加上了双发的端口号,确认双发通讯的应用程序,而后网络层的IP协议加上了双方的IP地址,确认双发的网络位置,最后链路层协议加上双发的MAC地址,确认双发的物理位置,同时将数据进行分组,造成数据帧,采用广播方式,经过传输介质发送给对方主机,而对于不一样子网,该数据包首先会转发给网关路由器,通过屡次转发后,最终被发送到目标主机,目标主机接收到数据包后,采用对应的协议,对帧数据进行组装,而后一层一层的协议进行解析,最终被应用层的协议解析。

相关文章
相关标签/搜索