首页 > 代码库 > TCP/IP协议族

TCP/IP协议族

第一章      TCP/IP协议族

1.1 TCP/IP协议族体系结构以及主要协议


1.1.1数据链路层

         数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。

         数据链路层两个常用的协议是ARP(AddressResolve Protocol,地址解析协议)和RARP(Reverse Address Resolve Protocol,逆地址解析协议)。他们实现了IP地址和机器物理地址之间的相互转换。

         网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务,这就是ARP的用途。RARP协议仅用于网络上某些无盘工作站。因为却反存储设备,无盘工作站无法机制自己的IP地址,但他们可以利用网卡上的物理地址来向网络管理者查询自身的IP地址。运行RARP服务的网络管理者通常存有该网络上所以机器的物理地址到IP地址的映射。

1.1.2网络层

        网络层实现数据报的选路和转发。网络层的任务是选择路由器等中间节点,以确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信双方是直接相连的。

        网络层最核心的协议是IP协议(因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它,IP协议使用逐跳(hop byhop)的方式确定路径。

        网络层另外一个重要协议是ICMP(InternrtControl Message Protocol,因特网控制报文协议),主要用来检查网络连接。ICMP报文分为两类:一类是差错报文,用来回应网络错误,另一类是查询报文,用来查询网络信息。ping程序就是使用ICMP报文查看目标报文是否可达。


         如所示,8位类型字段用于区分报文类型,代码字段用于进一步细分不同条件。使用16为校验和对整个报文进行循环冗余校验(Cyclic Redundancy Check,CRC)。

1.1.3传输层

        传输层为两台主机的应用程序提供端到端的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端。

        传输层负责数据的收发、链路的超时重发等功能。

        传输层主要有三个协议:TCP协议、UDP协议和SCTP协议

        TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流的服务。

        UDP协议(User Datagram Protocol,用户数据报文)为应用层提供不可靠、无连接和基于数据报的服务。

       SCTP协议(Stream Control Trasmission Protocol,流控制协议)是为了在因特网上传输电话信号而设计的。

1.1.4应用层

        应用层负责应用程序的逻辑。上面三层协议系统负责处理网络通信细节,这部分必须稳定又高效,因此在内核中实现。而应用层则在用户空间实现。

        应用层协议很多,举例如下:

        ping是应用层序,而不是协议:利用ICMP报文检测网络连接

        telnet协议是一种远程登录协议

        OSPF(OpenShortest Path First开放最短路径优先)协议提供一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息。

       DNS(Domain NameService 域名服务)协议提供机器域名到IP地址的转换。

       应用层协议可能跳过传输层直接使用网络层提供的服务,如ping和OSPF协议。通常既可以使用TCP服务,又可以使用UDP服务,比如DNS协议。

       我们可以通过/etc/services文件查看所有知名的应用层协议。

1.2封装

        上层协议通过分装使用下层提供的服务。应用程序数据在发送到物理网路之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时包括尾部),以实现该层的功能,这个过程就是封装。


        经过TCP封装后的数据成为TCP报文段,经过UDP封装后的数据成为UDP数据报,它们UDP无须为应用层保存副本,因为它提供的服务不可靠。当一个UDP数据报被成功发送之后,UDP内核缓冲区中的该数据就被丢弃,如果应用层序检测到该数据报未能被接收端正接收,并打算重发这个数据报,则应用层序需要重新从用户空间将该数据报拷贝到UDP内核发送缓冲区。而发送TCP报文,会在TCO缓冲区中保存副本。

经过IP封装后的数据成为IP数据报,也包括头部信息和数据部分。其中数据部分就是TCP报文段、UDP数据报或者ICMP报文。

         经过数据链路封装后的数据成为帧。


        帧的最大传输单元(MaxTransimit Unit, MTU),即帧最多能携带多少上层数据,通常受网络限制,以太网的MTU是1500字节。帧才是最终在物理网络上传送的字节序列。

利用ifconfig命令可以查看MTU值,还可以显示或配置网络设备(网络接口卡)。

1.3分用

        当帧达到目的主机时,将沿着协议栈向上一次传递。各层协议一次处理帧中本层负责的头部数据,以获取所需信息,并将最终处理后的帧交给目标应用程序,这个过程叫做分用。分用是依靠头部信息中的类型字段实现的。

        帧提供的头部信息中的类型字段用于区分IP,ARP,RARP。其中IP字段值为0x800,ARP为0x806,RARP为0x835。

        同样IP数据报的头部采用16为协议字段区分ICMO,TCP,UDP。

        TCP和UDP则通过头部中的16为端口号区分上次应用程序,比如DNS端口号为53,HTTP为80。所以知名应用层协议使用的端口号都可以在/etc/services中找到。



转载请注明出处,谢谢~~