现在的位置: 首页 > 综合 > 正文

服务器开发【一】—-网络编程的基础SOCKET(1)

2014年05月09日 ⁄ 综合 ⁄ 共 1914字 ⁄ 字号 评论关闭

说起SOCKET,很多人都感觉自己挺懂的,不就是创建套接字--绑定套接字--监听--连接--发送什么的吗。是的!这些都没有错,知道了这些的确可以写出一个能够互相通信的C/S程序了。几个月前我也是这样认为的,认为这样就理解了SOCKET编程,理解了网络编程。直到最近做完视频服务器的项目之后,感觉之前的想法是多么的幼稚,所以就有了此文----帮助还像几个月前的我一样的人深入的了解SOCKET编程,帮助自己总结一下这段时间的所学,也给自己将来的深入理解留一个空间。

不知道各位看客的学习方式是怎样的,在这里我自说自话的说说我的学习方法(也是最近总结的,和大家分享一下)。

在开始学习一样新知识的时候,我会建立一个思维导图的文档,然后在不断的学习过程中,每涉及一个新的知识点我就会为这个中心主题增加一个子主题,如果这个子主题有了新的知识点,我就再为这个子主题建立建立一个子主题,并且以此延伸下去。这样,在我不断学习这个中心主题的时候,我就可以不断的将零散的知识点加入到当中,在一段学习结束之后,总结这个思维导图,在我的头脑里就会出现一张有关于该主题的“思维地图”,便于我理解、记忆和扩展。

(跑题了,说正题)

一 SOCKET的由来

(史以明鉴,每一项高深的技术都是由一项简单的需求演变而来的,所以了解历史可以帮助我们更容易的理解一项技术)

其实从历史上来看,SOCKET的出现和众多的技术一样,都是为了减小编程人员的压力,让编程人员可以把精力更多的投入到新技术的研发中,而不是浪费在复杂的实现过程中。当时的编程人员要想完成一个网络通信功能的程序必须非常了解TCP/IP协议栈才可以,然而理解TCP/IP协议栈并不是一个很简单的事情,所以80年代美国的UNIX的研究人员决定将TCP/IP复杂的协议栈内容”封装“,让人们可以简单的实现网络的通信功能。这就是SOCKET的由来,这就是为什么我们现在只需要简单的调用创建套接字--绑定套接字--监听--连接--发送就可以实现网络通信功能的来历。

其实SOCKET翻译成套接字不怎么好理解,怎么也没法把套接字和网络通信的功能联系到一起。SOCKET在字典中翻译是“插座”的意思,如果把SOCKET理解成插座就很好理解了,发送方和就收方通过插到各自的插座上实现连通的功能,只是我个人的理解。

二 SOCKET在网络通信中的位置

很多人理解SOCKET只是把SOCKET当成一个死板的工具来使用,从来都没有想过它是通过什么样的一种方式来实现的网络通信,这里我就简单的介绍一下网络通信。能够更好的帮助大家理解SOCKET。

其实网络传输的一层层的打包,打包到物理层通过双绞线或者是光纤传输(WIFI不是,WIFI是链路层的协议)。然后接收端一层层根据协议解包,最后应用层接收到传输的数据。理解了这个,再来看看SCCKET到底是怎样运作在这个体系中的。

看到这个图可能有人会晕,别退缩,别!千万别!错过了您就错过了真正了解SOCKET的机会了!耐心看下去,您会豁然开朗。

先介绍几种协议,可能是让你看到这张图有点晕的罪魁祸首:
TCP:传输控制协议,一种面向连接的、可靠的、基于字节流的传输层通信协议。

UDP:用户数据报协议,是一个简单的面向数据报的传输层协议,只提供数据的不可靠传递。

IP:网际协议,任务是仅仅根据源主机和目的主机的地址传送数据。

以上这三种协议就组成了大名鼎鼎的TCP/IP协议栈,用以将数据传输到目的地址。

ICMP:互联网控制消息协议,它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,令管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。

IGMP:因特网组管理协议,是用于管理因特网协议多播组成员的一种通信协议。IP主机和相邻的路由器利用IGMP来建立多播组的组成员。像ICMP用于单播连接一样,IGMP也是IP多播说明的一个完整部分。 

ARP:地址解析协议,其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

RARP:逆地址解析协议,RARP用于将MAC地址转换为IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTP或DHCP所取代。

看完这些是不是觉得不再一头雾水了呢,这些东西不用都记下来,有空看看图自然就越来越理解了。

说完了上面这些题外话(这些题外话非常有用,能帮你更好的理解网络体系和SOCKET),让我们来看看SOCKET在这个体系中的位置吧。



是不是有种豁然开朗的感觉,哈哈。SOCKET就是这样一个抽象层,把TCP/IP协议栈中的内容很好的屏蔽起来,让我们更容易的去实现网络通信。

抱歉!评论已关闭.