一、标准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报头 | 数据 |
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函数 |