精华内容
下载资源
问答
  • script命令可以用作交互终端会话过程的记录,保留用户输入和系统输出的全过程。以备之后查询与学习,对于初学者、保留工作记录和准备写材料的人而言,这是一个非常有用的工具 在下述语法中,输出文件是用于存储所有...
  • 基于HTTP会话过程跟踪的网页挂马攻击检测方法
  • 基于HTTP会话过程跟踪的网页挂马攻击检测方法
  • 网络路由协议会话过程中文示意图,方便复习加深理解
  • session的URL重写是不是会话过程有效, 重启浏览器后是不是会找不到以前的session ID
  • 基于HTTP会话过程跟踪的网页挂马攻击检测方法(PPT下载) 王涛 广东工业大学
  • SMTP会话过程

    千次阅读 2013-09-12 16:49:31
    发送邮件 220 163.com Anti-spam GT for Coremail System (163com[20121016]) EHLO [192.168.43.133] 250-mail 250-PIPELINING 250-AUTH LOGIN PLAIN ...250-coremail 1Uxr2xKj7kG0xkI17xGrU7I

    发送邮件

    220 163.com Anti-spam GT for Coremail System (163com[20121016])

    EHLO [192.168.43.133]

    250-mail

    250-PIPELINING

    250-AUTH LOGIN PLAIN

    250-AUTH=LOGIN PLAIN

    250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF3tlxjUCa0xDrUUUUj

    250-STARTTLS

    250 8BITMIME

    AUTH PLAIN AGJzdF90ZXN0QDE2My5jb20Ac2Ftc3VuZw==

    235 Authentication successful

    RSET

    250 OK

    MAIL FROM: <xxx@163.com> SIZE=18714

    250 Mail OK

    RCPT TO: <xxx@163.com>

    250 Mail OK

    DATA

    354 End data with <CR><LF>.<CR><LF>

    Date: Thu, 12 Sep 2013 16:43:34 +0800

    Subject: Test

    Message-ID: <5ajh8eo8o2iu7abqalelffdu.1378975368458@email.android.com>

    Importance: normal

    From: bst_test <xxx@163.com>

    To: bst_test <xxx@163.com>

    Reply-To: bst_test <xxx@163.com>

    MIME-Version: 1.0

    Content-Type: multipart/mixed; boundary="--_com.android.email_348448640400860"

     

    ----_com.android.email_348448640400860

    Content-Type: multipart/alternative; boundary="--_com.android.email_348448646199731"

     

    ----_com.android.email_348448646199731

    Content-Type: text/plain; charset=utf-8

    Content-Transfer-Encoding: base64

    ...

     

    ----_com.android.email_348448640400860--

     

     

    .

    250 Mail OK queued as smtp12,EMCowECZZUO4fjFSg5yVBg--.935S3 1378975419

     

     

    展开全文
  • kill会话过程分析+

    千次阅读 2012-04-23 20:43:41
    在实际开发中,我们常常需要将用户的会话强制断开。比如:事务执行超时、代码出现死循环、死锁或者无意中将数据表锁住。这个使用kill session是很实用的方法。那么,kill session的时候,系统究竟发生了什么呢? ...
     
    

    转自:http://space.itpub.net/?uid-17203031-action-viewspace-itemid-684039

    在实际开发中,我们常常需要将用户的会话强制断开。比如:事务执行超时、代码出现死循环、死锁或者无意中将数据表锁住。这个使用kill session是很实用的方法。那么,kill session的时候,系统究竟发生了什么呢?

    基础知识

    用户连接到数据库,涉及到几个对象。首先是监听器我们常常使用的本地命名服务(tnsname.ora),实际上连接的就是监听器。但是,对于我们连接过程来说,与监听器打交道的时间还是很短暂的(详细可以见笔者其他讨论监听器和连接的文章)。其次是Server  Process,是客户端应用在数据库服务器上的操作代表。所有对于数据库实例、数据文件和SGA的操作,实际执行都是Server Process来进行的。最后就是以PMON为代表的后台进程(影子进程),他们负责管理实例的方方面面,保证各方面职能正确实现。

     

    另一个逻辑层次上,用户会话session是一个重要概念。在特定的情况下,我们可以说用户与数据库的交互,就是在一个持续的session中完成。在一个session中,用户可以执行多个事务,可以处在闲置状态(Inactive)。

     

    在任何情况下,如果我们强制性的断开连接,放开session(主动)。PMON后台进程会主动的做回收处理工作(在繁忙的时候存在延时)。回收包括清理会话信息,回滚未提交事务,释放Server Process资源(专用模式下)。

     

     

    在一些时候,我们可以借助alter system kill session ‘sid, serial#’;来手工强制断开用户连接。那么,Oracle进行kill的时候,究竟发生了什么呢?让我一起来研究。

     

    实验环境构建

    Connected to Oracle Database11gEnterpriseEdition Release11.2.0.1.0

    Connected as SYS

     

    //查看组件版本:使用SYS登录

    SQL> select * from v$version;

     BANNER

    --------------------------------------------------------------------------------

    Oracle Database11gEnterpriseEdition Release11.2.0.1.0 - Production

    PL/SQL Release11.2.0.1.0 - Production

    CORE       11.2.0.1.0  Production

     TNS for Linux: Version11.2.0.1.0 - Production

    NLSRTL Version11.2.0.1.0 - Production

     

     首先,为了简便,笔者启动了PL/SQL Developer,并且打开一个Command窗口。之后,启动一个sqlplus窗口,观察这个窗口对应的会话情况。

     sqlplus窗口中。

     

    SQL> conn scott/tiger@wilson

    已连接。

     观察会话情况,查询v$session

     SQL>select saddr, sid, serial#, paddr, username, program,action,status from v$session where username in ('SYS','SCOTT');

     

    SADDR     SID       SERIAL#    PADDR     USERNAME    PROGRAM        ACTION                  STATUS

    --------        -----      ----------        --------         ----------           ---------------          ---------------              --------

    382F0074     1          64             38BC6C94     SCOTT           sqlplusw.exe                                         INACTIVE

    382B30C0   24         80             38BC61BC      SYS                plsqldev.exe     Main session               INACTIVE

    3829B2F4   33         10             38BC8244       SYS                 plsqldev.exe    Command Window      ACTIVE

                                                                 - New          

     

     

    可以发现,会话中多了三个session。两个用户名SYS的会话是PL/SQL Developer开启的(原理见之前博客内容)。另一个SCOTT用户开启的sqlplusw.exe是我们的实验对象,发现其sid=1Serial#=64。会话对应的Server Process物理地址为38BC6C94

     

    之后,我们查找的对应的server Process信息,从v$process

     

     SQL>select addr,pid,spid,username,serial#,program from v$process where addr='38BC6C94';

     

    ADDR           PID      SPID        USERNAME     SERIAL#         PROGRAM

    --------          -------   ---------         ----------            ----------       -----------------------

    38BC6C94      25       5803              oracle                 23               oracle@oracle11g

     

     

    我们可以看出,Scott用户会话SID=1对应的Server Process,进程编号为5803PIDOracle相关进程的内部编号,SPID表示的是操作系统级别)。

     

    最后,我们查看操作系统级别进程信息。

     

    [oracle@oracle11g~]$ ps -ef | grep LOCAL

    oracle   5780    1 0 05:47 ?       00:00:03 oraclewilson (LOCAL=NO)

    oracle   5788    1 0 05:48 ?       00:00:00 oraclewilson (LOCAL=NO)

    oracle   5803    1 0 05:50 ?       00:00:00 oraclewilson (LOCAL=NO)        //对应的那个Server Process

     

     实验kill会话。

     

    在观察PL/SQL Developer里,将SCOTT会话断开。

     

    SQL> alter system kill session '1,64';

    System altered

     

     Kill操作执行完成,没有报错。那么,这个会话信息真的被删除了吗?我们重新检查v$session

     

    //发现,会话SCOTTSID=1Serial#=64信息还存在)

    SQL> select saddr, sid, serial#, paddr, username, program,action,status from v$session where username in ('SCOTT');

     

    SADDR     SID      SERIAL#     PADDR     USERNAME     PROGRAM             ACTION          STATUS

    --------        -----   ----------          --------           ----------        -------------------------  ---------------       --------

    382F0074    1            64          38058594          SCOTT          sqlplusw.exe                                        KILLED

     

    //按照原来的Server Process地址查找Server Process信息还存在;

    SQL> select addr,pid,spid,username,serial#,program from v$process where addr='38BC6C94';

     

    ADDR           PID        SPID           USERNAME     SERIAL#      PROGRAM

    --------          -------   -------------       -------------          -------     -------------------------

    38BC6C94     25          5803                oracle                 23           oracle@oracle11g

     

    “怪事”发生了,我们kill掉了会话。但是会话信息还存在,与刚才的结果区别是两个:

    其一为会话的状态变为了KILLED状态,表示已经被kill

    其二是对应Server Process的地址被修改,该到了38058594的位置上。

     

    而查看v$process进程视图,发现原来为其服务的Server Process信息仍然存在!那么,是真的存在吗?我们查看操作系统层面:

     

    [oracle@oracle11g~]$ ps -ef | grep LOCAL

    oracle   5780    1 0 05:47 ?       00:00:03 oraclewilson (LOCAL=NO)

    oracle   5788    1 0 05:48 ?       00:00:00 oraclewilson (LOCAL=NO)

    oracle   5803    1 0 05:50 ?       00:00:00 oraclewilson (LOCAL=NO)

     

     看来Server Process确实存在。那么这个新Server Process地址38058594是什么呢?

     

     SQL> select addr,pid,spid,username,serial#,program from v$process where addr='38058594';

     

    ADDR           PID SPID                    USERNAME     SERIAL# PROGRAM

    -------- ---------- ------------------------ ---------- ---------- -------------------------

     

     

    综合上述:在kill的时候,Oracle做了两件事:

    一件是将会话的状态修改了KILLED,相当于打了一个标记。

    第二件是通过将会话对应的Server Process地址修改为一个虚拟地址,切断会话信息与Server Process的映射关联。此外,Server Process并没有回收。

     

    等待一会之后,发现依然如此!没有PMON主动的回收动作。

     那么,如果此时被kill掉的会话发起一个操作,如何?

     sqlplus上:

     

    SQL> select * from emp;

    select * from emp

    *

    1行出现错误:

    ORA-00028:您的会话己被终止

     

     

    被断开的会话拒绝操作,告知说会话已经被终止。

     

    此时,系统还能查看到这个会话信息吗?

     

     

    SQL> select saddr, sid, serial#, paddr, username, program,action,status from v$session where username in ('SCOTT');

     

    SADDR     SID   SERIAL#   PADDR   USERNAME  PROGRAM         ACTION STATUS

    --------     -----       ----------   --------            ---------- ------------------------- --------------- --------

    SQL> select addr,pid,spid,username,serial#,program from v$process where addr='38BC6C94';

     

    ADDR           PID SPID                    USERNAME     SERIAL# PROGRAM

    -------- ---------- ------------------------ ---------- ---------- -------------------------

    38BC6C94        25 5803                    oracle            23 oracle@oracle11g

     

     

    结论:当我们在原有窗口执行操作,尝试会话通信时,被拒绝。通过视图查询,发现原有被kill的会话信息被回收。但是Server Process还存在在视图上,但不与任何会话对应。

     

    那操作系统层面上:

     

     [oracle@oracle11g~]$ps -ef | grep LOCAL

    oracle   5780    1 0 05:47 ?       00:00:03 oraclewilson (LOCAL=NO)

    oracle   5788    1 0 05:48 ?       00:00:00 oraclewilson (LOCAL=NO)

    oracle   5803    1 0 05:50 ?       00:00:00 oraclewilson (LOCAL=NO)

     

     

    Server Process还存在,没有回收。

     

    注意:当我们关闭掉sqlplusw窗口之后,也就是我们关掉客户端的时候,我们再次查询发现:

     

    [oracle@oracle11g~]$ ps -ef | grep LOCAL

    oracle   5780    1 0 05:47 ?       00:00:03 oraclewilson (LOCAL=NO)

    oracle   5788    1 0 05:48 ?       00:00:00 oraclewilson (LOCAL=NO)

     

    Server Process被回收,v$process自然也应当没有对应记录存在了。

     

     

    SQL> select addr,pid,spid,username,serial#,program from v$process where addr='38BC6C94';

     

    ADDR             PID       SPID       USERNAME     SERIAL#       PROGRAM

    --------         ----------   ---------        ----------           ----------      -------------------------

    38BC6C94     25          5956            oracle                 26              oracle@oracle11g(J000)

     

    诶,为什么有记录呢?仔细看看:SPID已经发生变化,不是5803,而是5956,是一个新启动的进程。只是使用了刚刚被释放的地址。

     

    结论:驻留在数据库服务器的Server Process会一直存在,直到客户端应用断开连接,不在于Server Process通信。注意,这时如何客户端重新连接conn,客户端是重新与监听器沟通,获取一个新的Server Process重定向,不会找过去的那个旧Server Process。一旦重新登录,旧的Server Process就会被回收释放掉。

     

    综上所述:在kill研究中,我们搞清楚了几个方面问题:

     

    1、alter system kill session:只是将session标记为可以回收,切断会话与Server Process的映射关系。没有进行资源释放回收工作;

    2、一旦尝试连接,PMON会主动开始清理被kill的会话,同时Oracle拒绝连接操作;

    3、Server Process是一个忠实于客户端的进程,只要客户端还在启动,维持着两个之间的联系。Server Process是不会被回收的。直到客户端主动停止与Server Process的通信,Server Process释放;

     

    我们知道,当需要强制断开一个会话的时候,可以通过SQL命令alter system kill session ‘sid, serial#’;强制的将会话断开。其中,SID为会话的编号Serial为会话的系列号。这两个值是唯一标志Oracle一个会话。而会话的相关信息,可以通过查询v$session视图来获取到。

     

     根据前文我们的分析,认为alter system kill session命令是存在一些不足的。

     

    首先,kill session命令是在会话层面的强制断开。本质上相当于进行了一个标志,切断了Server Process与会话之间的映射关系。会话所占有的资源是不会直接被回收;

     

    其次,kill session命令在一些特殊场合,应对效果不佳。比如在Oracle Job里面运行的时候,是不能定位到相应的会话对象的。

     

    最后,一些紧急的时候,kill session还存在一些适应性较差的情况。比如当前根本无法登陆SQL命令窗口;

     

     

    那么,比kill session更有效直接的做法是什么呢?针对Server Processkill操作,也就是OS操作系统级别的kill当我们不能够使用alter system kill session或者使用其无效的时候,可以考虑使用这种方法。

     

    首先,我们研究一些Linux环境。选择是专用连接模式。

     

    在没有连接的时候,我们查看连接情况。

     

    [oracle@oracle11g~]$ ps -ef | grepwilson| grep -v grep

    oracle   5583    1 0 02:52 ?       00:00:00 ora_pmon_wilson

    oracle   5585    1 0 02:52 ?       00:00:00 ora_vktm_wilson

    ……(篇幅原因,有省略部分)

    oracle   5672    1 0 02:52 ?       00:00:00 ora_q001_wilson

    oracle   5700    1 0 02:57 ?       00:00:00 ora_smco_wilson

    oracle   5702    1 0 02:57 ?       00:00:00 ora_w000_wilson

     

     

    在没有连接的时候,进程列表中只能看到实例多个background process的运行情况。此时,我们连入一个客户端。查看进程情况:(为省略篇幅,设置筛选条件)

     

     

    [oracle@oracle11g~]$ ps -ef | grep LOCAL | grep -v grep;

    oracle   5777    1 1 03:09 ?       00:00:00oraclewilson (LOCAL=NO)

    [oracle@oracle11g~]$

     

     

    连入了一个客户端,在专用模式下有一个Server Process与之关联。这里对各列含义略作说明。

     

    第一列表示执行用户Owner第二列是PID,表示进程的系统唯一编号第三列表示该进程的父进程PPID编号,就是该进程是由哪个进程启动的之后有两个时间值,分别为进程启动到现在时间与占用CPU时间最后一列一般为启动命令行。

     

    其中,我们比较关注的就是PIDPID唯一的标识,如果强制终止这个进程,我们就可以强制的结束会话(皮之不存,毛将焉附)。同时,在OS层面的强制终止,进程会话对应的资源可以直接回收。

     

    Unix/Linux平台下,可以使用kill -9 PID,实现删除。

     

    [oracle@oracle11g~]$ kill -9 5777//终止

    [oracle@oracle11g~]$ ps -ef | grep LOCAL | grep -v grep;//确认

    [oracle@oracle11g~]$

     

     

    使用后,操作系统进程树上的Server Process被清除。此时,连接的客户端如果发起请求。

     

    //之前建立的连接

    SQL> conn scott/tiger@wilson

    已连接。

     

    //kill之后,尝试连接

    SQL> select count(*) from emp;

    select count(*) from emp

                          *

    1行出现错误:

    ORA-03113:通信通道的文件结束//报错!

     

     

     

    使用kill -9命令,还可以对background process进程进行管理,对一些问题进程进行杀死重建,也是我们经常使用的手段。

     

    结论:在Linux平台上,当需要在操作系统级别进行kill的时候,可以使用kill -9命令。

     

    接下来,我们在Windows平台上,就有一些问题了。由于体系结构的不同,OracleWindows下实现的实例结构,并不是多进程架构方式,而采用的是多线程模式。Unix/Linux下的background processServer Process,成为了一个ORACLE.exe进程里的线程。那么,这种情况下,我们如何处理?

     

    为了应对这种情况,Oracle提供了一个为orakill.exe的命令。这个命令本质上和alter system kill session的功能相同,但是不需要登录连接数据库。只需要输入线程编号和SID就可以。

     

    这样,问题转化为我们如果获取到一个线程的线程编号。在Windows平台上,有很多查看线程的工具。如Qslice.exeQuickSlice.exe以及Pstat

     

    语法:orakill <sid> <thread>

    其中,sidOraclesid号。Thread为会话对应的线程的编号。我们可以通过v$sessionv$process的信息获取。

     

    SQL> select b.username, a.spid, b.username, b.sid, b.osuser, b.action

     2 from v$process a, v$session b

     3 where a.ADDR=b.PADDR and b.username='SYS';

     

    USERNAME   SPID        USERNAME  SID       OSUSER                        ACTION

    ---------         ------------        ----------    --------  ---------------------- --------------------------------

      SYS               1464              SYS            152 WWW-0E6111DFF74\Administrator Command Window - New

      SYS                632               SYS            141 WWW-0E6111DFF74\Administrator Main session

     

     

    注意下v$processSPID列。在Linux/Unix环境下,这个列的SPID表示Process的编号。在Windows环境下,这列就表示在ORACLE.exe进程下的线程编号。

     

    我们尝试删除命令窗口线程(SPID=1464)。

     

    C:\>orakill orcl 1464

     

    Kill of thread id1464 ininstance orcl successfully signalled.

     

     

    命令窗口再次尝试连接时。

     

    SQL> select count(*) from dba_objects;

    Warning: connection was lost and re-established

     

     

    说明:连接被切断。

     

    此外,orakill命令也可以在SQL命令提示中使用。

     

    SQL> host orakill orcl 3140

     

    Kill of thread id3140 ininstance orcl successfully signalled.


     

    结论:在Windows平台上,可以使用orakill工具进行sessionserver的杀死工作。

     

    最后,笔者还要强调一下。无论是kill session还是kill -9操作,都是一种危险的操作,特别是在生产环境下。原因在于,后台进程特别是核心后台进程(PMONSMONDBWNLGWR)如果被误删除,相当于实例死掉,是一件重大事故。在没有确认需要、没有专业人员许可的情况下,尽可能的选取破坏性小的方案进行处理。

    展开全文
  • 一个会话过程

    2007-03-25 12:06:00
    说明: “会话”是指用户之间的信息交换过程。例如:进行文件传输,首先需要建立“会话连接”,通知通信对方“会话开始”,会话连接建立后,通信双方可进行文件传输;可以把每传输一个文件作为一个“活动”,发送方...
      
    

     

    说明:

        “会话”是指用户之间的信息交换过程。例如:进行文件传输,首先需要建立“会话连接”,通知通信对方“会话开始”,会话连接建立后,通信双方可进行文件传输;可以把每传输一个文件作为一个“活动”,发送方在开始传输该文件时,通知接收方“活动开始”;为使接收方接收同步,每发送一段数据后,设置一个“次同步点”,使得接收方可以检查数据接收的正确性;发送一组相对完整的数据后,设置一个“主同步点”,接收方收到主同步点信息后,给予确认,表示在这之前的数据已完全正确接收。一个文件传输结束时,通知接收方,本次“活动结束”,如要继续发送下一文件,则通知接收方“新的活动开始”,继续发送文件。 直至本次连接需要传输的文件都传输完毕,通知接收方“会话结束”,拆除会话连接。

        “活动”和“主同步点”同时也作为恢复点,如果传输过程中出现故障,传输中断,则等再次连接时,可以恢复最近一次活动,并从最后的主同步点开始重新同步,继续传输数据。

    展开全文
  • 之前在TCP/IP的网络通信的学习中,主要关注的都是高并发,高性能的方面,忽略了一些基本的概念,特别是端口这个东西,这个东西在服务器开发过程中可能看起来也不是很麻烦,在服务器上就是一个bind(),在客户端指定...

    之前在TCP/IP的网络通信的学习中,主要关注的都是高并发,高性能的方面,忽略了一些基本的概念,特别是端口这个东西,这个东西在服务器开发过程中可能看起来也不是很麻烦,在服务器上就是一个bind(),在客户端指定一下目标端口就行了,也没有太深入理解其中的东西,今天就来好好的总结梳理一下。

    还是以服务器和客户端的会话为例,什么是端口呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536(即:256×256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(256×256-1)。端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。一个数据包包括了文件,ip,和端口号,ip是为了服务器可以找到你的主机,端口号是你接受数据包的门户, 而所谓的端口监听,是指主机网络进程接受到IP数据包后,察看其的目标端口是不是自己的端口号,如果是的话就接受该数据包进行处理。


    在服务器和客户端通信过程中,socket通信的双方自己决定自己要用什么端口,服务器端只能决定自己listen的是哪个端口,不能决定客户端的端口;客户端也只能决定自己的端口,当然,因为它是主动连接的,所以它知道对方的端口号,但它也不能把对方的服务移到别的端口上面去。端口号是用来区分相同主机上的不同socket的,它相当于socket在本机这一端的名字,一个端口只能bind一次,占用了之后同时就不能再给别人用了,这么宝贵的资源都要留给listen的一方,主动连接的一方一般去用那些操作系统随机分配的端口号。bind也可以指定端口号为0,这种情况下就是随机绑定一个没有使用过的端口号,可以用来在建立连接之前就确定本端的端口号。作为listen的一方,所有被动建立起来的连接的本端端口都是listen的端口。只有源IP、源端口、目的IP、目的端口还有协议号都完全相同才会认为是同一个socket,所以被动建立连接的socket源端口号不同,目的端口号是可以相同的。

    我们在linux环境来查看一下端口使用情况:

    输入命令netstat -tunap(-t 表示显示tcp相关 -u表示显示udp相关 -n表示拒绝显示别名,能显示数字全部转换为数字 -a表示显示所有状态的,-l则表示显示listen状态的 不输入则表示显示established状态的 -p表示显示建立相关链接的程序名),效果如下


    在ip地址后的冒号,如这个,0.0.0.0表示ip,表示111端口号。

    什么时候需要使用到端口这个东西呢?

    1、采用TCP通信时,客户端不需要bind()他自己的IP和端口号,而服务器必须要bind()自己本机的IP和端口号;

    2、若采用UDP通信时(这里是有客户端和服务器之分才这么说的,若是指定特定端口的UDP对等通信则不一样了),客户端也可以不需要bind()他自己的IP和端口号,而服务器需要bind自己IP地址和端口号;

    再说下客户端用不用bind的区别

    无连接的socket的客户和服务以及面向连接socket的服务通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。
      Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024是保留端口号,你可以选择大于1024中的任何一个没有被占用的端口号。

     有连接的socket客户通过调用Connect函数socket数据结构中保存本地和远信息无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候打开端口。(当然也有特殊情况,linux系统中rlogin命令应当调用bind函数绑定一个未用的保留端口号,还有当客户需要用指定的网络设备接口和端口号进行通信等等)
    总之:
    1.需要在建连前就知道端口的话,需要 bind 
    2.需要通过指定的端口来通讯的话,需要 bind


    再说一个问题,为什么你用浏览器打开一个网站不需要输入端口呢不是说好客户端访问服务器需要指定端口号的吗?其实,是你的浏览器默认帮助你的ip地址后面加上了:80,80端口是默认的http端口,所以就不需要你输入网址时加端口啦,如果你自己搭建了一个服务器,比如nginx,你把config文件里的listen端口改成其他端口,你看你的浏览器还是否能够不加端口访问。

    展开全文
  • sip会话建立过程

    2013-07-08 00:28:04
    讲述了SIP会话建立的全过程,并且细致描述了各个阶段。
  • LDP会话建立过程

    千次阅读 2020-04-20 08:38:42
    Hello 消息中携带传输地址,双方使用传输地址建立 LDP 会话。首先选择传输地址较大的一方作为主动方,发起建立 TCP 连接。如图所示,LSR-A 作为主动方发起建立 TCP 连接,LSR-B 作为被动方等待对方发起连接。 TCP ...
  • 详细详解SIP协议会话建立过程,个人感觉不错的SIP协议学习资料。
  • webrtc 会话建立过程

    千次阅读 2018-08-17 19:59:53
    1. 会话建立流程 在通过 webrtc 实现点对点的连接时,需要遵循如下流程,图片来自 1. Client A 创建一个 PeerConnection 对象,然后打开本地音视频设备,将音视频数据封装成 MediaStream 添加到 PeerC...
  • 会话会话状态

    2013-03-06 15:29:33
    在电话通过的过程中,人们所说出的每句话都是参照前面谈话的信息发出的,同样,在浏览器与Web服务器的会话过程中,Web服务器每次响应的结果都应该参照前面的请求与响应信息而创建。Web应用的会话状态是指Web服务器与...
  • 会话技术

    千次阅读 2016-12-06 18:33:04
    2.会话过程要解决的问题 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。 例如:用户点击超链接通过一个servlet购买了一个商品,程序应该...
  • Wireshark抓取http会话建立过程

    千次阅读 2019-06-19 14:38:35
    2、找到成功建立http会话连接的包 3、选中http会话成功建立的数据包,右键选择colorize conversation,选择TCP-颜色2 4、选择http会话成功建立的数据包,右键选择conversation filter,选择ipv4过滤 5、标记...
  • Cookie会话

    千次阅读 2012-10-30 19:04:33
    什么是会话?   在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程...l 会话过程中要解决的一些问题? • 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服
  • 会话管理之Cookie技术

    千次阅读 2016-04-27 13:54:09
    会话管理是web开发中比较重要的环节,这一节主要总结下会话管理中的...1.1 会话过程中要解决的问题  1)每个用户在使用浏览器与服务器进行会话的过程中,不可避免会各自产生一些数据,程序要想办法为每个用户保存这些
  • 摘要:Skype是一个基于P2P应用的网络电话软件。它使用了专用的通信协议,对用户...在此基础上,提出了一个对Skype会话连接进行检测的算法。该算法综合利用了Skype的端口使用情况、数据包大小以及数据包的有效载荷特性。
  • 会话跟踪

    千次阅读 2011-10-21 15:14:48
    WEB应用的会话状态是指WEB服务器与浏览器在会话过程中产生的状态信息,WEB服务器能够把属于同一个会话中的一系列的请求和响应过程关联起来。  第一次访问WEB服务器登录的操作 输入账号:xxx 密码:1234——>...
  • HTTP会话的四个过程

    2020-05-22 15:38:07
    HTTP会话的四个过程 1. 建立tcp连接 2. 发出请求文档 3. 发出响应文档 4. 释放tcp连接

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 361,429
精华内容 144,571
关键字:

会话过程