[转载]分组报文,协议和Socket的概念

[转载]分组报文,协议和Socket的概念 – 浪雪 – 博客园.

这篇随笔是我接着上篇《字节和字符,对信息进行编码》继续写的内容,看过上篇随笔能更好的理解这篇内容。我想从基础的开始说起,一直说到ASP.NET,WCF为止。然后再转战数据库和数据结构。

信息是指由程序创建和建设的“字节序列”。在网络环境中,这些字节序列被称作“分组报文”。一组报文包括了网络用来完成工作的控制信息,还包括了数据信息。


协议相当于互相通信的程序(进程间通信)间达成的一种约定,它规定了分组报文的交换方式和它们包含的含义。一组协议规定了以下信息:
1.结构。 比如报文中哪一部分表明了其目的地址。
2.解析。如何对报文中所包含的信息进行解析。


设计一组协议,通常是为了在一定约束条件下解决某一特定问题。比如,超文本传输协议http是为了解决在服务期间传递超文本对象的问题。

网络层:网络层完成将分组报文传输到它们的目的地址的工作。注意,目的地只精确到网络接口,并不精确到应用程序。IP属于网络层。

传 输层:TCP协议和IP协议都有一个共同的功能,即寻址。回顾一下,IP协议只是将分组报文分发到了不同主机(更准确的说是网络接口,因为一台主机可能装 了多个网卡,而网卡才是目的地。cpu,主板等其他组成一台主机的其他组成部分并不是目的地)。很明显,还需要其他更细粒度的寻址将报文发送到主机中指定 的应用程序,因为同一台主机上可能有多个应用程序在使用网络。TCP协议和UDP协议使用的地址叫做“端口号”,这就是用来区分同一台主机中不同应用程序 的。TCP和UDP协议有时候也称作端到端传输协议(end-to-end transport protocol),因为它们将数据”从一个应用程序传输到另一个应用程序”,而IP协议只是将数据从”一台主机传输到另一台主机”

TCP 协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失,重复以及其他错误。TCP协议提供了一个可信赖的字节流(reilable byte-stream)信道。(注意流的概念,下面在提到NIO的时候会和buffer进行比较).使用TCP协议在很多方面都与文件的输入输出 (I/O)相似。实际上,由一个程序写入的文件再由另一个程序读取就是一个TCP连接的适当模型。

UDP协议并不尝试对IP层产生的错误进行修复,它仅仅简单的扩展了IP协议“尽力而为best effort”的数据报服务,使得数据能在应用程序之间工作,而不是在主机之间工作。因此,使用了UDP协议的应用程序必须为处理报文丢失,顺序混乱等问题做好准备。
下面来谈下Socket。
Socket:只是一个抽象层。用来表示程序已经加入到网络中。
这句话的意思就是一旦一个程序中有了一个Socket实例对象,那么这个程序就被加入到了网络当中,可以和网络中的其他应用程序进行通信。

现在来关注Socket是抽象层这段话。既然Socket是抽象的,那么它肯定有很多不同具体的实现,比如说以TCP为基础的TCPSocekt和以UDP为基础的UDPSocket。

不恰当的比方来说,拥有一个Sokcet就像狱警对犯人说你有和外界沟通的权力。和外界沟通这个概念是抽象的,具体是坐在桌子前面谈,还是通过 电话机隔着玻璃窗谈话,(请想象美剧中的场景)还是允许写信,单从“你可以和外界沟通“这句话来说都是不可知的。我们唯一能知道的是,我们可以和外界沟通 了。
接下来的随笔中我会继续说明这几种实现方式的异同点。
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏