A. 计算机通信的基础组件是套接字吗
摘要 套接字:是传输层通信端点抽象,仅仅是一个名词
B. 什么叫套接字
套接字又称插口,是TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字或插口。是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:1、连接使用的协议;2、本地主机的IP地址;3、本地进程的协议端口;4、远地主机的IP地址;5、远地进程的协议端口。
C. socket的中文翻译是套接字,那为什么中文叫套接字呢我的意思是套接字到底表现了socket的什么特点
同学,修没修过《计算机网络》?
在网络中,如何标示一个主机?使用IP地址(在网络层,一台机器当然也可以由多个网络接口,即网卡,每个结构对应一个IP地址)。
如何标示一个主机上的特定进程呢?使用IP:PORT,即IP地址和端口号,一般地说,每个进行网络通信的应用程序都要占用主机上的一个端口。举个例子,使用TCP进行通信,需要建立连接,比如主机A上的进程a和主机B上的进程b进行通信,A、B之间的连接如何标示?使用四元组<A的IP,a所占用的端口,B的IP,b所占用的端口>【其实端口不过是一种软件抽象,学术一把,呵呵】
IP:PORT就确定了一个socket,在一个TCP连接中,她就像一个插口,注意,叫做插口,套接字也就是类似的意思。你把应用程序插入到这个插座,就可以和连接的另外一方对话了。至于socket命名,是有历史由来的,不过我们学网络编程,其实不必纠结于此,so it is just a name。
网络编程是很不错的,祝你成功。。。。。
关于C/C++中的socket编程,有问题欢迎问我,放假闲得……哎!!!!
D. 什么叫套接字。Socket
套接字(socket)是用于网络通信的基本操作单元。简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
套接字可以根据通信性质分类,主要分
流式套接字(SOCK_STREAM),
数据报套接字(SOCK_DGRAM)以及原始套接字(SOCK_RAW).
数据报套接字提供了一种不可靠的、非连接的数据包通信方式。所以
数据报套接字使用UDP协议,当然,winsock
2版本还支持其他协议。
E. 什么UNIX是套接字
套接字是一种具有之前所说的“通信端点”概念的计算机网络数据结构。网络化的应用程序在开始任何通讯之前都必需要创建套接字。就像电话的插口一样,没有它就完全没办法通信。
套接字起源于20世纪70年代加州大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在同一台主机上多个应用程序之间的通讯。这也被称作进程间通讯,或IPC。套接字有两种,分别是基于文件型的和基于网络型的。
Unix套接字是我们要介绍的第一个套接字家族。其“家族名”为AF_UNIX(在POSIX1.g标准中也叫AF_LOCAL),表示“地址家族:UNIX”。包括Python在内的大多数流行平台上都使用术语“地址家族”及其缩写“AF”。而老一点的系统中,地址家族被称为“域”或“协议家族”,并使用缩写“PF”而不是“AF”。同样的,AF_LOCAL(在2000-2001年被列为标准)将会代替AF_UNIX。不过,为了向后兼容,很多系统上,两者是等价的。Python自己则仍然使用AF_UNIX。
由于两个进程都运行在同一台机器上,而且这些套接字是基于文件的。所以,它们的底层结构是由文件系统来支持的。这样做相当有道理,因为,同一台电脑上,文件系统的确是不同的进程都能访问的。
另一种套接字是基于网络的,它有自己的家族名字:AF_INET,或叫“地址家族:Internet”。还有一种地址家族AF_INET6被用于网际协议第6版(IPv6)寻址上。还有一些其他的地址家族,不过,它们要么是只用在某个平台上,要么就是已经被废弃,或是很少被使用,或是根本就还没有实现。所有地址家族中,AF_INET是使用最广泛的一个。Python 2.5中加入了一种Linux套接字的支持:AF_NETLINK(无连接(稍后讲解))套接字家族让用户代码与内核代码之间的IPC可以使用标准BSD 套接字接口。而且,相对之前那些往操作系统中加入新的系统调用、proc文件系统支持或是“IOCTL”等复杂的方案来说,这种方法显得更为精巧,更为安全。
F. 什么是网络套接字
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
非常非常简单的举例说明下:Socket=Ip
address+
TCP/UDP
+
port。
G. 网络中端口和套接字有什么区别
套接字是端口和IP地址结合的一个概念,网络中的通信都是通过套接字标识,
H. Socket为什么要翻译成套接字
套接字(也称为BSD 套接字)应用程序接口(API)包括了一个用C语言写成的应用程序开发库,主要用于实现进程间通讯,在计算机网络通讯方面被广泛使用。Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSDUnix操作系统(于1983发布)的一套应用程序接口.。
Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动建立关系。此后,应用程序送给Socket的数据,由Socket交给网络驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定IP地址和端口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据,网络应用程序就是这样通过Socket进行数据的发
I. 什么是网络套接字
套接字(socket)是用于网络通信的基本操作单元。简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
套接字可以根据通信性质分类,主要分
流式套接字(sock_stream),
数据报套接字(sock_dgram)以及原始套接字(sock_raw).
数据报套接字提供了一种不可靠的、非连接的数据包通信方式。所以
数据报套接字使用udp协议,当然,winsock
2版本还支持其他协议。
J. 进程间通信(IPC)——Unix域套接字 VS 网络套接字
进程间通信就是不同进程间进行数据交换的过程。因为进程间相互独立,每个进程拥有独立的地址空间、数据处理逻辑,操作系统保证了进程独立运行的地址安全;但在复杂系统,单进程往往不能胜任业务需求,需要多进程的加入,多进程协作完成工作,这就离不开进程间通信这个话题了。
进程间通信有很多种方式,列举如下:
而进程间通信按进程分布情况可以 单机内的进程间通信 和 多机间远程调用的进程间通信 ,后者无需多讲,在分布式等大型系统中是非常常见的,而进行通信的方式主要是上述方法中的网络IPC,有非常多的资料介绍相关内容,不在本文的讨论范围之内。
本文主要讨论在 单机内进程间通信 中,Unix域套接字和TCP网络套接字的对比,后者属于网络IPC。
套接字是一种应用程序接口,包括了一个用C语言写成的应用程序开发库,主要用于实现进程间通讯,在计算机网络通讯方面被广泛使用。下面要讨论的网络套接字和Unix套接字均属于套接字。
在定义套接字类型的时候,网络套接字通常使用 AF_INET 进行定义;Unix域套接字则使用 AF_UNIX 进行定义。
套接字类型有三种,分别是流式套接字、数据报套接字和原始套接字。
流式套接字(SOCK_STREAM):流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流式套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
数据报套接字(SOCK_DGRAM):数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
原始套接字(SOCK_RAW):原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW。
原始套接字与标准套接字(标准套接字指的是前面介绍的流式套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流式套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。
网络通信中通常都是使用网络套接字进行通信,可用于单机进程间通信和多机进程间通信,网络套接字由五元组来标识:(源地址、源端口、目标地址、目标端口、通信协议),因而网络套接字在网络协议栈中属于传输层之上的内容。所以,在使用网络套接字通信的时候,传递内容需要经过完整的网络协议栈四层模型中的(传输层-网络层-网络访问层(数据链路层-物理层))。
回想在协议栈当中,对于报文的处理有哪些操作。
Unix域套接字只能用于在同一个计算机的进程间进行通信。虽然网络套接字也可以用于单机进程间的通信,但是使用Unix域套接字效率会更高,因为Unix域套接字仅仅进行数据复制,不会执行在网络协议栈中需要处理的添加、删除报文头、计算校验和、计算报文顺序等复杂操作,因而在单机的进程间通信中,更加推荐使用Unix域套接字。
关于套接字的使用,资料很多,不再介绍。
这里拿网络套接字和Unix域套接字出来比较的原因是,很多人在进行单机多进程开发时没有注意到Unix域套接字的存在,而是使用了成本较高的网络套接字进行开发。Unix套接字在通信开销方面是很小的,因而在单机通信中更加推荐使用Unix域套接字。
原文链接