开发端口号

时间:2022-05-05 21:57 | 分类: 句子大全 | 作者:linux技术栈 | 评论: 次 | 点击:

开发端口号

1. 端口号是什么

引用 /bbs/jsp/view.jsp?articleID=1459163

什么是“端口”?

在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由 器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们 这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻 辑意义上的端口。

那么TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。

端口有什么用呢?我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区 分不同的服务的。

需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则 可能使用“3457”这样的端口,如图1所示。

按对应的协议类型,端口有两种:TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。

1.周知端口(Well Known Ports)

周知端口是众所周知的端口号,范围从0到1023,其中80端口分配给W WW服务,21端口分配给FTP服务等。我们在IE的地址栏里输入一个网址的时候( 比如.cn)是不必指定端口号的,因为在默认情况下WWW服务的端口 号是“80”。

网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在 地址栏上指定端口号,方法是在地址后面加上冒号“:”(半角),再加上端口 号。比如使用“8080”作为WWW服务的端口,则需要在地址栏里输入“:8080”。

但是有些系统协议使用固定的端口号,它是不能被改变的,比如139 端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。

2.动态端口(Dynamic Ports)

动态端口的范围是从1024到65535。之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。动态分配是指当一个系统进程或应用 程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。当这个进程关闭时,同时也就释放了所占用的端口号。

怎样查看端口

一台服务器有大量的端口在使用,怎么来查看端口呢?有两种方式: 一种是利用系统内置的命令,一种是利用第三方端口扫描软件。

1.用“netstat -an”查看端口状态

在Windows 2000/XP中,可以在命令提示符下使用“netstat -an”查 看系统端口状态,可以列出系统正在开放的端口号及其状态.

2.用第三方端口扫描软件

第三方端口扫描软件有许多,界面虽然千差万别,但是功能却是类似 的。这里以“Fport” (可到/soft/cce下载)为例讲解。“Fport”在命令提示符下使用,运行结果 与“netstat -an”相似,但是它不仅能够列出正在使用的端口号及类型,还可 以列出端口被哪个应用程序使用.

2. 常见的端口号有哪些

原发布者:刘龙飞456

常见的网络协议\端口号一.端口的分类端口的分类根据其参考对象不同有不同划分方法,如果从端口的性质来分,通常可以分为以下三类:(1)公认端口(WellKnownPorts):这类端口也常称之为"常用端口"。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会像木马这样的黑客程序利用。(2)注册端口(RegisteredPorts):端口号从1025到49151。它们松散地绑定于一些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义。(3)动态和/或私有端口(Dynamicand/orPrivatePorts):端口号从49152到65535。如果根据所提供的服务方式的不同,端口又可分为"TCP协议端口"和"UDP协议端口"两种。因为计算机之间相互通信一般采用这两种通信协议。上面所介绍的"连接方式"是一种直接与接收方进行的连接,发送信息以后,可以确认信息是否到达,这种方式大多采用TCP协议;另一种是不是直接与接收方进行连接,只管把信息放在网上发出去,而不管信息是否到达,这种方式大多采用UDP协议,IP协议也是一种无连接方式。二.常见的网络协议网际层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。传输层协议:TCP

3. 网络编程时可用端口号的范围是多少

端口的取值范围是:0-65535。

在这个取值范围中1023以下的端口已经分配给了常用的一些应用程序,这个数字以后的端口部分被使用,所以网络编程可用的端口一般在1024之后选取。

在网络技术中,端口(Port)大致有两种意思:

1、物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等;

2、逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。

扩展资料:

常用的保留UDP端口号有:

DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。

每个TCP报文头部都包含源端口号(source port)和目的端口号(destination port),用于标识和区分源端设备和目的端设备的应用进程。

在TCP/IP协议栈中,源端口号和目的端口号分别与源IP地址和目的IP地址组成套接字(socket),唯一的确定一条TCP连接。

相对于TCP报文,UDP报文只有少量的字段:源端口号、目的端口号、长度、校验和等,各个字段功能和TCP报文相应字段一样。

参考资料来源:百度百科-网络端口

4. 电脑的API是什么,是不是就是端口

API不是端口,API是面向程序设计人员的编程接口。API的本质是某个软件或系统提供给编程人员的一些预定义好的函数。有了这些函数,编程人员通过函数的使用规范来使用它们就可以实现这个程序的相应功能,这样,程序员只需要专注于自己程序的开发即可,而不需要关注提供API的这个程序内部究竟是如何实现功能的。因此,API相当于一个黑箱,只留一个外部操作接口给编程人员,而无需关注内部具体的实现细节。

端口是计算机内部的程序用来连接网络的出口,是一个虚拟概念。计算机内的每个程序向外连接网络都要通过特定的端口,这样很容易将数据包归类整理而避免无法区分产生混乱。外网和计算机上的某个程序通信时,只需要知道该程序所用的端口号,通过这个端口收发信息即可,而不需要知道具体是哪个程序,它有什么样的属性。每个端口都有其特定作用,有些端口号是固定的,如80端口提供HTTP服务让你可以浏览网页,23端口提供远程登录和控制功能,53号端口提供DNS解析服务,让你通过输入网址就可以访问某个网址而不必输入该网站的IP地址。

在计算机的命令提示符(CMD)中输入netstat -ano,可以查看当前所有被占用的端口的工作情况。在IP地址的冒号后面的部分就是端口号。

修改端口是比较复杂的工作,要区分系统端口、应用端口和保留端口。有些可以修改,有些不能修改,而修改的方法也随不同的程序而异。

5. 怎样理解端口和端口号

有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入。

计算机的"大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口、并口、输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软件端口,在本文中所介绍的都是指"软件端口",但为了说明方便,仍统称为"端口"。本文仅就端口的基础知识进行介绍, 一、端口简介 随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。

TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在TCP/IP协议中引入了一种称之为"Socket(套接字)"应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有Socket接口的计算机进行通信。

端口在计算机编程上也就是"Socket接口"。 有了这些端口后,这些端口又是如何工作呢?例如一台服务器为什么可以同时是Web服务器,也可以是FTP服务器,还可以是邮件服务器等等呢?其中一个很重要的原因是各种服务采用不同的端口分别提供不同的服务,比如:通常TCP/IP协议规定Web采用80号端口,FTP采用21号端口等,而邮件服务器是采用25号端口。

这样,通过不同端口,计算机就可以与外界进行互不干扰的通信。 据专家们分析,服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多。

这是那么多黑客程序都可以采用某种方法,定义出一个特殊的端口来达到入侵的目的的原因所在。为了定义出这个端口,就要依靠某种程序在计算机启动之前自动加载到内存,强行控制计算机打开那个特殊的端口。

这个程序就是"后门"程序,这些后门程序就是常说的木马程序。简单的说,这些木马程序在入侵前是先通过某种手段在一台个人计算机中植入一个程序,打开某个(些)特定的端口,俗称"后门"(BackDoor),使这台计算机变成一台开放性极高(用户拥有极高权限)的FTP服务器,然后从后门就可以达到侵入的目的。

二、端口的分类 端口的分类根据其参考对象不同有不同划分方法,如果从端口的性质来分,通常可以分为以下三类: (1)公认端口(Well Known Ports):这类端口也常称之为"常用端口"。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。

通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。

这些端口通常不会像木马这样的黑客程序利用。为了使大家对这些常用端口多一些认识,在本章后面将详细把这些端口所对面应的服务进行列表,供各位理解和参考。

(2) 注册端口(Registered Ports):端口号从1025到49151。它们松散地绑定于一些服务。

也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义,如后面要介绍的远程控制软件和木马程序中都会有这些端口的定义的。

记住这些常见的程序端口在木马程序的防护和查杀上是非常有必要的。常见木马所使用的端口在后面将有详细的列表。

(3) 动态和/或私有端口(Dynamic and/or Private Ports):端口号从49152到65535。理论上,不应把常用服务分配在这些端口上。

实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。 如果根据所提供的服务方式的不同,端口又可分为"TCP协议端口"和"UDP协议端口"两种。

因为计算机之间相互通信一般采用这两种通信协议。前面所介绍的"连接方式"是一种直接与接收方进行的连接,发送信息以后,可以确认信息是否到达,这种方式大多采用TCP协议;另一种是不是直接与接收方进行连接,只管把信息放在网上发出去,而不管信息是否到达,也就是前面所介绍的"无连接方式"。

这种方式大多采用UDP协议,IP协议也是一种无连接方式。对应使用以上这两种通信协议的服务所提供的端口,也就分为"TCP协议端口"和"UDP协议端口"。

使用TCP协议的常见端口主要有以下几种: (1) FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。

下载文件,上传主页,都要用到FTP服务。 (2) Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。

如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。 (3) SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。

如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有这么SMTP端口设置这个栏,服务器开。

6. oracle 默认的端口号是多少

oracle 默认的端口号是1521

Oracle的企业管理器是需要手工配置或者用DBCA建库是指定的,它是一个web站点。

需要用浏览器访问,它是Oracle引以为豪的一个组件,默认端口1158,

比如在本机访问的话,在浏览器输入:localhost:1158

oracle

甲骨文股份有限公司(NASDAQ:ORCL,Oracle)是全球大型数据库软件公司。总部位于美国加州红木城的红木岸(Redwood Shores),现时首席执行官为公司创办人劳伦斯·埃里森(Lawrence J. Ellison)。

甲骨文公司产品主要有以下几类:

1.服务器及工具(主要竞争对手:IBM、微软)

数据库服务器:2013年最新版本Oracle 12C。

应用服务器:Oracle Application Server。

开发工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。

2.企业应用软件(主要竞争对手:德国SAP公司)

企业资源计划(ERP)软件。已有10年以上的历史。2005年,并购了开发企业软件的仁科软件公司(PeopleSoft)以增强在这方面的竞争力。

客户关系管理(CRM)软件。自1998年开始研发这种软件。2005年,并购了开发客户关系管理软件的希柏软件公司(Siebel)。

3. Oracle职业发展力计划(Oracle WDP)

Oracle WDP 全称为Oracle Workforce Development Program,是Oracle (甲骨文)公司专门面向学生、个人、在职人员等群体开设的职业发展力课程。Oracle的技术广泛应用于各行各业,其中电信、电力、金融、政府及大量制造业都需要Oracle技术人才,Oracle公司针对职业教育市场在全球推广的项目,其以低廉的成本给这部分人群提供Oracle技术培训,经过系统化的实训,让这部分人群能够迅速掌握Oracle最新的核心技术,并能胜任企业大型数据库管理、维护、开发工作。

7. 主要端口是指什么

主要端口是指日常中必须用到的端口

计算机几种主要端口简介

电脑的端口号是:0----65535(256*256个)

21端口:主要用于FTP服务。

25端口:为SMTP服务器所开放的,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。

53端口:为DNS服务器所开放,主要用于域名解析,DNS服务在NT系统中使用得最广泛。

67、68端口:端口分别是为Boop服务的Bootstrap Protocol Server(引导程序协议服务端)

和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。

69端口:是为Cisco公司开发的一个简单文件传输协议,类似于FTP。

79端口:是为Finger服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲溢出等用户的详细信息。

80端口:是为HTTP 开放的,这是上网冲浪使用最多的协议,主要用于在WWW服务上传输信息的协议。

99端口:是用于一个名为“Metagram Relay”(亚对策延时)的服务,该服务比较少见,一般使用不到的。

109、110端口:109端口是为POP2服务开放的,110端口是为POP3服务开放的,POP2、POP3都是主要用于接收邮件的。

110端口:是SUN公司的RPC服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,RPC在多种网络服务中都是很重要的组件。

113端口:主要用于Windows的“Authentication service”(验证服务)。

119端口:是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)

开放的。

135端口:主要用于使用RPC协议并提供DCOM服务。

137端口:主要用于“NetBIOS Name Service”。

139端口:是为“NetBIOS Session Service ”提供的,主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。

「linux网络编程」socket、端口、进程的关系

socket的引入是为了解决不同计算机间进程间通信的问题。

端口是TCP/IP协议中的概念,描述的是TCP协议上的对应的应用,可以理解为基于TCP的系统服务,或者说系统进程!如下图,FTP就需要占用特定的TCP端口。

「linux网络编程」socket、端口、进程的关系

而 socket 呢,是网络编程中的概念,对TCP/IP协议进行了抽象和实现,并为应用层提供接口。这里的应用A,可以是FTP应用,它属于用户进程,通过socket与内核中的网络协议栈进行交互。

「linux网络编程」socket、端口、进程的关系

socket 是核心,是枢纽,是进程与网络建立关系的必经之路!

1.内核是如何将数据包转发至 socket 的呢?

网络数据首先到达网卡,然后进入内核,由网络协议栈去处理,那么内核是如何进行数据分发的呢?它怎么知道该如何把数据交给特定的用户进程呢?这时,就需要 socket 发挥作用了!socket 中存储了特定的四元组: 源ip+port,目的ip+port;

1> bind 到特定 ip 和 port 的socket 对应 [src ip, src port) <=> (*, *)] ;2> connect 到特定目的ip+port 的 socket 对应 [src ip, src port) <=> (dst ip,  dst port)];3> accept 返回了的 socket 对应  [src ip, src port) <=> (dst ip,  dst port)];

那么内核根据数据包的四元组信息,就可以锁定特定的socket了。并可,系统中所有 socket 中的四元组信息,必定唯一,不可能重复!

2 进程与socket的关系是怎样的呢?

每个进程,在内核中都有一个表,保存了该进程申请并占用的所有 socket 描述符,在进程看来,socket 其实跟文件也没有什么不同,只不过通过描述符获得的对象不同而已,接口对应的系统调用也不同。那么进程跟socket是一一对应的吗?其实不然,socket是一种资源,就像文件一样,一个进程打开了,另一个进程也可以用,只不过socket比较特殊而已。理论上,能够通过 sendmsg 将 socket 描述符传递给其他进程,这样其他进程就可以调用该描述符的接口了。这种场景确实不怎么会用到,也没有进行实际验证。当然,父子进程间,还有线程间,进行 socket 的共享,是比较常见的。

3 进程与端口

进程与端口,其实并没有什么直接或必然的关系,关键还是socket!wireshark 抓包查看tcp协议数据包详情:

总结

socket 的本质是一种资源,它包含了端到端的四元组信息,用来标识数据包的归属。因此,尽管 tcp 协议的端口号只有 65535 个,但是进程可拥有的 socket 数据却不限于此(受限于进程最大文件描述符数据);

相关视频推荐

100行代码,实现网络协议栈,准备好linux环境

linux服务端的网络并发,详细解读网络io与线程进程关系

学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

「linux网络编程」socket、端口、进程的关系

PS:

一、端口简介

随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在TCP/IP协议中引入了一种称之为Socket(套接字)应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有Socket接口的计算机进行通信。端口在计算机编程上也就是Socket接口。

有了这些端口后,这些端口又是如何工作呢?例如一台服务器为什么可以同时是Web服务器,也可以是FTP服务器,还可以是邮件服务器等等呢?其中一个很重要的原因是各种服务采用不同的端口分别提供不同的服务,比如:通常TCP/IP协议规定Web采用80号端口,FTP采用21号端口等,而邮件服务器是采用25号端口。这样,通过不同端口,计算机就可以与外界进行互不干扰的通信。

据专家们分析,服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多。这是那么多黑客程序都可以采用某种方法,定义出一个特殊的端口来达到入侵的目的的原因所在。为了定义出这个端口,就要依靠某种程序在计算机启动之前自动加载到内存,强行控制计算机打开那个特殊的端口。这个程序就是后门程序,这些后门程序就是常说的木马程序。简单的说,这些木马程序在入侵前是先通过某种手段在一台个人计算机中植入一个程序,打开某个(些)特定的端口,俗称后门(BackDoor),使这台计算机变成一台开放性极高(用户拥有极高权限)的FTP服务器,然后从后门就可以达到侵入的目的。

二、端口的分类

端口的分类根据其参考对象不同有不同划分方法,如果从端口的性质来分,通常可以分为以下三类:

(1)公认端口(Well KnownPorts):这类端口也常称之为常用端口。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会像木马这样的黑客程序利用。

(2) 注册端口(Registered Ports):端口号从1025到49151。它们松散地绑定于一些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义,如后面要介绍的远程控制软件和木马程序中都会有这些端口的定义的。记住这些常见的程序端口在木马程序的防护和查杀上是非常有必要的。常见木马所使用的端口在后面将有详细的列表。

(3) 动态和/或私有端口(Dynamic and/or Private Ports):端口号从49152到65535。理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。

如果根据所提供的服务方式的不同,端口又可分为TCP协议端口和UDP协议端口两种。因为计算机之间相互通信一般采用这两种通信协议。前面所介绍的连接方式是一种直接与接收方进行的连接,发送信息以后,可以确认信息是否到达,这种方式大多采用TCP协议;另一种是不是直接与接收方进行连接,只管把信息放在网上发出去,而不管信息是否到达,也就是前面所介绍的无连接方式。这种方式大多采用UDP协议,IP协议也是一种无连接方式。对应使用以上这两种通信协议的服务所提供的端口,也就分为TCP协议端口和UDP协议端口。

使用TCP协议的常见端口主要有以下几种:

(1) FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。

(2)Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。

(3)SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。

socket介绍

socket为内核对象,由操作系统内核来维护其缓冲区,引用计数,并且可以在多个进程中使用。 至于称它为“句柄”“文件描述符”都是一样的,它只不过是内核开放给用户进程使用的整数而已。

socket() 创建了一个socket内核对象。 accept或者connect后,才可以对socket句柄读写。因为只有在 connect或者bind,listen,accept后才会设置好socket内核对象里边的ip和端口 。

在使用socket编程时,我们都知道在网络通信以前首先要建立连接,而连接的建立是通过对socket的一些操作来完成的。那么,建立连接的过程大致可以分为以下几步:

1) 建立socket套接字。

2) 给套接字赋予地址,这个地址不是通常的网络地址的概念。

3) 建立socket连接。

以下详细解释

1. 建立socket套接字。

使用socket建立套接字的时候,我们实际上是建立了一个数据结构。这个数据结构最主要的信息是指定了连接的种类和使用的协议,此外还有一些关于连接队列操作的结构字段(这里就先不涉及他们了)。

当我们使用socket函数以后,如果成功的话会返回一个int型的描述符,它指向前面那个被维护在内核里的socket数据结构。我们的任何操作都是通过这个描述符而作用到那个数据结构上的。这就像是我们在建立一个文件后得到一个文件描述符一样,对文件的操作都是通过文件描述符来进行的,而不是直接作用到inode数据结构上。我之所以用文件描述符举例,是因为socket数据结构也是和inode数据结构密切相关,它不是独立存在于内核中的,而是位于一个VFS inode结构中。所以,有一些比较抽象的特性,我们可以用文件操作来不恰当的进行类比以加深理解。

如前所述,当建立了这个套接字以后,我们可以获得一个象文件描述符那样的套接字描述符。就象我们对文件进行操作那样,我们可以通过向套接字里面写数据将数据传送到我们指定的地方,这个地方可以是远端的主机,也可以是本地的主机。如果你有兴趣的话,还可以用socket机制来实现IPC,不过效率比较低,试试也就行了(没有试过)。

2. 给套接字赋予地址。

依照建立套接字的目的不同,赋予套接字地址的方式有两种:服务器端使用bind,客户端使用connetc。

Bind:

我们都知道,只要使用IP, prot就可以区分一个tcp/ip连接(当然这个连接指的是一个连接通道,如果要区分特定的主机间的连接,还需要第三个属性 hostname)。

我们可以使用bind函数来为一个使用在服务器端例程中的套接字赋予通信的地址和端口。

在这里我们称通信的IP地址和端口合起来构成了一个socket地址,而指定一个socket使用特定的IP和port组合来进行通行的过程就是赋予这个socket一个地址。 要赋予socket地址,就得使用一个数据结构来指明特定的socket地址,这个数据结构就是struct sockaddr。对它的使用我就不说了,因为这篇文档的目的是澄清概念而不是说明使用方法。Bind函数的作用就是将这个特定的标注有socket地址信息的数据结构和socket套接字联系起来,即赋予这个套接字一个地址。但是在具体实现上,他们两个是怎么联系在一起的,我还不知道。

一个特定的socket的地址的生命期是bind成功以后到连接断开前。你可以建立一个socket数据结构和socket地址的数据结构,但是在没有bind以前他们两个是没有关系的,在bind以后他们两个才有了关系。这种关系一直维持到连接的结束,当一个连接结束时,socket数据结构和socket地址的数据结构还都存在,但是他们两个已经没有关系了。如果你要是用这个套接字在socket地址上重新进行连接时,需重新bind他们两个。再注明一次,我说的这个连接是一个连接通道,而不是特定的主机之间的连接。

Bind指定的IP通常是本地IP(一般不特别指定,而使用INADDR_ANY来声明),而最主要的作用是指定端口。在服务器端的socket进行了bind以后就是用listen来在这个socket地址上准备进行连接。

connect:

对于客户端来说,是不会使用bind的(并不是不能用,但没什么意义),他们会通过connet函数来建立socket和socket地址之间的关系。其中的socket地址是它想要连接的服务器端的socket地址。在connect建立socket和socket地址两者关系的同时,它也在尝试着建立远端的连接。

3. 建立socket连接。

对于准备建立一个连接,服务器端要两个步骤:bind, listen;客户端一个步骤:connct。如果服务器端accept一个connect,而客户端得到了这个accept的确认,那么一个连接就建立了。


  • 发表评论
【已经有()位大神发现了看法】

  • 匿名发表
  •  
人参与,条评论