TCP/IP协议源码学习笔记之典型数据结构-链表

来源:互联网 发布:tester软件 编辑:程序博客网 时间:2024/06/12 02:34

tcp/ip协议软件体系结构本质上是一种分层的结构,协议分成了应用层,传输层,网络层,链路层。普通的应用程序要使用网络传输服务,常见的是调用socket 插口来实现网络通信,也就是说socket插口是屏蔽了底层网络传输的细节部分,我们的应用也就是建立在此基础之上,插口层的作用也就是将进程发出的与协议有关的请求通过调用插口层对应的插口层来处理,插口层函数将其转换对应的协议操作。

     比如说我们的应用层程序的请求,拿网页中当我们在表单中提交数据来说,当我们点下鼠标,产生了http的post/get请求的时候,这样的请求数据就会通过插口的系统调用传到了传输层的tcp协议的缓存中,而我们说tcp或者udp的缓冲区存储数据的数据结构就是链表这样一种结构,在BSD 的TCP/IP源代码中可以看到有mbuf这样的一种链表结构,数据被复制到其中,链式结构的好处貌似是方便添加和删除节点,将数据复制到mbuf链表中后,就会调用tcp的协议例程,什么你不知道什么是例程?+_+就是一些处理tcp请求的函数,在mbuf链表前面添加tcp的首部,再传给IP层添加IP首部,成为一个IP数据报,IP数据报发送到接口层,接口层是用来屏蔽底层链路层传输类型的差异,链路层可以采用以太网,或者其他类型的传输类型。接口层将其数据报转换成以太网帧,或者其他链路类型的帧发送出去。

  以上只是http请求大致经过各协议层的发送过程,当服务器返回请求的时候返回的数据同样是储存在mbuf链表中,从链路层向应用层逐层传递,每经过一层去掉相应的协议首部,最后传给进程。

      ps:所以说数据结构这门课还是很重要的,不要以为大学学的课程就过时了,c语言指针的强大作用不是一般人能体会的。指针到底是什么,大家是应该清楚的!