网络端口号,TCP定时器和TCP建立连接状态基的变更

来源:互联网 发布:ios工具类软件 知乎 编辑:程序博客网 时间:2024/05/02 04:49

一、网络端口号

1. 什么是网络端口

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

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

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

2.端口分类

(1)按端口号可分为3大类:

<1> 公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

<2> 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

  这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义,如后面要介绍的远程控制软件和木马程序中都会有这些端口的定义的。记住这些常见的程序端口在木马程序的防护和查杀上是非常有必要的。常见木马所使用的端口在后面将有详细的列表。

<3> 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

(2)按协议类型划分   

  按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。下面主要介绍TCP和UDP端口:    

 <1> TCP端口   

  TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。   

  <2> UDP端口   

  UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。

代理服务器常用以下端口:

(1). HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
(2). SOCKS代理协议服务器常用端口号:1080
(3). FTP(文件传输)协议代理服务器常用端口号:21

(4). Telnet(远程登录)协议代理服务器常用端口:23

3、查看端口

在视窗系统 2000/XP/Server 2003中要查看端口,能使用Netstat命令:

依次点击“开始→运行”,键入“cmd”并回车,打开 命令提示符窗口。在 命令提示符状态下键入“netstat -a -n”,按下回车键后就能看到以数字形式显示的TCP和UDP连接的 端口号及状态。

小知识:Netstat命令用法

命令格式:Netstat ?-a? ?-e? ?-n? ?-o? ?-s?

-a 表示显示所有活动的TCP连接及计算机监听的TCP和UDP端口。

-e 表示显示 以太网发送和接收的字节数、数据包数等。

-n 表示只以数字形式显示所有活动的TCP连接的地址和 端口号。

-o 表示显示活动的TCP连接并包括每个连接的进程ID(PID)。

-s 表示按协议显示各种连接的统计信息,包括 端口号。

二、TCP定时器

   1、TCP的坚持定时器
  ACK的传输并不可靠,也就是说,TCP不对ACK报文段进行确认,TCP只确认那些包含数据的ACK报文段。为了防止因为ACK报文段丢失而双方进行等待的问题,发送方用一个坚持定时器来周期性地向接收方查询。这些从发送方发出地报文段称为窗口探查。
   2、TCP的保活定时器
   如果一个给定的连接在2小时内没有任何动作,那么服务器就向客户发送一个探查报文段。客户主机必须处于以下4个状态之一。
  (1) 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方的正常工作的。服务器在2小时内将保活定时器复位。
  (2) 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务器将不能收到对探查的响应,并在75秒后超时。总共发送10个探查,间隔75秒。
  (3) 客户主机崩溃并已经重新启动。这是服务器将收到一个对其保活探查的响应,但这个响应是一个复位,使得服务器终止这个连接。
  (4) 客户主机正常运行,但是从服务器不可达。

三、TCP建立连接状态基的变更

1、客户端TCP状态迁移
  CLOSED-SYN_SENT-ESTABLISHED-FIN_WAIT_1-FIN_WAIT_2-TIME_WAIT-CLOSED 
  服务器TCP状态迁移
  CLOSED-LISTEN-SYN_RECV-ESTABLISHED-CLOSE_WAIT-LAST _ACK-CLOSED 
当客户端开始连接时服务器还处于LISTENING客户端发一个SYN包后他就处于SYN_SENT状态,服务器就处于SYS收到状态,然后互相确认进入连接状态ESTABLISHED. 

(1)LISTENING状态 
    服务启动后首先处于侦听(LISTENING)状态。 
(2)ESTABLISHED状态 
    ESTABLISHED的意思是建立连接。表示两台机器正在通信。 
(3)CLOSE_WAIT 

    对方主动关闭连接或者网络异常导致连接中断这时我方的状态会变成CLOSE_WAIT,此时我方要调用close()来使得连接正确关闭 

(4)TIME_WAIT 
   我方主动调用close()断开连接收到对方确认后状态变为TIME_WAIT,缺省为240秒。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期)以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放所以作为服务器在可能的情况下尽量不要主动断开连接以减少TIME_WAIT状态造成的资源浪费。 

      一个连接定义了11种状态,并且TCP规则决定如何从一个状态转换到另一个状态,这种转换基于当前状态及在该状态下所接收的分节。例如,当应用进程在CLOSED状态下执行一个主动打开时,TCP将发送一个SYN并从CLOSED状态转换成SYN_SENT状态。如果该TCP接着接收到一个附带ACK的SYN,它将发送一个ACK并转换成ES-TABLISHED状态。这个状态是数据传送状态。有两个外向箭头引导ESTABLISHED状态的连接终止处理。如果应用进程在接收到文件结束符前调用close(主动关闭),则转换成FIN_WAIT_1状态。如果在ESTABLISHED状态下应用进程接收到FIN,则转换成CIOSE_WAIT状态。
执行主动关闭的那一端进入TIME_WAIT状态,执行被动关闭的一端进入CLOSE_WAIT状态。

2、为什么socket在关闭之后会处于TIME_WAIT状态

   执行主动关闭(调用close函数)的一端会经历TIME_WAIT状态,这个状态的持续时间是最长分节生命期(maximum segment lifetime,MSL)的两倍。任何TCP实现都必须指定MSL的值,一般这个值会在30秒到2分钟之间,即TIME_WAIT状态可能存在1-4分钟的时间。MSL是任何IP报能够在网络中存活的最长时间。每个数据报含有一个称为跳限的8位字段,最大值为255,但任然假设具有最大跳限的分组在网络中存在的时间不超过MSL的规定时间。

   TIME_WAIT状态存在有两个理由:

   (1)可靠实现TCP全双工连接的终止。

   (2)允许老的重复分节在网络中消逝。

    理由一的解释:在TCP断开连接(一般由客户端发起)四次挥手的过程中,客户端发送的ACK N+1因为网络原因丢失了,则服务器需要重发他的FIN N,所以虽然此时客户端已经调用了close函数,但仍然需要一个中间状态重新处理FIN N,并且发送ACK N+1。

    理由二的解释:如果由于网络原因,导致某个连接的重复分组在该连接已经断开的时候收到,进而被认为是一次新的连接,为了杜绝这一点,TCP将不给处于TIME_WAIT状态的连接发起新的连接(例外:当到达SYN的序列号大于前一次连接的结束序列号)。



阅读全文
0 0
原创粉丝点击