现在的位置: 首页 > 综合 > 正文

TCP/IP协议基础

2012年10月25日 ⁄ 综合 ⁄ 共 7570字 ⁄ 字号 评论关闭
TCP/IP协议基础 

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

1、TCP/IP协议栈 

四层模型 
TCP/IP这个协议遵守一个四层的模型概念:应用层、传输层、互联层和网络接口层。 

网络接口层 
模型的基层是网络接口层。负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。 

互联层 
互联协议将数据包封装成internet数据报,并运行必要的路由算法。 
这里有四个互联协议: 
网际协议IP:负责在主机和网络之间寻址和路由数据包。 
地址解析协议ARP:获得同一物理网络中的硬件主机地址。 
网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。 
互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。 

传输层 
传输协议在计算机之间提供通信会话。传输协议的选择根据数据传输方式而定。 
两个传输协议: 
传输控制协议TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。 
用户数据报协议UDP:提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输小量数据,可靠性则由应用层来负责。 

应用层 
应用程序通过这一层访问网络。 

网络接口技术 
IP使用网络设备接口规范NDIS向网络接口层提交帧。IP支持广域网和本地网接口技术。 

串行线路协议 
TCP/IPG一般通过internet串行线路协议SLIP或点对点协议PPP在串行线上进行数据传送。(是不是我们平时把它称之为异步通信,对于要拿LINUX提供建立远程连接的朋友应该多研究一下这方面的知识)? 

2、ARP 

要在网络上通信,主机就必须知道对方主机的硬件地址(我们不是老遇到网卡的物理地址嘛)。地址解析就是将主机IP地址映射为硬件地址的过程。地址解析协议ARP用于获得在同一物理网络中的主机的硬件地址。 

解释本地IP地址(要了解地址解析工作过程的朋友看好了) 
主机IP地址解析为硬件地址: 
(1)当一台主机要与别的主机通信时,初始化ARP请求。当该IP断定IP地址是本地时,源主机在ARP缓存中查找目标主机的硬件地址。 
(2)要是找不到映射的话,ARP建立一个请求,源主机IP地址和硬件地址会被包括在请求中,该请求通过广播,使所有本地主机均能接收并处理。 
(3)本地网上的每个主机都收到广播并寻找相符的IP地址。 
(4)当目标主机断定请求中的IP地址与自己的相符时,直接发送一个ARP答复,将自己的硬件地址传给源主机。以源主机的IP地址和硬件地址更新它的ARP缓存。源主机收到回答后便建立起了通信。 

解析远程IP地址 
不同网络中的主机互相通信,ARP广播的是源主机的缺省网关。 
目标IP地址是一个远程网络主机的话,ARP将广播一个路由器的地址。 
(1)通信请求初始化时,得知目标IP地址为远程地址。源主机在本地路由表中查找,若无,源主机认为是缺省网关的IP地址。在ARP缓存中查找符合该网关记录的IP地址(硬件地址)。 
(2)若没找到该网关的记录,ARP将广播请求网关地址而不是目标主机的地址。路由器用自己的硬件地址响应源主机的ARP请求。源主机则将数据包送到路由器以传送到目标主机的网络,最终达到目标主机。 
(3)在路由器上,由IP决定目标IP地址是本地还是远程。如果是本地,路由器用ARP(缓存或广播)获得硬件地址。如果是远程,路由器在其路由表中查找该网关,然后运用ARP获得此网关的硬件地址。数据包被直接发送到下一个目标主机。 
(4)目标主机收到请求后,形成ICMP响应。因源主机在远程网上,将在本地路由表中查找源主机网的网关。找到网关后,ARP即获取它的硬件地址。 
(5)如果此网关的硬件地址不在ARP缓存中,通过ARP广播获得。一旦它获得硬件地址,ICMP响应就送到路由器上,然后传到源主机。 

ARP缓存 
为减少广播量,ARP在缓存中保存地址映射以备用。ARP缓存保存有动态项和静态项。动态项是自动添加和删除的,静态项则保留在CACHE中直到计算 
机重新启动。 

ARP缓存总是为本地子网保留硬件广播地址(0xffffffffffffh)作为一个永久项。 
此项使主机能够接受ARP广播。当查看缓存时,该项不会显示。 
每条ARP缓存记录的生命周期为10分钟,2分钟内未用则删除。缓存容量满时,删除最老的记录。 

加入静态(永久)记录 
通过添加静态ARP项可减少ARP请求访问主机的次数。 

ARP包的结构 
ARP结构的字段如下: 
硬件类型--使用的硬件(网络访问层)类型。 
协议类型--解析过程中的协议使用以太类型的值。 
硬件地址长度--硬件地址的字节长度,对于以太网和令牌环来说,其长度为6字节。 
协议地址长度--协议地址字节的长度,IP的长度是4字节。 
操作号--指定当前执行操作的字段。 
发送者的硬件地址--发送者的硬件地址。 
发送者的协议地址--发送者的协议地址。 
目的站硬件地址--目标者的硬件地址。 
目的站协议地址--目标者的协议地址。 

3、ICMP和IGMP 

internet控制消息协议ICMP是用于报告错误并代表IP对消息进行控制。 
IP运用互联组管理协议IGMP来告诉路由器,某一网络上指导组中的可用主机。 

ICMP 
ICMP源抑制消息:当TCP/IP主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个ICMP源抑制消息。 

ICMP数据包结构 
类型:一个8位类型字段,表示ICMP数据包类型。 
代码:一个8位代码域,表示指定类型中的一个功能。如果一个类型中只有一种功能,代码域置为0。 
检验和:数据包中ICMP部分上的一个16位检验和。 
指定类型的数据随每个ICMP类型变化的一个附加数据。 

IGMP 
IGMP信息传给别的路由器以使每个支持多路广播的路由器获知哪个主机组和哪个网络中。 

IGMP包结构 
版本:IGMP的版本,值一般为0x1h。 
类型:IGMP消息的类型。0x1h类型称为主机成员请求,在多路广播路由器上用于指定多级组中的任何成员轮询一个网络。0x2h类型称为主机成员报告,在主机上用于发布指定组中的成员情况或对一个路由器的主机成员请求进行回答。 
未用:未用的域名被发送者置零且被接收者忽略。 
检验和:IGMP头的一个16位检验和。 
组地址:主机用该组地址在一个主机成员请求中存储IP多路广播地址。在主机成员请求中,组地址被全置零,而且硬件级的多路广播地址被用来标示主机组。 

4、IP 

IP是一个无连接的协议,主要就是负责在主机间寻址并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递,另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。 
有一些字段,在当数据从传输层传下来时,会被附加在数据包中,我们来看一下这些字段: 
源IP地址:用IP地址确定数据报发送者。 
目标IP地址:用IP地址确定数据报目标。 
协议:告知目的机的IP是否将包传给TCP或UDP。 
检查和:一个简单的数学计算,用来证实收到的包的完整性。 
TTL生存有效时间:指定一个数据报被丢弃之前,在网络上能停留多少时间(以秒计)。它避免了包在网络中无休止循环。路由器会根据数据在路由器中驻留的时间来递减TTL。其中数据报通过一次路由器,TTL至少减少一秒。 
根据我们前面提到关于ARP的知识,如果IP地址目标为本地地址时,IP将数据包直接传给那个主机;如果目标地址为远程地址的话,IP在本地的路由表中查找远程主机的路由(看来好象我们平时拨114一样)。如果找到一个路由,IP用它传送数据包。如果没找到呢,就会将数据包发送到源主机的缺省网关,也称之为路由器。(很多时候一直在搞网关和路由器的定义,其实我觉得在学的时候不一定死抠概念,现在硬件和软件结合的产品越来越多了,一时很分清的,只要我们运用的时候可以解决实际问题嘛。) 
这样当路由器收到一个包后,该包向上传给IP: 
(1)如果交通阻塞(听起来蛮可怕的),包在路由器中停滞,TTL至少减1或更多。要是它降到0的话,包就会被抛弃。 
(2)如果对于下一网络来说包太大的话,IP会将它分割成若干个小包。 
(3)如果包被分解,IP为每个新包制造一个新头,其中包括:一个标志,用来显示其它小包在其后;一个小包ID,用来确定所有小包是一起的;一个小包偏移,用来告诉接收主机怎么重新组合它们。 
(4)IP计算一个新的检验和。 
(5)IP获取一个路由的目标硬件地址。 
(6)IP转发包。 
在下一主机,包被发送到TCP或UDP。每个路由器都要重复该过程。直到包到达最终目的地。当包到达最终目的地后,IP将小包组装成原来的包。 

5、TCP 

TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。 
通过每个TCP传输的字段指定顺序号,以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据包损坏,接收主机会舍弃它,因为确认未被发送,发送者会重新发送分段。 

端口 
SOCKETS实用程序使用一个协议端口号来标明自己应用的唯一性。端口可以使用0到65536之间的任何数字。在服务请求时,操作系统动态地为客户端的应用程序分配端口号。 

套接字 
套接字在要领上与文件句柄类似,因为其功能是作为网络通信的终结点。一个应用程序通过定义三部分来产生一个套接字:主机IP地址、服务类型(面向连接的服务是TCP,无连接服务是UDP)、应用程序所用的端口。 

TCP端口 
TCP端口为信息的传送提供定地点,端口号小于256的定义为常用端口。 

TCP的三次握手 
TCP对话通过三次握手来初始化。三次握手的目的是使数据段的发送和接收同步;告诉其它主机其一次可接收的数据量,并建立虚连接。 
我们来看看这三次握手的简单过程: 
(1)初始化主机通过一个同步标志置位的数据段发出会话请求。 
(2)接收主机通过发回具有以下项目的数据段表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。 
(3)请求主机再回送一个数据段,并带有确认顺序号和确认号。 

TCP滑动窗口 
TCP滑动窗口用来暂存两台主机间要传送的数据,有点类似CACHE。 
每个TCP/IP主机有两个滑动窗口:一个用于接收数据,另一个用于发送数据。 

6、UDP 

用户数据报协议UDP提供了无连接的数据报服务。它适用于无须应答并且通常一次只传送少量数据的应用软件。 

UDP端口 
端口作为多路复用的消息队列使用。 
15 NETSTAT 网络状态 
53 DOMAIN 域名服务器 
69 TFTP 平凡文件传送协议 
137 NETBIOS-NS NETBIOS命令服务 
138 NETBIOS-DGM NETBIOS数据报服务 
161 SNMP SNMP网络监视器 
--------------------------------------------------------------------------------

实现IP路由 

1、IP路由简介 

路由就是选择一条数据包传输路径的过程。当TCP/IP主机发送IP数据包时,便出现了路由,且当到达IP路由器还会再次出现。路由器是从一个物理网向另一个物理网发送数据包的装置,路由器通常被称为网关。对于发送的主机和路由器而言,必须决定向哪里转发数据包。在决定路由时,IP层查询位于内存中的路由表。 
(1)当一个主机试图与另一个主机通信时,IP首先决定目的主机是一个本地网还是远程网。 
(2)如果目的主机是远程网,IP将查询路由表来为远程主机或远程网选择一个路由。 
(3)若未找到明确的路由,IP用缺省的网关地址将一个数据传送给另一个路由器。 
(4)在该路由器中,路由表再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。 
每发现一条路由,数据包被转送下一级路由器,称为一次“跳步”,并最终发送至目的主机。 
若未发现任何一个路由,源主机将收到一个出错信息。 

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

TCP/IP协议介绍 

TCP/IP的通讯协议 

这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。 

TCP/IP整体构架概述 

TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 

应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 

传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 

网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。 
TCP/IP中的协议 

以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的: 

1. IP 

网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 

高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。 

2. TCP 

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 

TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。 

面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。 

3.UDP 

UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。 

欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。 

4.ICMP 

ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。 

5. TCP和UDP的端口结构 

TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。 

两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认: 
源IP地址---发送包的IP地址。 
目的IP地址---接收包的IP地址。 
源端口---源系统上的连接的端口。 
目的端口---目的系统上的连接的端口。 

端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

抱歉!评论已关闭.