您的位置:首页 > 理论基础 > 计算机网络

计算机网络,协议实现,学习记录

2010-10-31 17:22 417 查看
2010-10-30
最近一段时间由于网络体系结构与协议和unix环境高级编程这两门课有点感觉,所以看了点协议和网络编程方面的书籍。
Socket一个我们很熟悉的概念:socket是最先在unix上推出的一种应用程序访问通信协议的操作系统调用socket(套接字)。注意这里的应用程序不是指应用层的网络协议。想想如果我们在写应用程序的时候没有socket这个实体,我们如何去使用TCP/IP协议里面的那些函数来实现和其他的进程通信?。比如说UDP里面的udp_ouput函数(TCP/IP illustrated)。在TCP/IP协议的实现中,调用send;sendto,sendmsg,write,writev时,最后在协议内部代码流程都会走到sosend,然后udp_usrreq然后udp_output然后ip_output。但是如果我们没有socket这个实体,我们在编写使用UDP的应用程序的时候,我们就都需要来自己去调用操作系统中的TCP/IP协议实现的那些内核代码。那如果是其他协议呢,我们也必须自己去调用了。那样多麻烦啊,也不好记,那么多的协议。而socket这个实体正好给我们提供了一些接口,给我们屏蔽了具体协议的细节,因此我们就可以使用socket实体给我们提供的接口来编写应用程序不用管具体协议实现的细节。我们也可以这样用面向对象的思想来看待。Socket就是一个对象。这个对象提供了一组接口。但是我们一定不要把socket理解为了一个网络协议栈中的一层协议了。它只是应用程序访问通信协议的操作系统调用。

2010-10-31
今天下午看了下计算机网络第四版中的那个传输层设计实例和TCP/IP illustrated 的插口层。明白了传输实体的有限状态自动机模型。几个服务原语的编写和中断程序的编写实现。明白了插口层的基本概念,是把进程对传输实体想要做什么事情在中间作为一个借口实现。就是昨天我写的socket里面的很多内容。现在我疑惑了,应用程的协议在什么地方实现的,是操作系统内核里面吗?应该不是,那应用层是怎么使用传输层实体提供的服务的呢?按理说应该是通过那些原语调用,但是那些原语的调用又是通过插口层。那现在比如说我们写的所谓的网络应用程序,这个是属于应用层的协议实现吗?显然不是。那我们的http这个应用层协议是在哪里实现的呢?感觉对于HTTP这个协议,应该是在浏览器的源代码里面实现。当我们打开一个浏览器时候,对应一个进程。而此时,http协议的源代码应该是在进程的代码段中。当我们输入一个http网址产生一个调用的时候,这个http协议的源代码应该就是在解析这个http网址,然后此时就是关键时刻了,当这个进程利用http协议的源代码解析完之后,根据解析后的结果,然后再通过socket插口层去访问传输层实体提供的服务。因此这样分析,应用层的协议应该不是在操作系统内核中,而是在一些浏览器或者应用软件中?
现在又回到那个问题,我们利用socket编写的网络应用程序,这些是属于什么一个范畴呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: