网络协议族精讲--良心总结

协议族精讲

各种协议

OSI七层模型中:最底下两层根据计算机的设备驱动程序和网络硬件而定,有时候把最上面的三层合并成一层,统称为应用层。应用层也就是我们常用的Web服务器、FTP服务器所在的层次。

TCP/IP协议族四层模型:各层级之间通过接口和服务进行连接,上层协议使用下层协议的服务,下层协议给上层协议提供一个接口。

各个协议层的作用:

最底层:数据链路层qq发送一句话,通过数据链路层的封装进入物理网络,它主要实现了网卡接口的网络驱动程序,用来处理数据在物理媒介上的传输,常见的物理媒介有以太网和令牌环,网络驱动程序隐藏了物理网络具有的不同电击特性,为上层协议提供一个统一的接口,我们常见的交换机就是数据链路层的硬件设备。


 

数据链路层之上是网络层:或者称为IP层,他主要实现数据报道选路和转发,处理分组在网络中的活动,就是为每一个数据报在复杂的网络中选择一条准确快捷的道路,一般来说,两台通讯的机器都是通过很多中间节点,比如用QQ与远方的朋友聊天,两台机器之间就有很多个中间节点,网络层的任务就是选择这些中间节点,给这两台机器选择一条合适的通讯道路,意味着网络层它的通讯方式是逐跳进行,同时网络层为上层协议隐藏了网络top连接的细节,即在传输层和应用层来看,通信的两台机器是直接相连的,我们的使用的路由器就是工作在网络层。

网络层的上一层就是传输层:传输层给两台机器上的应用程序去提供了端到端的通讯,在通讯方式这一点上传输层和网络层是有所不同的,传输层只关心传输的起始段和末尾端,不在乎数据包的中转过程,垂直的实线头表示tcp/ip协议栈中各层之间的实体通讯,水平的虚线头表示逻辑通讯线路。

协议栈的最上层是应用层:它主要负责应用层的逻辑,比如文件传输,名称查询,网络管理等功能,总体来说,它内部网路的驱动程序封装了物理网络的电击细节,网络层又封装了网络连接的细节,传输层它给应用程序提供了一个端到端的通讯逻辑线路,主要完成进行数据的分发,超支,重传这些任务,tcp/ip协议栈中除应用层之外的其它层都在内核空间,用户在应用层使用下层提供的服务来完成应用程序的功能,最终达到网络通信的目的。

四层模型中相应的协议:

数据链路层存在的协议,ARP协议(地址解析协议)和RARP协议(逆地址解析协议)它们俩实现了IP地址及其物理地址的转换,在网络层中使用IP地址来寻找这台机器,但是到了数据链路层就必须使用物理地址来寻找这台机器,所以,网络层必须先目标及其的IP地址转换成物理地址,才能使用数据链路层提供的服务,就是ARP协议的用途。

网络层中最核心的协议是IP协议IP协议根据数据包的目的IP地址来决定如何投递数据包,如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳路由器,并把和数据包交给路由器进行转发,就这样一直重复,直到到达目标端或者由于发送失败丢弃这个数据包。

网络层的另外一个重要的协议是ICMP协议:也就是因特网控制包文协议,它是IP协议的重要补充,主要用于检测网络连接。

传输层的主要协议主要有三个:

TCP协议:传输控制协议,它为应用层提供了可靠的、面向连接的、基于流的的服务,说明了它的三大特点,可靠性指:应用层会准确无误的把数据发送到目标端,面向连接是指:使用TCP协议的双方必须建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接的状态,读写缓冲机,还有很多相关的定时器,当通信结束时,双方必须关闭连接来释放这些内核数据结构,TCP协议是基于流的,基于流的服务也就意味着数据的传输没有边界,也就是说发送端可以逐个字节对象向数据流写入数据,接受端也可以逐个字节的读出数据,TCP协议流式传输的思想,相当于自来水,数据相当于自来水,应用程序接收数据的过程相当于水龙头接水的过程,应用程序中的接收缓冲区相当于接水的容器,而水龙头连接的水塔相当于内核缓冲区。

UDP协议TCP协议完全相反,不可靠,无连接的,基于数据包的服务,不可靠意味着UDP协议,无法保证数据从发送端正确的发送到目标端,只能尽力而为,如果数据在中途丢失,或者目标端通过数据校验发现数据错误而丢弃,那么UDP协议它只是简单的通知应用程序发送失败,所以要想使用UDP协议的应用程序需要自己处理数据确认,超时重传,UDP协议是无连接的,也就是说通信的双方不保持一个长久的连接,所以应用程序每次发送数据都要指明接受端的地址,UDP服务是基于数据包的服务,每个UDP数据包都有一个长度,接收端必须以该长度的最小单位将其从内存中一次性读出,否则数据就会被截断。

传输层最后一个重要协议是SCTP协议:即流控制传输协议,是一种相对比较新的传输层协议,它是为了因特网上传输电话信号而设计的。

协议栈的最上层是应用层:常见的有OSPF协议,即开放最短路径优先协议,它是一种路由器更新协议,主要用于路由器之间的通信来告知对方各自的路由信息。

DNS协议:它提供了机器域名到IP地址的转换。

Telnet协议:是一种远程登录协议,应用层协议可以跳过传输层直接使用网络层提供的服务,比如ping命令和OSPF协议,应用层协议既可以使用TCP服务又可以使用UDP服务。

数据的封装和分用


 

实例演示通信的流程:例如在qq对话框中输入一句话,然后点击发送,这句话就成为应用程序的数据,应用程序的数据在发送到物理网络之前,将沿着协议站从上往下依次传递,每层协议都在上层数据的基础上加上自己的头部信息,有时也有自己的尾部信息,这样就实现了自己的功能,这个过程就称为封装。应用程序的数据先经过传输层的封装,我们把经过TCP协议封装过的数据称为TCP报文段或者TCP段,经过UDP协议封装过的数据称为UDP报,再向下经过IP协议的封装,称为IP数据报,包括头部部分和数据部分,数据部分就是一个UDP报文段。等到数据到了最下层,到了数据链路层的封装后,称为帧,数据链路层的传输媒介有多种,传输的媒介不同,帧的类型也不同,在以太网上传播的叫以太帧,而令牌网上传播的就叫令牌环帧,经过协议栈的层层封装,帧才是最终传输在物理媒介上的数据格式,讲到这里应用数据到传输媒介上的传输过程就结束了。

 

 

TCP报文段传输过程

TCP协议为通信的双方维护一个连接,并且在内核中存储相关的数据,这部分数据中的TCP头部信息和TCP内核缓冲数据一起构成了TCP报文段,当发送端应用程序使用send函数向一个TCP连接写入数据时,内核中的TCP模块首先把这数据复制到与该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务在传输层封装的整个TCP报文段就是IP模块的数据。UDP对应用程序数据的封装与TCP不同,它没必要为应用层的数据保存副本,因为它提供的服务本来就是不可靠的,当一个UDP报被成功发送后,UDP内核缓冲区的数据就会被丢弃,如果应用程序检测到这个数据报被正确接受并且打算重新发送这个数据报,那么应用程序需要重新从用户空间把数据拷贝到UDP内核发送缓冲区中,这也是UDP传输数据不可靠的地方。

最大传输单元

在链路层传输的数据包称为帧,帧的最大传输单元称为MTU.以太网帧的MTU1500字节,而令牌环帧的MTU1492字节。超过MTUIP数据报就会被分片。

以太网帧的格式:

 

以太网帧起始部分有前导码和帧开始符组成,后面紧跟着目的MAC地址和源MAC地址,因为数据链路层的数据是依靠mac地址来寻找这台机器的,这也是这两个MAC地址存在的原因,帧的负载部分用来包含其它协议封装后的数据,比如IP数据报,紧挨着负载部分的是一个32位冗余校验码,它用于检验数据传输是否出现损坏,同时当一个以太网帧发送出去之后,发送方在下次发送帧之前还需要一个12位的空闲链路状态码,也就是尾部的帧间距,我们提到的qq对话框中准备发送数据的那句话经过协议栈的层层封装,最终被封装成以太网帧的格式被发送到物理网络上,讲到这里发送方应用程序中的数据被TCP协议栈封装的过程就介绍结束了.

数据的分用过程:


 

我们用qq发送的那句话通过物理网络传输给对方之后怎么被分离出来的呢?

以太网帧经过长途跋涉到达了目标机器,首先进入目标机器的数据链路层被以太网的驱动程序识别,然后,沿着协议栈自底而上依次传递,各层协议依次处理帧中本层负责的头部数据来获取所需要的信息并且处理最终处理后的帧交给目标应用程序,也就是说发送的那句话最终显示到对方的对话框中,整个过程就是分用,分用的过程靠头部信息中类型字段实现的,因为IP协议,ARP协议和RARP协议都使用帧来传输数据,所以帧头就必须有字段来区分它们,在前面提到的以太网帧结构中有两个字节的类型字段,根据这个字段的内容,以太网的驱动程序来决定数据交付给哪个模块,在网络层也是相似的情况,因为ICMP协议、TCP协议、UDP协议都是使用IP协议,所以IP数据报头部才有16位协议字段来区分它们。等到数据到了传输层TCP报文段和UDP数据报通过其头部的16位端口号来区分上层应用程序,比如DNS协议对应的端口号为53HTTP协议对应的端口号为80,就这样帧经过复用后最终将封装前的原始数据送达到目标服务,这样对于应用程序而言,封装和分用似乎没有发生过。

数据链路层ARP协议的工作原理:


ARP:地址解析协议,能实现任意网络地址到任意物理地址的转换。

它的工作方式是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,同时网络上其它机器都将收到这个请求,但只有被请求的目标机器会回复一个ARP应答,其中包含了自己的物理地址,这就是ARP协议的工作原理。

 

ARP报文大小为28个字节,其中第一个字段为硬件类型字段,它定义物理地址的类型,如果值为1,表示MAC地址,紧接着协议类型字段,表示映射的协议地址类型,它的值为0x80,表示IP地址,硬件地址长度字段和协议地址长度字段单位都是一个字节,对于MAC地址来说,长度为6个字节,对于IP地址来说长度是4个字节,两个字节的操作字段正好指出4种操作类型,其中ARP请求值为1IP应答值为2RARP请求值为3RARP应答值为4,最后4个字段指定通信双方的以太网地址和IP地址,发送端填充除目的端以太网地址的其它三个字段,以构成ARP请求报文,并发送这个报文,接收端发现该请求的目的IP地址是自己,就把自己的以太网地址填充进去,然后交换两个目的端地址和两个发送端地址以构成ARP应答并返回,如果ARP请求和应答报文再加上以太网头部和尾部18个字节,携带ARP请求的以太网帧长度为46个字节,不过有的实践要求以太网帧数据部分的携带至少为46个字节,这个时候ARP请求由应答报文必须填充一些字节满足这个要求,经过填充后携带ARP请求报文的以太网长度为46个字节。

DNS协议的工作原理:

作用:DNS协议用于将机器的域名转换成IP地址这一过程。是一种用于TCP/IP应用程序的分布式数据库,每个DNS服务器上都存放着大量的机器域名和IP地址的映射并且都是动态更新的,很多网络客户端都使用DNS协议来访问DNS服务器查询目标主机的IP地址。

它的工作原理是:

其实对于DNS的访问是通过一个地址解析器来完成的,解析器通过一个或者多个名字服务器来完成这种相互转换,当一个应用程序请求TCP打开一个连接或使用一个UDP发送一个数据报之前必须将一个主机名转换成一个IP地址,其中操作系统内核中的TCP协议栈对DNS一点都不知道,我们在应用程序中可以使用系统调用函数来查询域名对应的IP地址,不过有一点我们必须清楚,DNS服务的端口号是53.

DNS查询和应答报文的格式:

 

第一个字段16位标识字段:用于标记对DNS的查询和应答,以此区分一个DNS应答是属于哪个DNS查询的回应。

第二个字段是16位标志字段:用于协商具体的通信方式和反馈通信状态,DNS报文头部的16位标志字段的细节:如下图

 

DNS报文头部的16位字段:

QR:查询应答标志,如果是0表示这是一个查询报文,如果是1表示这是一个应答报文。

Opcode:定义了查询和应答的类型,0表示标准查询,1表示反向查询,2表示服务器请求状态。
AA:授权应答标志,仅属于应答报文使用,1表示域名服务器是授权服务器

TC:截段标志,只有当DNS报文使用utv服务时,才使用这个字段,因为utv数据报有长度限制,所以过长的DNS数据报文就会被截断,1表示DNS报文超过512字节,出现这种情况,就会被截断。

RD字段:递归查询标志,1表示执行递归查询,也就是说,如果目标DNS服务器无法解析某一个主机名,那么它将其它DNS服务器继续查询,如此递归,直到获得结果,把该结果返回给客户端,如果是0表示迭代查询,即如果目标DNS服务器无法解析某个主机名,那么它将自己知道的其它DNS服务器的IP地址返回给客户端。

RA:允许递归标志,它仅供应答报文使用,1表示DNS服务器支持递归查询。、

ZERO:到目前还未被使用,设置成0.

Rcode:4位的返回码,表示应答的状态。0表示无错误。3表示域名不存在。

对于查询报文而言:

16位问题个数为1.

16位应答资源路径个数、授权资源记录数、额外资源记录数为都是为0.同时,应答报文的应答资源记录数至少为1,授权资源记录数和额外信息资源记录数可以为0或者非0.

查询问题字段:

 

查询名以一定的格式封装了要查询的主机域名,其中16位的查询类型表示如何执行查询操作,常见的类型有以下几种,如果查询类型值为1,表示获取目标主机的IP地址,如值为5,表示获取目标主机的别名,如值为12,表示反向查询,其中16位的查询类通常为1,表示获取因特网地址,即IP地址。

资源记录格式:

 

32位域名:是该记录中与资源对应的名字,其格式和查询问题中的查询名字相同。16位类型和16位类字段含义也与DNS查询问题的对应字段相同

32位生存时间:表示该查询记录结果被本地客户端程序缓存多长时间,单位为秒。

16位的资源数据长度字段和资源数据字段的内容取决于类型字段。

HTTP的历史

超文本传输协议,是一种通信协议,它允许将超文本标记语言(HTML,文档从Web服务器传送到客户端浏览器。

 

 

TCP/IP协议

 

IP/TCP/DNS/HTTP的关系:

 

 

 

 

 

UriURL

 

 

 

URI详解

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhwadezh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值