它是目前全球互联网工作的基础,该架构将网络功能从上至下划分为:
TCP/IP网络架构采用自顶而下的分层结构,每一层都需要下一层所提供的服务来满足自己的需求,本层协议生成的数据封装在下一层协议的数据中进行传输,因此各层间的协议有依赖关系。
即最高层,提供面向用户的网络服务,负责应用程序之间的沟通,主要协议有简单邮件传输协议(SMTP)、文件传输协议(FTP)、超文本传输协议(HTTP)、域名系统(DNS)、网络远程访问协议(Telnet)等。
Socket支持多个应用程序间基本的消息传递功能,通过遵循应用层上的某一种或几种协议的规范,使应用程序完成用户需要的相应功能,这是本书网络应用程序开发的目的。
位于第3层,完成多台主机间的通信,提供节点间的数据传送及应用程序间的通信服务,也称为“端到端”通信,通过在通信的实体间建立一条逻辑链路,屏蔽了IP层的路由选择和物理网络细节。
传输层的功能主要是数据格式化、数据确认及丢失重传等。该层协议有传输控制协议(TCP)和用户数据报协议(UDP),提供不同的通信质量和需求的服务。
位于第2层,也称为网络互联层或Internet层,由于该层最重要的协议是IP协议,所以也称为IP层。该层负责提供基本的数据封包传送功能,在它上面传输的数据单元叫IP数据报,或IP分组。
网际层让每个IP数据报都能够到达目的主机,但是它不检查数据报是否被正确接收。
网络层的本质是使用IP将各种不同的物理网络互联,组成一个传输IP数据报的虚拟网络,实现不同网络的互联功能,该层协议除了IP协议外,还有Internet控制报文协议(ICMP)和Internet组管理协议(IGMP)。
该层位于协议架构的最底层,负责接收IP数据报并发送到其下的物理网络,或从网络上接收物理帧,抽取IP数据报转交给网际层。这里的物理网络指各种实际传输数据的局域网或广域网。
Author: 柳大·Poechant(钟超)Email: zhongchao.ustc@gmail.comBlog: Blog.CSDN.net/PoechantDate: April 21th, 20121 TCPServer 框架概述POCO 库提供TCPServer框架,用以搭建自定义的 TCP 服务器。TCPServer维护一个连接队列、一个连接线程池。连接线程用于处理连接,连接线程只要一空闲就不断地从连接队列中取连接并进行处理。一旦连接线程从连接队列中取到一个连接,就会创建一个TCPServerConnection连接对象,并且调用该对象的start()方法,直到start()方法返回,这个连接对象就被删除了。连接线程的数量是动态的,其取决于连接队列中排队的连接数。当然,你使用的时候可以设定连接队列的最大容量,以防止在高并发应用的服务器上出现连接太多而使连接队列溢出的悲剧发生。当连接队列满了,却还有新的连接到来时,新来的连接就会被立即悄无声息地关闭。// PoechantTCPConnection.h #ifndef POECHANT_TCP_CONNECTION_H #define POECHANT_TCP_CONNECTION_H #include "Poco/Net/TCPServerConnection.h" #include "Poco/Net/StreamSocket.h" #include <string>class PoechantTCPConnection: public TCPServerConnection { public: PoechantTCPConnection(const StreamSocket&s, const std::string&arg1, int arg2, double arg3)void run()private: std::string _arg1int _arg2double _arg3}#endif 实现如下:// PoechantTCPConnection.cpp #include "PoechantTCPConnection.h" #include "Poco/Util/Application" #include "Poco/Timestamp.h" #include "Poco/Exception.h" #include "Poco/DateTimeFormatter.h" PoechantTCPConnection(const StreamSocket&s, const std::string&arg1, int arg2, double arg3): TCPServerConnection(s), _arg1(arg1), _arg2(arg2), _arg3(arg3) { } void run() { Application&app = Application::instance()// 日志输出连接的TCP用户的地址(IP和端口) app.logger().information("Request from " + this->socket().peerAddress().toString())try { // 向客户端发送数据,这里以发送一个表示时间的字符串为例 Timestamp nowstd::string dt(DateTimeFormatter::format(now, _format))dt.append("\r\n")socket().sendBytes(dt.data(), (int) dt.length())} catch (Poco::Exception&e) { app.logger().log(e)} } 2.3 PoechantTCPConnectionFactory工厂模式不必多说,名字唬人,其实非常非常简单(准确的说设计模式大部分名字都唬人,但大部分都很有用,设计模式本身并不牛B,能把设计模式抽象提炼出来成我们现在认为很简单的这些模式的那几个人很牛B)。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)