设为首页 加入收藏

TOP

Linux网络编程:基于TCP的程序开发回顾篇
2014-11-24 11:47:40 来源: 作者: 【 】 浏览:1
Tags:Linux 网络编程 基于 TCP 程序开发 回顾

面向连接的TCP程序设计


基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程:


其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有。可随着时间的推移,你会觉得这样子的开发毫无激情。为什么TCP的开发就要按照这样的流程来呢?而且一般出的问题几乎都不在这几个系统调用上,原因何在?当我们弄清网络开发的本质,协议栈的设计原理、数据流向等这些问题的答案也就会慢慢浮出水面了。接下来这几篇博文主要是围绕网络编程展开,目的是引出后面对于Linux下TCP/IP协议栈的相关分析做铺垫。


1、 创建socket


到目前为止我们知道socket的作用其实是非常大的,它不仅能够实现不同远端主机间的数据通信,还是可以实现不同进程间的通信,以及用户空间和内核空间的通信等等。其函数原型定义如下:


int socket(int domain, int type, int protocol);


domain:大家习惯性将其翻译成“协议域”或者“地址簇”,牵扯到“协议”这个词估计很多人就又晕了。也难怪,TCP、UDP我们叫协议,IP我们也叫协议,到处都是协议。那么到底什么是协议?说白了,协议其实就是事先规定好的数据通信方式。例如我们经常说的TCP/IP协议默认情况下都指的是IPv4版本协议,现在还有IPv6,它属于另外一种协议,还有在电信网里面经常听到的X.25协议,用户空间和内核空间通信的netlink协议等等。每种协议都有其特定的应用场景。这里,我们可以通俗的将domain理解成“协议种类”。


type:直译就是“类型”的意思。因为不同种类的协议提供了不同的数据传输方式,我们常见的有面向连接的流式传输模式、无连接的数据报传输方式等。


protocol:才是我们具体的协议类型,如TCP、UDP之类的。怎么理解?我们知道在IPv4协议族里,面向连接的流式套接字一般指的都是TCP协议。在电信网中NO.7信令体系中,实现了面向连接的流式套接字的协议就有ISUP和TUP协议。为什么平时一提到面向流式的套接字大家条件反射的就想起了TCP,那是因为我们心里已经默认了前提是IPv4协议族了。一般情况下,对于某种具体的套接字类型(流式或数据报式)都只有一种对应的实现协议,当然你心里必须要知道对于某些协议族有可能有多种协议。对于我们的IPv4而言,在创建socket套接字时,当指定了地址簇、套接字类型、protocol协议字段一般都设置为0。


关于socket()函数我们再打个比方:


假如说socket()函数就是个造人的机器,我们给它输入三个指令:


OK,当我们输入:


socket(黑种人,会说话,英文) =>马丁路德;


socket(黑种人,会说话,英文) =>威尔史密斯;


因为黑人缺省情况下说的话都是英文,所以他们会说话的功能也就仅局限英文了,不会有二义性。


可我们高贵的黄种人就不一样了(JP不在此范畴),所以会说话的黄种人就多了去了。所以如果我们要造一个会说话的黄种人,必须进一步限定说话的语言才行。


socket(黄种人,会说话,中文) =>孔子;


socket(黄种人,会说话,朝鲜语) =>金正日;


通过这个例子,大家就可以好好体会一下socket()函数三个参数的作用和意义。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux网络编程:基于UDP的程序开.. 下一篇Linux环境下网络编程杂谈

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·请问c语言刚入门,该 (2025-12-26 10:21:04)
·python 编程怎么定义 (2025-12-26 10:21:01)
·09-指 针 (一)-c语言 (2025-12-26 10:20:58)
·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)