标准TCP/IP协议栈模型

来源:互联网 发布:java apt 废弃 编辑:程序博客网 时间:2024/06/08 01:26

一、标准tcp/ip协议栈模型

      标准TCP/IP协议是用于计算机通信的一组协议,通常被称为TCP/IP协议栈,以它为基础组建的互联网是目前国际上规模最大的计算机网络。

TCP/IP协议栈是一组协议,包括TCP、Ip、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP和TFTP等多种协议,模型如图应用层传输层网络层网络接口层

(1)网络接口层:模型的基层,负责数据帧发送和传输,网络接口层将帧格式的数据放到网络上,或从网络上把数据帧取下来。这是最接近硬件的底层

(2)网络层:通过互联协议将数据包封装成互联网数据包(IP packet),并运行必要的路由算法。这里有四种互联协议。

网际协议:负责在主机和网络之间的路径寻址和数据包路由。

地址解析协议ARP:获得同一物理网络中的主机硬件地址。

网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。

互联组管理协议IGMP:用来实现本地多路广播路由器报告。

(3)传输层:传输协议在主机之间提供通信回话。传输协议的选择根据数据传输方式而定。主要有TCP(为应用程序提供可靠的通信连接,使用于一次传输大批数据的情况,并适用于要求得到响应的应用程序)和UDP(提供无连接通信,且不对传送包进行可靠性确认。适用于一次传输小量数据的情况,可靠性则由应用层确认)

(4)应用层:应用程序通过这一层访问网络 常见的FTP、HTTP、DNS和TELNET协议。

在TCP/IP协议模型的四层协议当中,各层数据包封装情况如图。发送数据时,将数据从最上层到最下层依次打包(加上报头和部分尾部信息);在接收数据时,则将数据从最下层到最上层依次拆包(去掉报头和部分尾部信息)这些打包和拆包操作就是TCP/IP协议栈完成。

MAC报头IP报头TCP报头数据二、BSD面向连接的TCP通信编程

TCP/IP协议为上层应用程序提供了同意的BSD Socket编程接口。进行上层应用时只需调用BSD Socket接口提供的函数即可。

图为面向连接的Socket通信的双方执行函数流程。使用TCP协议的通信双方实现数据通信的基本流程如下


建立连接的步骤:

1、首先服务器端需要以下工作:

(1)调用socket()函数,建立Socket对象,指定通信协议。

(2)调用bind()函数,将创建的Socket对象与当前主机的某一个IP地址和TCP端口绑定。

(3)调用listen()函数。使Socket对象处于监听状态,并设置监听队列大小。

2、客户端的准备工作:

(1)调用socket函数,建立Socket对象,指定与服务器端相同的通信协议。

(2)应用程序可以调用bind()函数为其绑定IP地址和端口,此工作也可交给TCP/IP完成。

3、建立通信连接

(1)客户端调用connect()函数,向服务器端发出连接请求。

(2)服务端监听到该请求,调用accept()函数接受请求,建立连接,并返回一个新的Socket文件描述符以专门处理该连接。

4、通信双方发送/接收数据

(1)服务器端和客户端分别调用write()或send()函数发送数据read或recv函数接收数据。

(2)通信完成后,通信双方都需要调用close或shutdown来关闭Socket。

   

协议处理流程





三、轻量级TCP/IP协议和标准TCP/IP比较


比较对象轻量级TCP/IP标准TCP/IP底层系统直接面对硬件,实时性高脱离底层硬件,分时为基础考虑整体效率缓冲区静态空间分配,申请固定缓冲区,收到一个数据包后随即处理一个数据包不需要考虑内存大小,采取动态分配和静态分配结合IP层可以不考虑IP数据包的路由功能,也可不实现IP数据包的分片和 重装实现完成的路由、分片、重组等功能TCP层每次只缓冲和发送一个数据包,可以不实现滑动窗口协议、流量控制和拥塞控制、往返时间估计、超时重发实现滑动窗口协议、流量控制和拥塞控制、往返时间估计、超时重发等所有功能接口可以直接使用TCP/IP协议提供的通信服务函数作为接口库函数形式实现,应用程序可以通过直接调用这些函数实现网络通信作为操作系统的一部分实现,需要遵循BSD Socket规范,实现BSD函数