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

TCP/IP协议族

TCP/IP网络协议栈分为应用层(Application)、传输层( Transport)、网络层(Network)和链路层(Link)四层。

技术分享


技术分享


1.数据链路层

实现了网卡接口的网络驱动程序。

协议:ARP协议和RARP协议

ARP协议:目标机器IP地址—(ARP协议)→ 目标机器MAC地址→ 目标机器

RARP协议:(无盘工作站)MAC地址—(RARP协议)→IP地址



2.网络层

实现数据包的选路和转发。负责点对点(point to point)的传输(“点”:主机或路由器)。网络层向上层协议隐藏了网络拓扑连接的细节,在传输层和应用层看来通信双方是直接相连的。

协议:IP协议,ICMP协议。

IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发给目的主机,那么IP协议就为它寻找合适的下一跳路由器,并将数据包交付给该路由器来转发。IP协议使用逐跳的方式确定通信路径。

ICMP协议是IP协议重要的补充,用于检测网络连接。



3.传输层

传输层为两台主机上的应用程序提供端到端(end to end)的通信。传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。

协议:TCP协议、UDP协议、SCTP协议

TCP协议


为应用层提供可靠的、面向连接和基于流(stream)的服务;

TCP协议使用超时重传、数据确定等方式确认数据报被正确地发送至目的端使用TCP协议通信的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构。通信结束时,双方必须关闭连接以释放这些内核数据。TCP协议是基于流的,数据没有边界(长度)限制。发送端可以逐个字节地向数据流中写入数据,接收端也可以逐个字节将其读出

UDP协议


为应用层提供不可靠、无连接、基于数据报的服务。

UPD协议无法保证数据从发送端正确地传到目的端。使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑。UDP协议是无连接的,因此应用程序每次发送数据都要明确指定接收端的地址(IP地址等信息)。每个UPD数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据将被截断。


TCP是一种面向连接的,开放的协议,有点像打电话,双方拿起电话互通身份后就建立了连接,然后说话就行了,这边说话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。

UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放进邮筒里,既不能保证信件在邮递过程中不会丢失, 也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。


SCTP协议是为了在因特网上传输电话信号而设计的。



4.应用层

负责处理应用程序的逻辑

应用层协议(或程序)可能跳过传输层直接使用网络层提供的服务,比如ping程序和OSPF协议。

应用层协议(或程序)通常既可以使用TCP服务,又可以使用UDP服务,比如DNS协议。



TCP/IP数据包的封装

技术分享



技术分享

以太网帧使用6字节(48位)的目的物理地址和6字节(48位)的源物理地址(MAC地址)来表示通信的双方。

协议类型字段有三种值,分别对应IP、ARP、RAPP。

以太网帧的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补充填位。最大值1500称为以太网最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包的长度大于拨号链路的MTU,则需要对数据包进行分片(fragment)传输。

帧末尾的4字节CRC字段对帧的其他部分提供循环冗余校验。


帧才是最终在网络上传送的字节序列。



TCP/IP数据包跨路由器通讯过程

技术分享

数据链路层(驱动程序)封装了物理网络的电气细节;

网络层封装了网络连接的细节;

传输层则为应用程序封装了一条端对端的逻辑通信链路,它负责数据的收发、链路的超时重连等。



分用

 当帧到达目的主机时 ,将沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并将处理后的帧交给目的应用程序。这个过程称为分用( demultiplexing)。

分用是依靠头部信息中的类型字段实现的。

技术分享


整理自《Linux高性能服务器编程》第1章,《Linux C一站式学习》第36章


本文出自 “zgw285763054” 博客,请务必保留此出处http://zgw285763054.blog.51cto.com/11591804/1854152

TCP/IP协议族