Internet使用的主要通信模型是TCP/IP模型,该模型采用分层的方法,每一层由若干个协议实现该层的功能,同时下层为上层提供服务,其体系结构如下图所示:
谈谈分层的思想:
不知道是哪位大家说的这样一句话,在计算机科学中,当遇到一个难题,通过添加一层的方法都可以解决。
分层的优点:
1.通过对问题领域进行分层,下层通过接口为上层提供服务的方式,这样遵循高内聚低耦合的原则,软件设计更加灵活,健壮,同时设计很清晰,便于扩展。
2.每一层只专注实现自己的功能,这样便于排错。
分层思想的实践:
在最近的一个C#项目中,一个解决方案中有c#的工程,同时某些对性能要求较高的功能用c++写的,那么c#怎么调用c++的代码,并且要求能进行代码级的调试。.Net平台提供ref 关键字,为c++中的类建立一个托管的类(ref class is a CLR class. It’s the equivalent of class in C#.)
public ref class EcuDiagnoseSignle
{
private:
static AutoResetEvent^ DiagnoseEvent= gcnew AutoResetEvent(false);
private:
static String^ strPreEcuName="";
public:
static EcuDiagnoseSignle^ GetInstance()
{
if (nullptr != m_pDiagnoseSignle)
{
return m_pDiagnoseSignle;
}
else
{
return nullptr;
}
}
static void CreateInstance(String^ strEcuName,List<Byte>^ CommParam,Byte ProAndChl,int RepeateRunTimes,String^ strPhyReqId)
{
if (strPreEcuName == "")
{
m_pDiagnoseSignle= gcnew EcuDiagnoseSignle(CommParam,ProAndChl,RepeateRunTimes,strPhyReqId);
m_pDiagnoseSignle->Init();
strPreEcuName = strEcuName;
}
else if ( 0 != strEcuName->CompareTo(strPreEcuName))//如果是新的ecu,则删除前一个ecu信息
{
if (nullptr != m_pDiagnoseSignle)
{
m_pDiagnoseSignle->PreDispose();
}`
....
}
通过编写这样一个托管类,就实现了c#代码到c++代码的无缝连接。
这里说了写题外话,下面谈谈TCP/IP模型:
各层实现的功能:
数据链路层:
由网络驱动程序实现的,主要封装了链路的电器特性,数据链路层根据局域网协议的不同传输不同的数据帧,如果使用的是以太网协议,则传输以太网帧,这一层的协议还包括ARP,RARP协议。
网络层:
实现主机之间的通信,这一层实现的是无状态,不可靠传输,主要是IP协议,ICMP协议。
传输层:
在主机之间建立一个逻辑通信通道,有TCP,UDP,STCP协议。
应用层:
实现特定应用,常用的有HTTP,FTP,SMTP等等。
下面是几个名词解释
无状态:是指通信双方不同步传输数据的状态信息,这在无可靠传输中很常见。
无连接:通信双方不长久维持对方的任何信息。
不可靠:不能保证数据报文准确的发送给对方。