网络协议-TCP

来源:互联网 发布:mac 自带软件能删除吗 编辑:程序博客网 时间:2024/05/16 02:13

二、TCP/IP协议简介

    TCP/IP是Transmission Control Protocol和Internet Protocol的缩写。TCP/IP是Internet主干网络的核心组成部分。它描述了一个四层模型,即网络访问层、网际层、传输层(也叫做主机到主机层)、进程/应用层,在一个TCP/IP网络上,数据被切割成一个一个的小数据包发送出去,这些数据包都包含了所要去往的目的地地址,到达目的地以后,会被自动的合并起来。

    对于这四层,可以这么理解:在一家肉类加工厂中,有许多的设备、人员等,其中,加工厂中的仓库管理员就是这里所说的网络访问层(中间层或者叫做链路层),他们控制原料的入库和产成品的出库,但是他们不过问生产(没有应用);厂内进行原材料初加工和产成品运输的工人就是这里所说的网际层,初加工人员从仓库中把肉提出来,进行初步的加工,然后送到流水线进行生产,而运输工人就把生产完成的肉制品送到仓库;而流水线就类似于传输层(主机到主机层)了,初加工后的肉制品被一节一节的传送、处理;最后就是包装工人了,他们就是TCP/IP体系中的进程/应用层,他们把从流水线上送过来的半成品进行各类细加工并进行包装成为产成品。

    不同于最初的OSI模型,TCP/IP更加注重对互连设备之间的数据传输,而OSI模型则更加注重于对各个设备之间通信原理的描述,也就是说,TCP/IP是一个严格的市场标准,而OSI模型则是一个学术标准(实际上,TCP/IP的通讯也遵循OSI模型描述的原理)。有关OSI模型的详细信息,请自行参考相关书籍,这里重点说明一下TCP/IP协议模型(从模型的底层往高层介绍)。

1、网络访问层
    网络访问层也叫做中间层或链路层,它负责通过网络设备发送TCP/IP数据包,并通过网络设备接收TCP/IP数据包,这一层没有任何应用。TCP/IP协议被设计为不依赖于任何网络访问方式、体系结构和介质,因此,TCP/IP可以跨越不同的网络类型进行通讯,比如基于以太网(Ethernet)或令牌环(Token Ring)技术的局域网(LAN)同基于X.25或帧中继技术的广域网(WAN)进行通讯。

2、网际层
    网际层即Internet Layer,它负责数据包的寻址、封装和路由功能。网际层的核心协议就是IP协议、ICMP协议、IGMP协议、ARP协议。其中ICMP协议在第一部分已经说明,ARP协议是地址转换协议的英文缩写,由于在金山网镖中不牵涉到,因此不作多说。这里需要介绍一下IP协议和IGMP协议

A、IP协议(这里只简单介绍IP协议,对于IP网络中的命名、寻址、子网化等等不作介绍,读者可以参考更加专业、详细的书籍)

    IP协议负责将数据包切割成一小块一小块的,然后每个数据包都加上一个目的地地址,并且通过选择一定的路径发送出去,最后到达目的地以后又重新把一个个的小数据包合并成一个完整的数据。在一个IP数据包中需要包含很丰富的信息,这其中包括:

①所使用IP协议的版本号,即IPv4或者IPv6;
②IP数据包头的长度(可以让接收端知道IP头在何处结束,并且从何处开始读取数据);
③IP数据包的总长度(以字节为单位,最大只能有65535字节,超出这个范围,接收端将会认为这个IP报文被破坏而丢弃);
④生存时间(告诉传送过程中经过的设备这个IP报文允许继续传输下去的时间,一般是15-30秒,超过这个时间,设备将会丢弃数据包,并给发送者一个回执,告诉发送方它发送的数据包丢弃或者丢失了,让它重新发送);
⑤处理这个IP报文的上层协议号(网际层的上层);
⑥校验IP数据包头数据有效性的值;
⑦此IP报文发送者的地址;
⑧IP报文将要到达的地址。

    一个IP数据包包含的信息并非只有这8项,但是最主要的信息只有这8项,其余的基本上是一些可选信息。IP协议拥有丰富信息并且可以实现一些功能,但是由于IP只是一个网际层协议,所以IP协议不足以实现高层的一些应用服务。

B、IGMP协议
    是Internet Group Management Protocol的缩写,用于IP多点传送(多播)。所谓多点传送就是指在网络中的单一发送者和多个接收者的通讯。IGMP用于在支持多点传送的路由器和支持多点传送的网络组成员之间交换成员状态。


3、传输层
    传输层也叫做主机到主机层。这一层为下一节要介绍的应用层提供会话和数据包通讯服务。这一层的核心协议就是传输控制协议,即TCP(Transmission Control Protocol)和用户数据包协议,即UDP(User Datagram Protocol)。这个部分是金山网镖IP规则编辑应用过程中的所牵涉到的重点。
A、TCP协议
    即Transfer Control Protocol(传输控制协议)的缩写。TCP协议使用IP(但是注意,使用IP并不意味着TCP和IP是包含关系,二者是独立的协议,就像前面所举例的原材料初加工、产成品运输的工人和流水线的关系一样,二者有联系,但是却独立。),提供了一种端到端的、基于连接的、可靠的通信服务。之所以说它可靠,首先是因为每一个TCP连接都会在发送端和接收端之间产生三次预先通讯,用术语来说就是TCP的三次握手(Handshake),三次握手的过程会在稍微后面提到。

    它负责确定一个TCP连接,并且负责数据包的发送确认和发送的次序,同时负责重新传送在传输过程中破坏或者丢失的数据包;它能够对成功接收的数据包进行回应,可以测试所接收数据包的完整性,并把接收到的次序错乱的数据包进行顺序整理,这些是TCP通讯可靠性的另一个方面。

    由于TCP是用户应用和诸多网络协议之间的纽带,因此TCP必须能够同时接收多个应用的数据,并且必须具备跟踪记录到达的数据包需要转发到的应用程序的功能,这个功能是通过端口来实现的。

    对于端口,相信使用只要是上网的人一定不会陌生这个词,在很多的文章、软件中广泛使用到了这个词汇,但是相信也有不少人对“端口”这个词是知其然不知其所以然的。端口的作用在上面已经说到了,这里要进行深入了解的话,需要介绍一下TCP协议数据包头的结构。在TCP协议头的结构介绍中,你可以获得金山网镖IP规则编辑器中可能让你有点莫名其妙的“标志”的相关信息(在日志中也存在,你可能经常收到类似于“来自x.x.x.x的TCP请求,标志位:ACK”这样的报告)。

注意:以下内容需要一些计算机原理基础知识,如果不明白,可以不用管那些“位”(Bit)
    TCP协议头最少有20字节(Bytes)。TCP协议头包含以下部分(称为域):

TCP源端口:用于指示源端口的数值,这是一个16位的二进制数(2个字节,2 Bytes)。源端口和源IP的作用就是标明数据包的返回地址。由于是一个16位二进制数,也就意味着有65535个可用端口;

TCP目的端口:用于指示目的端口的数值,也是一个16位二进制数(2Bytes)。目的端口用来指明接收端上应用程序的地址接口;

    很显然,在日常应用中,一些常规应用使用的端口是众所周知的,比如HTTP服务使用80端口、FTP服务使用21端口等等,这些是经过Internet的管理者ICANN所定义了的,可以被所有主机识别,但是面对65535个如此庞大的端口数目,没有必要对所有的端口一一定义,于是ICANN只定义了前面1024个端口(0-1023),而大于1023的端口则称为高端端口,不被定义。用户的应用程序可以随机打开高端端口进行通讯(当然也可以使用定义了的1024个端口中的一个,但是需要小心的是,前1024个端口是被各种协议、服务广泛使用的,如果你的应用程序使用这些端口,将可能和其他的服务产生冲突,无法通信)。
    需要注意的是,你并不能直观地看到一个TCP包中所包含的这些端口信息,金山网镖也不会剖开一个封包告诉你一大堆的二进制数让你知道端口号,你所看到的日志以及在IP规则编辑器中需要指定的端口号,其实是一个叫做套接字的东西,所谓套接字就是由主机端口和IP地址组合而成,类似于127.0.0.1:3389这样的形式。

TCP序列号:这是一个32位二进制数(4 Bytes)。一个TCP数据包中包含的序列号是提供给接收方计算机使用的,目的在于把到达目的地的乱七八糟的数据包重新排列;

TCP应答号:也是一个32位二进制数(4 Bytes)。就是使用ACK(应答)标志下一个希望收到的数据包的第一个字节。这个部分只有在后面将要说到的ACK标志被设为有效的时候才存在;

数据偏移:是一个32位二进制数。告诉接收方,数据的开始位置在什么地方;

●[保留域:一个6位二进制数,为将来可能的用途保留;

TCP标志位(也称控制位,有的日志报告使用英文Flag):一共有六位标志位。它们分别是URG、ACK、PSH、RST、SYN、FIN。下面会对这六个标志位进行一些介绍,并且告诉你一些网络安全上的常规知识:

    ※URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;

    ※ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;

    ※PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队;

    ※RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;

    ※SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被相应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;

    ※FIN:表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。当一个FIN标志的TCP数据包发送到一台计算机的特定端口,如果这台计算机响应了这个数据,并且反馈回来一个RST标志的TCP包,就表明这台计算机上没有打开这个端口,但是这台计算机是存在的;如果这台计算机没有反馈回来任何数据包,这就表明,这台被扫描的计算机存在这个端口。

    需要说明的是,金山网镖的日志报告使用的不是这些标志位的全称,而是使用的这些标志位的首字母,比如拦截到一个包含FIN标志的TCP数据包将会报告x.x.x.x的TCP数据包:F。还有一点,你的日志可能报告x.x.x.x的TCP数据包:NULL,这是什么?NULL标明发送给你的数据包不包含任何标志位,你收到这种数据包,很多情况下意味着你被扫描,扫描者发送NULL数据包给你,如果你的计算机发送回去了一个FIN标志的TCP数据包,就表明他探测的端口在你的计算机上不存在,但是你的计算机就已经被确定存在了,这样他就可以使用其他的扫描方式进行端口探测。有一些特殊的扫描方式可以绕过不严谨的防火墙。

    了解到了TCP标志位的含义,就可以了解TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。


TCP窗口(TCP Window):一个16位二进制数。是接收端使用的一个域,它将告诉发送者,它想收到的TCP数据包大小;

TCP校验和(Checksum):这是包含在一个TCP头的中16位二进制校验数值。发送端针对数据包进行一次计算,得到一个数值,然后接收端也会进行同样的计算。这样做是为了充分保证被传送的TCP数据包没有一丝更改,如果接收端进行计算后得到和发送端同样的结果,则表明这个数据包没有更改,反之则表示数据包被更改,将被丢弃;

紧急指针域:这是一个可选的16位二进制指针。所谓指针,就是指向某一个段落或者记录、地址的标志,可以这么理解:你开车走在错综复杂的道路上,不知道该往哪走,这时候一个人用手给你向东方指出,于是你就往东发行驶,这个给你指路的人也就可以理解为指针。这个指针域只有在前面所说的URG标志为存在的时候才会有效。紧急指针指向TCP段内的最后一个字节,用来督促各种网络设备尽快的处理这个数据包;

选项域:一个可变长度的区域,至少有1字节(Byte)。如果这个字节为0,表示没有选项,并且选项域结束;如果为1,表示没有操作;如果为2,表示下四个字节包含了发送端的最大段长度(如果不赋值,表示段没有限制);

可变长填充域:这个域是用来保证可以预测空间大小的。为了保证TCP头是32位的整数倍,这个域会被加入额外的0。

原创粉丝点击