构架概述 IP协议 IP协议-概述,IP协议-整体构架

IP是英文Internet Protocol(网络之间互连的协议)的缩写,中文简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。IP地址具有唯一性,根据用户性质的不同,可以分为5类。另外,IP还有进入防护,知识产权,指针寄存器等含义。

ip协议_IP协议 -概述


IP协议

IP协议定义在OSI-RM第三层―――网络层,是internet最重要的协议。在IP协议中规定了在internet上进行通信时应遵守的规则,例如IP数据包的组成、路由器如何将IP数据包送到目的主机等。

各种物理网络在链路层(二层)所传输的基本单元为帧(MAC帧),其帧格式随物理网络而异,各物理网络的物理地址(MAC地址)也随物理网络而异。IP协议的作用就是向传输层(TCP层)提供统一的IP包,即将各种不同类型的MAC帧转换为统一的IP包,并将MAC帧的物理地址变换为全网统一的逻辑地址(IP地址)。这样,这些不同物理网络MAC帧的差异对上层而言就不复存在了。正因为这一转换,才实现了不同类型物理网络的互联。

IP协议面向无连接,IP网中的节点路由器根据每个IP包的包头IP地址进行寻址,这样同一个主机发出的属于同一报文的IP包可能会经过不同的路径到达目的主机.

ip协议_IP协议 -整体构架

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

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

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

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

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

ip协议_IP协议 -IP

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

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

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

ip协议_IP协议 -TCP

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

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

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

ip协议_IP协议 -UDP

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

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

ip协议_IP协议 -ICMP

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

ip协议_IP协议 -TCP和UDP的端口结构

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

两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:

源IP地址 发送包的IP地址。

目的IP地址 接收包的IP地址。

源端口 源系统上的连接的端口。

目的端口 目的系统上的连接的端口。

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

ip协议_IP协议 -TCP/IP

TCP/IP其实是两个网络基础协议:IP协议、TCP协议名称的组合。下面我们分别来看看这两个无处不在的协议。

IP协议

IP(Internet Protocol)协议的英文名直译就是:因特网协议。从这个名称我们就可以知道IP协议的重要性。在现实生活中,我们进行货物运输时都是把货物包装成一个个的纸箱或者是集装箱之后才进行运输,在网络世界中各种信息也是通过类似的方式进行传输的。IP协议规定了数据传输时的基本单元和格式。如果比作货物运输,IP协议规定了货物打包时的包装箱尺寸和包装的程序。 除了这些以外,IP协议还定义了数据包的递交办法和路由选择。同样用货物运输做比喻,IP协议规定了货物的运输方法和运输路线。

TCP协议

我们已经知道了IP协议很重要,IP协议已经规定了数据传输的主要内容,那TCP(Transmission Control Protocol)协议是做什么的呢?不知大家发现没有,在IP协议中定义的传输是单向的,也就是说发出去的货物对方有没有收到我们是不知道的。就好像8毛钱一份的平信一样。那对于重要的信件我们要寄挂号信怎么办呢?TCP协议就是帮我们寄“挂号信”的。TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定。简单的说在TCP模式中,对方发一个数据包给你,你要发一个确认数据包给对方。通过这种确认来提供可靠性。

TCP/IP(Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。TCP/IP协议的开发工作始于70年代,是用于互联网的第一套协议。

ip协议_IP协议 -TCP/IP参考模型

TCP/IP协议的开发研制人员将Internet分为五个层次,以便于理解,它也称为互联网分层模型或互联网分层参考模型,如下表:

应用层(第五层)

传输层(第四层)

互联网层(第三层)

网络接口层(第二层)

物理层(第一层)

物理层:对应于网络的基本硬件,这也是Internet物理构成,即我们可以看得见的硬设备,如PC机、互连网服务器、网络设备等,必须对这些硬设备的电气特性作一个规范,使这些设备都能够互相连接并兼容使用。

网络接口层:它定义了将资料组成正确帧的规程和在网络中传输帧的规程,帧是指一串资料,它是资料在网络中传输的单位。

互联网层:本层定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标的“信息包”转发机制。

传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。

应用层:它定义了应用程序使用互联网的规程。

ip协议_IP协议 -网间协议IP

Internet 上使用的一个关键的底层协议是网际协议,通常称IP协议。我们利用一个共同遵守的通信协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种“语言”。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的约定。

计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。

网际协议IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入 Internet 了。

如果希望能在 Internet 上进行交流和通信,则每台连上 Internet 的计算机都必须遵守IP协议。为此使用 Internet 的每台计算机都必须运行IP软件,以便时刻准备发送或接收信息。

IP协议对于网络通信有着重要的意义:网络中的计算机通过安装IP软件,使许许多多的局域网络构成了一个庞大而又严密的通信系统。从而使 Internet 看起来好像是真实存在的,但实际上它是一种并不存在的虚拟网络,只不过是利用IP协议把全世界上所有愿意接入 Internet 的计算机局域网络接收起来,使得它们彼此之间都能够通信。

ip协议_IP协议 -传输控制协议TCP

尽管计算机通过安装IP软件,从而保证了计算机之间可以发送和接收资料,但IP协议还不能解决资料分组在传输过程中可能出现的问题。因此,若要解决可能出现的问题,连上 Internet 的计算机还需要安装TCP协议来提供可靠的并且无差错的通信服务。

TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收资料以及终止连接。

传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在 Internet 暂时出现堵塞的情况下,TCP也能够保证通信的可靠。

众所周知, Internet 是一个庞大的国际性网络,网络上的拥挤和空闲时间总是交替不定的,加上传送的距离也远近不同,所以传输资料所用时间也会变化不定。TCP协议具有自动调整“超时值”的功能,能很好地适应 Internet 上各种各样的变化,确保传输数值的正确。

因此,从上面我们可以了解到:IP协议只保证计算机能发送和接收分组资料,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。

综上所述,虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的。只有两者的结合,才能保证 Internet 在复杂的环境下正常运行。凡是要连接到 Internet 的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称作TCP/IP协议。

ip协议_IP协议 -IP地址及其分类

在Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机。为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样,才不至于在传输资料时出现混乱。

Internet的网络地址是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。

我们都已经知道,Internet是由几千万台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。

目前,在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1,这种书写方法叫做点数表示法。

IP地址可确认网络中的任何一个网络和计算机,而要识别其它网络或其中的计算机,则是根据这些IP地址的分类来确定的。一般将IP地址按节点计算机所在网络规模的大小分为A,B,C三类,默认的网络屏蔽是根据IP地址中的第一个字段确定的。

ip协议_IP协议 -A类地址B类地址

1. A类地址

A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络屏蔽为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。

2. B类地址

B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络屏蔽为:255.255.0.0;B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。

ip协议_IP协议 -C类地址

C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络屏蔽为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,最后一组数字作为网络上的主机地址。

RFC 1918留出了3块IP地址空间(1个A类地址段,16个B类地址段,256个C类地址段)作为私有的内部使用的地址。在这个范围内的IP地址不能被路由到Internet骨干网上;Internet路由器将丢弃该私有地址。

IP地址类别RFC 1918内部地址范围

A类10.0.0.0到10.255.255.255

B类172.16.0.0到172.31.255.255

C类192.168.0.0到192.168.255.255

使用私有地址将网络连至Internet,需要将私有地址转换为公有地址。这个转换过程称为网络地址转换(Network Address Translation,NAT),通常使用路由器来执行NAT转换。

实际上,还存在着D类地址和E类地址。但这两类地址用途比较特殊,在这里只是简单介绍一下:D类地址称为广播地址,供特殊协议向选定的节点发送信息时用。E类地址保留给将来使用。

连接到Internet上的每台计算机,不论其IP地址属于哪类都与网络中的其它计算机处于平等地位,因为只有IP地址才是区别计算机的唯一标识。所以,以上IP地址的分类只适用于网络分类

ip协议_IP协议 -特殊的IP地址

在Internet中,一台计算机可以有一个或多个IP地址,就像一个人可以有多个通信地址一样,但两台或多台计算机却不能共享一个IP地址。如果有两台计算机的IP地址相同,则会引起异常现象,无论哪台计算机都将无法正常工作。

顺便提一下几类特殊的IP地址:

1. 广播地址 目的端为给定网络上的所有主机,一般主机段为全0

2. 单播地址 目的端为指定网络上的单个主机地址

3. 组播地址 目的端为同一组内的所有主机地址

4. 环回地址 127.0.0.1 在环回测试和广播测试时会使用

ip协议_IP协议 -子网划分

若公司不上Internet,那一定不会烦恼IP地址的问题,因为可以任意使用所有的IP地址,不管是A Class或是B Class,这个时候不会想到要用Sub Net,但若是上Internet那IP地址便弥足珍贵了,目前全球一阵Internet热,IP Address已经愈来愈少了,而所申请的IP Address目前也趋保守,而且只有经申请的IP Address能在Internet使用,但对某些公司只能申请到一个C CLass的IP Address,但又有多个点需要使用,那这时便需要使用到Subnet,这就需要考虑子网的划分,下面简介Subnet的原理及如何规划。

Subnet Mask的介绍

设定任何网络上的任何设备不管是主机、PC、Router等皆需要设定IP Address,而跟随着IP Address的是所谓的NetMask,这个NetMask主要的目的是由IP Address中也能获得NetworkNumber,也就是说IP Address和Net Mask作AND而得到Network Number,如下所示:

IP Address

192.10.10.6 11000000.00001010.00001010.00000110

NetMask

255.255.255.0 11111111.11111111.11111111.00000000

AND

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

Network Number

192.10.10.0 11000000.00001010.00001010.00000000

NetMask有所谓的默认值,如下所示

Class IP Address 范围 Net Mask

A1.0.0.0-126.255.255.255 255.0.0.0

B128.0.0.0-191.255.255.255 255.255.0.0

C192.0.0.0-223.255.255.255 255.255.255.0

在预设的Net Mask都只有255的值,在谈到Subnet Mask时这个值便不一定是255了。在完整一组C Class中如203.67.10.0-203.67.10.255 NetMask255.255.255.0,203.67.10.0称之Network Number(将IP Address和Netmask作AND),而203.67.10.255是Broadcast的IP Address,所以这两者皆不能使用,实际只能使用203.67.10.1--203.67.10.254等254个IP Address,这是以255.255.255.0作NetMask的结果,而所谓Subnet Msk尚可将整组C Class分成数组Network Number,这要在NEtMask作手脚,若是要将整组C CLass分成2个Network Number那NetMask设定为255.255.255.192,若是要将整组C CLass分成8组Network Number则NetMask要为255.255.255.224,这是怎么来的,由以上知道Network Number是由IP Address和NetMask作AND而来的,而且将NetMask以二进制表示法知道是1的会保留,而为0的去掉

192.10.10.193--11000000.00001010.00001010.10000001

255.255.255.0--11111111.11111111.11111111.00000000

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

192.10.10.0--11000000.00001010.00001010.00000000

以上是以255.255.255.0为Net Mask的结果,Network Number是192.10.10.0,若是使用255.255.255.224作Net Mask结果便有所不同

192.10.10.193--11000000.00001010.00001010.10000000

255.255.255.224--11111111.11111111.11111111.11100000

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

192.10.10.192--11000000.00001010.00001010.10000000

此时Network Number变成了192.10.10.192,这便是Subnet。那要如何决定所使用的NetMask,255.255.255.224以二进制表示法为11111111.11111111.11111111.11100000,变化是在最后一组,11100000便是224,以三个Bit可表示2的3次方便是8个Network Number

ip协议_IP协议 -NetMask二进制表示法

NetMask二进制表示法可分几个Network
255.255.255.011111111.11111111.11111111.000000001
255.255.255.128
11111111.11111111.11111111.100000002
255.255.255.192
11111111.11111111.11111111.110000004
255.255.255.224
11111111.11111111.11111111.111000008
255.255.255.240
11111111.11111111.11111111.1111000016
255.255.255.248
11111111.11111111.11111111.1111100032
255.255.255.252
11111111.11111111.11111111.1111110064
以下使用255.255.255.224将CClass203.67.10.0分成8组Net work Number,各个Network Number及其Broadcast IP Address及可使用之IP Address序号Network Number Broadcast可使用之IP Address
(1)203.67.10.0--203.67.10.31
203.67.10.1--203.67.10.30
(2)203.67.10.32--203.67.10.63
203.67.10.33--203.67.10.62
(3)203.67.10.64--203.67.10.95
203.67.10.65--203.67.10.94
(4)203.67.10.96--203.67.10.127
203.67.10.97--203.67.10.126
(5)203.67.10.128--203.67.10.159
203.67.10.129--203.67.10.158
(6)203.67.10.160--203.67.10.191
203.67.10.161--203.67.10.190
(7)203.67.10.192--203.67.10.223
203.67.10.193--203.67.10.222
(8)203.67.10.224--203.67.10.255
203.67.10.225--203.67.10.254
可验证所使用的IP Address是否如上表所示
203.67.10.115--11001011.01000011.00001010.01110011
255.255.255.224--11111111.11111111.11111111.11100000
--------------------------------------------------------------
203.67.10.96--11001011.01000011.00001010.01100000
203.67.10.55--11001011.01000011.00001010.00110111
255.255.255.224--11111111.11111111.11111111.11100000
--------------------------------------------------------------
203.67.10.32--11001011.01000011.00001010.00100000
其它的NetMask所分成的NetworkNumber可自行以上述方法自行推演出来

ip协议_IP协议 -Subnet应用

使用Subnet是要解决只有一组C Class但需要数个Network Number的问题,并不是解决IP Address不够用的问题,因为使用Subnet反而能使用的IP Address会变少,Subnet通常是使用在跨地域的网络互联之中,两者之间使用Router连线,同时也上Internet,但只申请到一组C Class IP Address,过Router又需不同的Network,所以此时就必须使用到Subnet,当然二网络间也可以Remote Bridge连接,那便没有使用Subnet的问题。

完美测试TCP/IP协议简介

安装网络硬件和网络协议之后,我们一般要进行TCP/IP协议的测试工作,那么怎样测试才算是比较全面的测试呢?我们认为,全面的测试应包括局域网和互联网两个方面,因此应从局域网和互联网两个方面测试,以下是我们在实际工作中利用命令行测试TCP/IP配置的步骤:

1、 单击“开始”/“运行”,输入CMD按回车,打开命令提示符窗口。

2、 首先检查IP地址、子网掩码、默认网关、DNS服务器地址是否正确,输入命令ipconfig /all,按回车。此时显示了你的网络配置,观查是否正确。

3、 输入ping 127.0.0.1,观查网卡是否能转发数据,如果出现“Request timed out”,表明配置差错或网络有问题。

4、 Ping一个互联网地址,如ping 202.102.128.68,看是否有数据包传回,以验证与互联网的连接性。

构架概述 IP协议 IP协议-概述,IP协议-整体构架

5、 Ping 一个局域网地址,观查与它的连通性。

6、 用nslookup测试DNS解析是否正确,输入如nslookup www.ccidnet.com,查看是否能解析。

如果你的计算机通过了全部测试,则说明网络正常,否则网络可能有不同程度的问题。在此不展开详述。不过,要注意,在使用 ping命令时,有些公司会在其主机设置丢弃ICMP数据包,造成你的ping命令无法正常返回数据包,不防换个网站试试。

ip协议_IP协议 -TCP/IP 协议簇

TCP/IP 协议簇

TCP/IP(Transmission Control Protocol/Internet Protocol)已成为一个事实上的工业标准。

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。

TCP和IP是TCP/IP协议簇的中间两层,是整个协议簇的核心,起到了承上启下的作用。

ip协议_IP协议 -接口层网络层

1、接口层

TCP/IP的最低层是接口层,常见的接口层协议有:

Ethernet 802.3、Token Ring 802.5、X.25、Frame reley、HDLC、PPP等。

2、网络层

包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)

控制报文协议、ARP(Address resolutionProtocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。

IP是网络层的核心,通过路由选择将下一跳IP封装后交给接口层。IP数据报是无连接服务。

ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。

Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。

ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。

RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站和DHCP服务。

ip协议_IP协议 -传输层

传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram rotocol)。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯时完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证

ip协议_IP协议 -应用层

应用层一般是面向用户的服务。如FTP、TELNET、DNS、SMTP、POP3。

FTP(File Transmision Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。

Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。

DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换。

SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转。

POP3(Post Office Protocol3)是邮局协议第3版本,用于接收邮件。

数据格式:

数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)

IP数据包:IP头部+TCP数据信息 (IP头包括源和目标主机IP地址、类型、生存期等)

TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)

ip协议_IP协议 -TCP/IP的实现

这是一个给予UDP协议的TCP/IP网络的C程序实现。客户端应用层发起会话层的socket调用,在到达远端后,服务器端应用程序屏幕输出字符串 Hello World

第一步 创建文件名为server.c的文件,然后拷贝以下代码到此文件:

#include

#include

#include

#include

#include

#include

#define MAXBUF 256

main()

{

char buf[MAXBUF];

int passiveSocket;

socklen_t clientAddrLen;

structsockaddr_in serverAddr;

structSOCKADDR_INclientAddr;

passiveSocket=socket(AF_INET,SOCK_DGRAM,0);

memset(&serverAddr,0,sizeof(serverAddr));

serverAddr.sin_family=AF_INET;

serverAddr.sin_port=htons(1234);

serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);/* serverAddr.sin_addr.s_addr =inet_addr(”127.0.0.1″); */

if(bind (passiveSocket,(struct sockaddr *)&serverAddr,sizeof(serverAddr))==-1)

printf (”bind Error!”);

clientAddrLen=sizeof(serverAddr);

memset(buf,0,MAXBUF);

for(;;)

{

if(recvfrom(passiveSocket,buf,MAXBUF,0,(struct sockaddr *)&clientAddr,&clientAddrLen)>0)

{

printf(”Come from Client is : %sn”, buf);

memset (buf,0,sizeof(buf));

}

}

} .

第二步 编译并运行server程序.在命令行下进入到server.c所在的文件夹,输入下列命令(黑体字为输入部分)

[root@Linux test]#gcc -c server.c

[root@Linux test]#gcc -o server server.o

[root@website program]#./server

第三步 完成以上步骤,server程序已经运行,这个窗口不要关,另开一个新窗口,输入

[root@Linux test]# netstat -an | grep 1234

udp 0 0 0.0.0.0:1234 0.0.0.0:*

您会发现运行中的server程序已经被捆绑在udp的1234端口.

第四步 创建文件名为client.c的文件,然后拷贝以下代码到此文件:

#include

#include

#include

#include

#include

#include

#define MAXBUF 256

main()

{

char buf[MAXBUF]=”Hello World”;

int activeSocket;

struct sockaddr_in remoteAddr;

struct sockaddr_in localAddr;

structhostent*hptr;

activeSocket=socket(AF_INET,SOCK_DGRAM,0);

memset(&remoteAddr,0,sizeof(remoteAddr));

remoteAddr.sin_family=AF_INET;

remoteAddr.sin_port=htons(1234);

remoteAddr.sin_addr.s_addr=inet_addr(”127.0.0.1″);

/*hptr=gethostbyname(”www.aorb.org”);

memcpy((char*)&remoteAddr.sin_addr.s_addr,hptr->h_addr_list[0],hptr->h_length);*/

printf(”Remote IP address is: %s…n”,inet_ntoa(remoteAddr.sin_addr));

sendto (activeSocket,buf,sizeof(buf),0,(struct sockaddr *)&remoteAddr,sizeof(remoteAddr));

printf(”Send Success!n”);

memset (buf,0,sizeof(buf));

close(activeSocket);

}

第五步 编译并运行client程序.打开一个新命令窗口,在命令行下进入到client.c所在的文件夹,输入下列命令:

[root@Linux test]#gcc -c client.c

[root@Linux test]#gcc -o client client.o

[root@Linux test]#./client

第六步 观察效果.现在点到server程序运行的窗口,看是不是出现了这样一句话

Come from Client is : Hello World

上面的Hello World这句话就是客户端client.c发来的.

程序注释

server.c

#include

#include

#include

#include

#include

#include

以上是加载头文件,头文件里定义了一些程序运行时需要的东东,不用管它.

#define MAXBUF 256

定义了常量MAXBUF的值256,下面会用到.当然您也可以不用定义,在后面的数组里直接写256这个数字也可以

main()

{

char buf[MAXBUF];字符串数组buf的大小是256

int passiveSocket;定义一个int类型的变量passiveSocket,它用来存储套接字描述符

socklen_t clientAddrLen;定义一个socklen_t类型的变量clientAddrlen,用来接收客户端地址的长度

struct sockaddr_in serverAddr;定义一个sockaddr_in类型的结构变量serverAddr,用来存储服务器端的IP地址,端口等信息

struct sockaddr_in serverAddr;定义一个sockaddr_in类型的结构变量serverAddr,用来存储服务器端的IP地址,端口等信息

struct sockaddr_in clientAddr;定义一个sockaddr_in类型的结构变量clientAddr,用来存储客户端的IP地址,端口等信息

passiveSocket=socket(AF_INET,SOCK_DGRAM,0);socket函数需要传递3个值: 对于使用IPV4的网络接口,第1个参数必须是AF_INET.由于是UDP传输方式,第2个参数必须是SOCK_DGRAM.对于使用TCP或者UDP的传输,第3个参数都设置为0

memset(&serverAddr,0,sizeof(serverAddr));初始化变量serverAddr,使其为数字0

serverAddr.sin_family=AF_INET;把serverAddr结构中的sin_family变量赋值为AF_INET,这个值表示TCP/IP网络

serverAddr.sin_port=htons(1234);把serverAddr结构中的sin_port变量赋值为1234,这个值代表服务器的接收端口为1234,您可以自行设置.htons函数是必须的,它把主机字节顺序转换为网络字节顺序

serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);/* serverAddr.sin_addr.s_addr = inet_addr(”127.0.0.1″); */设置要绑定服务器的哪个IP地址.使用INADDR_ANY可以把服务器绑定在本机的所有IP地址.也可以使用inet_addr捆绑在特定端口.因为IP地址是32位的,所以需要使用htonl来转换网络字节顺序,而htons是用来转换2个字节16位的端口地址.

if(bind (passiveSocket,(struct sockaddr *)&serverAddr,sizeof(serverAddr))==-1)

printf (”bind Error!”);使用bind函数把刚才创建的套接字描述符passiveSocket与服务器套接字结构serverAddr捆绑在一起.

clientAddrLen=sizeof(serverAddr);

memset(buf,0,MAXBUF);初始化buf数组,设置为数字0

for(;;)因为是服务器端程序,需要一直打开接收来自客户端的请求,所以必须创建一个死循环

{

if(recvfrom(passiveSocket,buf,MAXBUF,0,(struct sockaddr *)&clientAddr,&clientAddrLen)>0)利用recvfrom函数接收来自客户端的信息,并把信息存放在数组buf中.同时也把客户端的地址存放在了clientAddr中,方便信息的回送,本例服务器端为使用回送.

{

printf(”Come from Client is : %sn”, buf);打印输出来buf中自客户端的信息

memset (buf,0,sizeof(buf));清空buf

}

}

}

client.c

#include

#include

#include

#include

#include

#include

以上是加载头文件,头文件里定义了一些程序运行时需要的数据.

#define MAXBUF 256 定义了常量MAXBUF的值256,下面会用到.当然您也可以不用定义,在后面的数组里直接写256这个数字也可以

main()

{

char buf[MAXBUF]=”Hello World”;给buf数组赋值为Hello World,这个字符串是后面要传送给服务器的信息.

int activeSocket;定义一个整型变量activeSocket,它用来存储套接字描述符.

struct sockaddr_in remoteAddr;同server.c中注释,设置Internet套接字地址结构变量remoteAddr

struct sockaddr_in localAddr;同server.c中注释,设置Internet套接字地址结构变量localAddr

struct hostent *hptr; 如果链接远程服务器使用URL的方式,则需定义此变量用来接收解析后的IP地址.

activeSocket=socket(AF_INET,SOCK_DGRAM,0);同server.c中的注释,创建一个套接字结构,成功创建后把返回的套接字描述符存储在activeSocket

memset(&remoteAddr,0,sizeof(remoteAddr));同server.c中的注释

remoteAddr.sin_family=AF_INET;同server.c中注释

remoteAddr.sin_port=htons(1234);设置远程服务器的端口地址

remoteAddr.sin_addr.s_addr=inet_addr(”127.0.0.1″);设置远程服务器的IP地址,本例因为服务器和客户端在同一台机器上,所以使用同一个地址.

/*hptr=gethostbyname(”www.aorb.org”);

memcpy((char*)&remoteAddr.sin_addr.s_addr,hptr->h_addr_list[0],hptr->h_length);*/

如果链接远程服务器使用URL,则需要用gethostbyname函数得到预解析URL的地址储存在hptr结构中,然后把hptr结构中的h_addr_list[0]值拷贝到套接字remoteAddr.sin_addr.s_addr变量. memcpy函数就是起到拷贝的作用.

printf(”Remote IP address is: %s…n”,inet_ntoa(remoteAddr.sin_addr));显示远程服务器的地址,这一步不是必须的.

sendto (activeSocket,buf,sizeof(buf),0,(struct sockaddr *)&remoteAddr,sizeof(remoteAddr));发从存储在数组buf中的信息,也就是发送”Hello World”字符串到remoteAddr中指定的IP地址与端口.

printf(”Send Success!n”);如果sendto成功则显示Send Success!

memset (buf,0,sizeof(buf));重置buf数组

close(activeSocket);关闭activeSocket套接字释放内存.

}

  

爱华网本文地址 » http://www.aihuau.com/a/8103480103/112429.html

更多阅读

BIT北漂系列(3)——HDLC协议原理及其概述_雪无痕 hdlc帧

HDLC协议原理及其概述北京理工大学 数字通信技术研究所 黄英杰摘要:HDLC:High Level Data LinkControl(高级数据链路控制规程)。是面向比特的数据链路控制协议的典型代表,它是由国际标准化组织(ISO)定制的,为在比特同步物理层上的数据链

HDLC 协议概述 hdlc协议配置

高级数据链路控制(High-Level Data Link Control或简称HDLC),是一个在同步网上传输 数据、面向比特的数据链路层协议,它是由国际标准化组织(ISO)根据IBM公司的SDLC(Synchronous Data Link Control)协议扩展开发而成的.链路控制协议着重

GRE隧道技术简介 gre是几层隧道协议

隧道技术概述:一种技术(协议)或者策略的两个或多个子网穿过另一种技术(协议)或者策略的网络实现互联,称之为overlaytopology,这一技术是电信技术的永恒主题之一。电信技术在发展,多种网络技术并存,一种技术的网络孤岛可能需要穿过另一种技术

IPX协议简介 ipx协议下载

1.1 概述IPX协议是NovellNetWare网络的网络层协议。它是一个无连接的协议,并不确认包是否转发成功,也不保证包到达目的地的顺序。包转发成功与否和连接控制等功能都必须由位于IPX上层的协议来提供。在IPX中,任何一个IPX包都被认为是一

声明:《构架概述 IP协议 IP协议-概述,IP协议-整体构架》为网友愁酒几壶分享!如侵犯到您的合法权益请联系我们删除