志在指尖
用双手敲打未来

TCPIP的协议构成和技术特性

TCP/IP是供已衔接因特网的核算机进行通讯的通讯协议。
是指传输操控协议/网际协议(TransmissionControlProtocol/InternetProtocol)。它界说了电子设备(比方核算机)怎样连入因特网,以及数据如安在它们之间传输的规范。TCP/IP的通讯协议
这部分简要介绍一下TCP/IP的内部结构,为评论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是由于它能够用在各式各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。切当地说,TCP/IP协议是一组包含TCP协议和IP协议,UDP(UserDatagramProtocol)协议、ICMP(InternetControlMessageProtocol)协议和其他一些协议的协议组。
TCP/IP整体构架概述
TCP/IP协议并不彻底符合OSI的七层参阅模型。传统的开放式体系互连参阅模型,是一种通讯协议的7层笼统的参阅模型,其间每一层履行某一特定任务。该模型的意图是使各种硬件在相同的层次上互相通讯。这7层是:物理层、数据链路层、网络层、传输层、会话层、标明层和运用层。而TCP/IP通讯协议选用了4层的层级结构,每一层都呼叫它的下一层所供给的网络来完结自己的需求。这4层分别为:
运用层:运用程序间沟通的层,如简略电子邮件传输(SMTP)、文件传输协议(FTP)、网络长途拜访协议(Telnet)等。
传输层:在此层中,它供给了节点间的数据传送服务,如传输操控协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层担任传送数据,并且承认数据已被送达并接纳。
互连网络层:担任供给根本的数据封包传送功用,让每一块数据包都能够抵达意图主机(但不检查是否被正确接纳),如网际协议(IP)。
网络接口层:对实践的网络媒体的办理,界说怎样运用实践网络(如Ethernet、SerialLine等)来传送数据。
TCP/IP中的协议
以下简略介绍TCP/IP中的协议都具有什么样的功用,都是怎样作业的:TCP
1.IP
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。
IP层接纳由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接纳来的数据包传送到更低层。IP数据包是不牢靠的,由于IP并没有做任何事情来承认数据包是按次序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接纳它的主机的地址(意图地址)。
高层的TCP和UDP服务在接纳数据包时,一般假设包中的源地址是有用的。也能够这样说,IP地址形成了许多服务的认证基础,这些服务信任数据包是从一个有用的主机发送来的。IP承认包含一个选项,叫作IPsourcerouting,能够用来指定一条源地址和意图地址之间的直接途径。关于一些TCP和UDP的服务来说,运用了该选项的IP包好像是从途径上的最终一个体系传递过来的,而不是来自于它的实在地址。这个选项是为了测验而存在的,阐明了它能够被用来诈骗体系来进行平常是被禁止的衔接。那么,许多依托IP源地址做承认的服务将产生问题并且会被不合法侵略。
2.TCP
假如IP数据包中有现已封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,一起完结虚电路间的衔接。TCP数据包中包含序号和承认,所以未按照次序收到的包能够被排序,而损坏的包能够被重传。
TCP将它的信息送到更高层的运用程序,例如Telnet的服务程序和客户程序。运用程序轮番将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最终到接纳方。
面向衔接的服务(例如Telnet、FTP、rlogin、XWindows和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。这些端口号是‘广为人知’的,由于在树立与特定的主机或服务的衔接时,需求这些地址和意图地址进行通讯。
IP(InternetProtocol)协议的英文名直译便是:因特网协议。从这个称号咱们就能够知道IP协议的重要性。在现实生活中,咱们进行货品运送时都是把货品包装成一个个的纸箱或者是集装箱之后才进行运送,在网络世界中各种信息也是经过相似的方法进行传输的。IP协议规矩了数据传输时的根本单元和格局。假如比作货品运送,IP协议规矩了货品打包时的包装箱尺寸和包装的程序。除了这些以外,IP协议还界说了数据包的递送办法和路由选择。相同用货品运送做比喻,IP协议规矩了货品的运送办法和运送路线。
TCP协议
咱们现已知道了IP协议很重要,IP协议现已规矩了数据传输的主要内容,那TCP(TransmissionControlProtocol)协议是做什么的呢?不知大家发现没有,在IP协议中界说的传输是单向的,也便是说宣布去的货品对方有没有收到咱们是不知道的。就好像8毛钱一份的平信相同。那关于重要的函件咱们要寄挂号信怎样办呢?TCP协议便是帮咱们寄“挂号信”的。TCP协议供给了牢靠的面向对象的数据流传输服务的规矩和约定。简略的说在TCP模式中,对方发一个数据包给你,你要发一个承认数据包给对方。经过这种承认来供给牢靠性。
TCP/IP(TransmissionControlProtocol/InternetProtocol的简写,中文译名为传输操控协议/互联网络协议)协议是Internet最根本的协议,简略地说,便是由底层的IP协议和TCP协议组成的。TCP/IP协议的开发作业始于70年代,是用于互联网的榜首套协议。
1.1TCP/IP参阅模型
TCP/IP协议并不彻底符合OSI的七层参阅模型。传统的开放式体系互连参阅模型,是一种通讯协议的7层笼统的参阅模型,其间每一层履行某一特定任务。该模型的意图是使各种硬件在相同的层次上互相通讯。这7层是:物理层、数据链路层、网路层、传输层、话路层、标明层和运用层。而TCP/IP通讯协议选用了4层的层级结构,每一层都呼叫它的下一层所供给的网络来完结自己的需求。这4层分别为:
运用层:运用程序间沟通的层,如简略电子邮件传输(SMTP)、文件传输协议(FTP)、网络长途拜访协议(Telnet)等。
传输层:在此层中,它供给了节点间的数据传送服务,如传输操控协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层担任传送数据,并且承认数据已被送达并接纳。
互连网络层:担任供给根本的数据封包传送功用,让每一块数据包都能够抵达意图主机(但不检查是否被正确接纳),如网际协议(IP)。
网络接口层:对实践的网络媒体的办理,界说怎样运用实践网络(如Ethernet、SerialLine等)来传送数据。
1.2网间协议IP
Internet上运用的一个要害的底层协议是网际协议,一般称IP协议。咱们运用一个一起恪守的通讯协议,从而使Internet成为一个允许衔接不同类型的核算机和不同操作体系的网络。要使两台核算机互相之间进行通讯,有必要使两台核算机运用同一种”言语”。通讯协议正像两台核算机沟通讯息所运用的一起言语,它规矩了通讯双方在通讯中所应一起恪守的约定。
核算机的通讯协议精确地界说了核算机在互相通讯进程的一切细节。例如,每台核算机发送的信息格局和含义,在什么情况下应发送规矩的特别信息,以及接纳方的核算机应做出哪些应对等等。
网际协议IP协议供给了能适应各式各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只需能够从一个地址向另一个地址传送二进制数据,就能够运用IP协议加入Internet了。
假如希望能在Internet上进行沟通和通讯,则每台连上Internet的核算机都有必要恪守IP协议。为此运用Internet的每台核算机都有必要运转IP软件,以便时刻准备发送或接纳信息。
IP协议关于网络通讯有着重要的含义:网络中的核算机经过装置IP软件,使许许多多的局域网络构成了一个巨大而又严密的通讯体系。从而使Internet看起来好像是实在存在的,但实践上它是一种并不存在的虚拟网络,只不过是运用IP协议把全世界上一切愿意接入Internet的核算机局域网络衔接起来,使得它们互相之间都能够通讯。
1.3传输操控协议TCP
虽然核算机经过装置IP软件,从而确保了核算机之间能够发送和接纳材料,但IP协议还不能处理材料分组在传输进程中或许呈现的问题。因而,若要处理或许呈现的问题,连上Internet的核算机还需求装置TCP协议来供给牢靠的并且无差错的通讯服务。
TCP协议被称作一种端对端协议。这是由于它为两台核算机之间的衔接起了重要效果:当一台核算机需求与另一台长途核算机衔接时,TCP协议会让它们树立一个衔接、发送和接纳材料以及停止衔接。
传输操控协议TCP协议运用重发技能和拥塞操控机制,向运用程序供给牢靠的通讯衔接,使它能够主动适应网上的各种改变。即使在Internet暂时呈现阻塞的情况下,TCP也能够确保通讯的牢靠。
众所周知,Internet是一个巨大的国际性网络,网络上的拥挤和闲暇时刻总是交替不定的,加上传送的间隔也远近不同,所以传输材料所用时刻也会改变不定。TCP协议具有主动调整”超时值”的功用,能很好地适应Internet上各式各样的改变,确保传输数值的正确。
因而,从上面咱们能够了解到:IP协议只确保核算机能发送和接纳分组材料,而TCP协议则可供给一个牢靠的、可流控的、全双工的信息流传输服务。
综上所述,虽然IP和TCP这两个协议的功用不尽相同,也能够分开独自运用,但它们是在同一时期作为一个协议来设计的,并且在功用上也是互补的。只需两者的结合,才能确保Internet在杂乱的环境下正常运转。但凡要衔接到Internet的核算机,都有必要一起装置和运用这两个协议,因而在实践中常把这两个协议统称作TCP/IP协议。
1.4IP地址及其分类
在Internet上衔接的一切核算机,从大型机到微型核算机都是以独立的身份呈现,咱们称它为主机。为了完结各主机间的通讯,每台主机都有必要有一个仅有的网络地址。就好像每一个住宅都有仅有的门牌相同,才不至于在传输材料时呈现紊乱。
Internet的网络地址是指连入Internet网络的核算机的地址编号。所以,在Internet网络中,网络地址仅有地标识一台核算机。
咱们都现已知道,Internet是由几千万台核算机互相衔接而成的。而咱们要承认网络上的每一台核算机,靠的便是能仅有标识该核算机的网络地址,这个地址就叫做IP(InternetProtocol的简写)地址,即用Internet协议言语标明的地址。
现在,在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来标明,并且,用点分开的每个字节的数值规模是0~255,如202.116.0.1,这种书写办法叫做点数标明法。
IP地址可承认网络中的任何一个网络和核算机,而要辨认其它网络或其间的核算机,则是依据这些IP地址的分类来承认的。一般将IP地址按节点核算机地点网络规划的巨细分为A,B,C三类,默许的网络屏蔽是依据IP地址中的榜首个字段承认的。
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类网络用榜首、二组数字标明网络的地址,后边两组数字代表网络上的主机地址。
3.C类地址
C类地址的标明规模为:192.0.0.0~223.255.255.255,默许网络屏蔽为:255.255.255.0;C类地址分配给小型网络,如一般的局域网,它可衔接的主机数量是最少的,选用把所属的用户分为若干的网段进行办理。C类网络用前三组数字标明网络的地址,最终一组数字作为网络上的主机地址。
RFC1918留出了3块IP地址空间(1个A类地址段,16个B类地址段,256个C类地址段)作为私有的内部运用的地址。在这个规模内的IP地址不能被路由到Internet主干网上;Internet路由器将丢掉该私有地址。
IP地址类别RFC1918内部地址规模
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,需求将私有地址转化为公有地址。这个转化进程称为网络地址转化(NetworkAddressTranslation,NAT),一般运用路由器来履行NAT转化。
实践上,还存在着D类地址和E类地址。但这两类地址用途比较特别,在这里只是简略介绍一下:D类地址称为播送地址,供特别协议向选定的节点发送信息时用。E类地址保存给将来运用。
衔接到Internet上的每台核算机,不管其IP地址归于哪类都与网络中的其它核算机处于平等方位,由于只需IP地址才是区别核算机的仅有标识。所以,以上IP地址的分类只适用于网络分类。
在Internet中,一台核算机能够有一个或多个IP地址,就像一个人能够有多个通讯地址相同,但两台或多台核算机却不能共享一个IP地址。假如有两台核算机的IP地址相同,则会引起异常现象,不管哪台核算机都将无法正常作业。
顺便提一下几类特别的IP地址:
1.播送地址意图端为给定网络上的一切主机,一般主机段为全0
2.单播地址意图端为指定网络上的单个主机地址
3.组播地址意图端为同一组内的一切主机地址
4.环回地址127.0.0.1在环回测验和播送测验时会运用
1.5子网的区分
若公司不上Internet,那必定不会烦恼IP地址的问题,由于能够任意运用一切的IP地址,不管是A类或是B类,这个时候不会想到要用子网,但若是上Internet那IP地址便弥足珍贵了,现在全球一阵Internet热,IP地址现已愈来愈少了,而所恳求的IP地址现在也趋保守,并且只需经恳求的IP地址能在Internet运用,但对某些公司只能恳求到一个C类的IP地址,但又有多个点需求运用,那这时便需求运用到子网,这就需求考虑子网的区分,下面简介子网的原理及怎样规划。
1.5.1子网掩码(SubnetMask)的介绍
设定任何网络上的任何设备不管是主机、个人电脑、路由器等皆需求设定IP地址,而跟跟着IP地址的是所谓的子网掩码(NetMask,SubnetMask),这个子网掩码主要的意图是由IP地址中也能获得网络编码,也便是说IP地址和子网掩码作和而得到网络编码,如下所示:
IP地址
192.10.10.611000000.00001010.00001010.00000110
子网掩码
255.255.255.011111111.11111111.11111111.00000000
AND
——————————————————————-
NetworkNumber
192.10.10.011000000.00001010.00001010.00000000
子网掩码有所谓的默许值,如下所示
类IP地址规模子网掩码
A1.0.0.0-126.255.255.255255.0.0.0
B128.0.0.0-191.255.255.255255.255.0.0
C192.0.0.0-223.255.255.255255.255.255.0
在预设的子网掩码(NetMask)都只需255的值,在谈到子网掩码(SubnetMask)时这个值便不必定是255了。在完整一组C类地址中如203.67.10.0-203.67.10.255子网掩码255.255.255.0,203.67.10.0称之网络编码(NetworkNumber,将IP地址和子网掩码作和),而203.67.10.255是播送的IP地址,所以这两者皆不能运用,实践只能运用203.67.10.1–203.67.10.254等254个IP地址,这是以255.255.255.0作子网掩码的成果,而所谓SubnetMsk尚可将整组C类地址分红数组网络编码,这要在子网掩码上作手脚,若是要将整组C类地址分红2个网络编码那子网掩码设定为255.255.255.192,若是要将整组C类分红8组网络编码则子网掩码要为255.255.255.224,这是怎样来的,由以上知道网络编码是由IP地址和子网掩码作AND而来的,并且将子网掩码以二进制标明法知道是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为子网掩码的成果,网络编码是192.10.10.0,若是运用255.255.255.224作子网掩码成果便有所不同
192.10.10.193–11000000.00001010.00001010.10000000
255.255.255.224–11111111.11111111.11111111.11100000
————————————————————–
192.10.10.192–11000000.00001010.00001010.10000000
此刻网络编码变成了192.10.10.192,这便是子网。那要怎样决议所运用的子网掩码,255.255.255.224以二进制标明法为11111111.11111111.11111111.11100000,改变是在最终一组,11100000便是224,以三个位(Bit)可标明2的3次便利是8个网络编码
子网掩码二进制标明法可分几个网络
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将C类地址203.67.10.0分红8组网络编码,各个网络编码及其播送IP地址及可运用之IP地址序号网络编码播送可运用之IP地址
(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地址是否如上表所示
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
其它的子网掩码所分红的网络编码可自行以上述办法自行推演出来。
1.5.3子网的运用
运用子网是要处理只需一组C类地址但需求数个网络编码的问题,并不是处理IP地址不够用的问题,由于运用子网反而能运用的IP地址会变少,子网一般是运用在跨地域的网络互联之中,两者之间运用路由器连线,一起也上Internet,但只恳求到一组C类IP地址,过路由又需不同的网络,所以此刻就有必要运用到子网,当然二网络间也能够长途桥接(RemoteBridge,字面翻译)衔接,那便没有运用子网的问题。
网关地址
若要使两个彻底不同的网络(异构网)衔接在一起,一般运用网关,在Internet中两个网络也要经过一台称为网关的核算机完结互联。这台核算机能依据用户通讯方针核算机的IP地址,决议是否将用户宣布的信息送出本地网络,一起,它还将外界发送给归于本地网络核算机的信息接纳过来,它是一个网络与另一个网络相联的通道。为了使TCP/IP协议能够寻址,该通道被赋予一个IP地址,这个IP地址称为网关地址。
完美测验TCP/IP协议简介
装置网络硬件和网络协议之后,咱们一般要进行TCP/IP协议的测验作业,那么怎样测验才算是比较全面的测验呢?咱们以为,全面的测验应包含局域网和互联网两个方面,因而应从局域网和互联网两个方面测验,以下是咱们在实践作业中运用指令行测验TCP/IP配置的过程:
1、单击“开始”/“运转”,输入CMD按回车,翻开指令提示符窗口。
2、首要检查IP地址、子网掩码、默许网关、DNS服务器地址是否正确,输入指令ipconfig/all,按回车。此刻显示了你的网络配置,观查是否正确。
3、输入ping127.0.0.1,观查网卡是否能转发数据,假如呈现“Requesttimedout”,标明配置差错或网络有问题。
4、Ping一个互联网地址,如ping202.102.128.68,看是否有数据包传回,以验证与互联网的衔接性。
5、Ping一个局域网地址,观查与它的连通性。
6、用nslookup测验DNS解析是否正确,输入如nslookupwww.ccidnet.com,检查是否能解析。
假如你的核算机经过了全部测验,则阐明网络正常,否则网络或许有不同程度的问题。在此不翻开胪陈。不过,要注意,在运用ping指令时,有些公司会在其主机设置丢掉ICMP数据包,造成你的ping指令无法正常返回数据包,不防换个网站试试。
弥补:
TCP/IP协议簇
TCP/IP(TransmissionControlProtocol/InternetProtocol)已成为一个事实上的工业
规范。
TCP/IP是一组协议的代名词,它还包含许多协议,组成了TCP/IP协议簇。
TCP/IP协议簇分为四层,IP坐落协议簇的第二层(对应OSI的第三层),TCP坐落协议簇的第
三层(对应OSI的第四层)。
TCP和IP是TCP/IP协议簇的中心两层,是整个协议簇的中心,起到了承上启下的效果。
1、接口层
TCP/IP的最低层是接口层,常见的接口层协议有:
Ethernet802.3、TokenRing802.5、X.25、Framereley、HDLC、PPP等。
2、网络层
网络层包含:IP(InternetProtocol)协议、ICMP(InternetControlMessageProtocol)
操控报文协议、ARP(AddressResolutionProtocol)地址转化协议、RARP(ReverseARP)反向
地址转化协议。
IP是网络层的中心,经过路由选择将下一跳IP封装后交给接口层。IP数据报是无衔接服务

ICMP是网络层的弥补,能够回送报文。用来检测网络是否通畅。
Ping指令便是发送ICMP的echo包,经过回送的echorelay进行网络测验。
ARP是正向地址解析协议,经过已知的IP,寻觅对应主机的MAC地址。
RARP是反向地址解析协议,经过MAC地址承认IP地址。比方无盘作业站和DHCP服务。
3、传输层
传输层协议主要是:传输操控协议TCP(TransmissionControlProtocol)和用户数据报协
议UDP(UserDatagramrotocol)。
TCP是面向衔接的通讯协议,经过三次握手树立衔接,通讯时完结时要撤除衔接,由于TCP
是面向衔接的所以只能用于点对点的通讯。
TCP供给的是一种牢靠的数据流服务,选用“带重传的肯定承认”技能来完结传输的牢靠
性。TCP还选用一种称为“滑动窗口”的方法进行流量操控,所谓窗口实践标明接纳能力,用
以限制发送方的发送速度。
UDP是面向无衔接的通讯协议,UDP数据包含意图端口号和源端口号信息,由于通讯不需求
衔接,所以能够完结播送发送。
UDP通讯时不需求接纳方承认,归于不牢靠的传输,或许会出丢包现象,实践运用中要求
在程序员编程验证。
4、运用层
运用层一般是面向用户的服务。如FTP、TELNET、DNS、SMTP、POP3。
FTP(FileTransmisionProtocol)是文件传输协议,一般上传下载用FTP服务,数据端口
是20H,操控端口是21H。
Telnet服务是用户长途登录服务,运用23H端口,运用明码传送,保密性差、简略便利。
DNS(DomainNameService)是域名解析服务,供给域名到IP地址之间的转化。
SMTP(SimpleMailTransferProtocol)是简略邮件传输协议,用来操控函件的发送、中
转。
POP3(PostOfficeProtocol3)是邮局协议第3版别,用于接纳邮件。
数据格局:
数据帧:帧头+IP数据包+帧尾(帧头包含源和方针主机MAC地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息(IP头包含源和方针主机IP地址、类型、生存期等)
TCP数据信息:TCP头部+实践数据(TCP头包含源和方针主机端口号、次序号、承认号、校
验字等)
TCP/IP的完结
这是一个给予UDP协议的TCP/IP网络的C程序完结。客户端运用层发起会话层的socket调用,在抵达远端后,服务器端运用程序屏幕输出字符串HelloWorld
榜首步创立文件名为server.c的文件,然后复制以下代码到此文件:
#include
#include
#include
#include
#include
#include
#defineMAXBUF256
main()
{
charbuf[MAXBUF];
intpassiveSocket;
socklen_tclientAddrLen;
structsockaddr_inserverAddr;
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,(structsockaddr*)&serverAddr,sizeof(serverAddr))==-1)
printf(”bindError!”);
clientAddrLen=sizeof(serverAddr);
memset(buf,0,MAXBUF);
for(;;)
{
if(recvfrom(passiveSocket,buf,MAXBUF,0,(structsockaddr*)&clientAddr,&clientAddrLen)>0)
{
printf(”ComefromClientis:%s”,buf);
memset(buf,0,sizeof(buf));
}
}
}
第二步编译并运转server程序.在指令行下进入到server.c地点的文件夹,输入下列指令(黑体字为输入部分)
[root@Linuxtest]#gcc-cserver.c
[root@Linuxtest]#gcc-oserverserver.o
[root@websiteprogram]#./server
第三步完结以上过程,server程序现已运转,这个窗口不要关,另开一个新窗口,输入
[root@Linuxtest]#netstat-an|grep1234
udp000.0.0.0:12340.0.0.0:*
您会发现运转中的server程序现已被捆绑在udp的1234端口.
第四步创立文件名为client.c的文件,然后复制以下代码到此文件:
#include
#include
#include
#include
#include
#include
#defineMAXBUF256
main()
{
charbuf[MAXBUF]=”HelloWorld”;
intactiveSocket;
structsockaddr_inremoteAddr;
structsockaddr_inlocalAddr;
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(”RemoteIPaddressis:%s…”,inet_ntoa(remoteAddr.sin_addr));
sendto(activeSocket,buf,sizeof(buf),0,(structsockaddr*)&remoteAddr,sizeof(remoteAddr));
printf(”SendSuccess!”);
memset(buf,0,sizeof(buf));
close(activeSocket);
}
第五步编译并运转client程序.翻开一个新指令窗口,在指令行下进入到client.c地点的文件夹,输入下列指令:
[root@Linuxtest]#gcc-cclient.c
[root@Linuxtest]#gcc-oclientclient.o
[root@Linuxtest]#./client
第六步观察效果.现在点到server程序运转的窗口,看是不是呈现了这样一句话
ComefromClientis:HelloWorld
上面的HelloWorld这句话便是客户端client.c发来的.
程序注释
server.c
#include
#include
#include
#include
#include
#include
以上是加载头文件,头文件里界说了一些程序运转时需求的东东,不必管它.
#defineMAXBUF256
界说了常量MAXBUF的值256,下面会用到.当然您也能够不必界说,在后边的数组里直接写256这个数字也能够
main()
{
charbuf[MAXBUF];字符串数组buf的巨细是256
intpassiveSocket;界说一个int类型的变量passiveSocket,它用来存储套接字描述符
socklen_tclientAddrLen;界说一个socklen_t类型的变量clientAddrlen,用来接纳客户端地址的长度
structsockaddr_inserverAddr;界说一个sockaddr_in类型的结构变量serverAddr,用来存储服务器端的IP地址,端口等信息
structsockaddr_inclientAddr;界说一个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,(structsockaddr*)&serverAddr,sizeof(serverAddr))==-1)
printf(”bindError!”);运用bind函数把刚才创立的套接字描述符passiveSocket与服务器套接字结构serverAddr捆绑在一起.
clientAddrLen=sizeof(serverAddr);
memset(buf,0,MAXBUF);初始化buf数组,设置为数字0
for(;;)由所以服务器端程序,需求一向翻开接纳来自客户端的恳求,所以有必要创立一个死循环
{
if(recvfrom(passiveSocket,buf,MAXBUF,0,(structsockaddr*)&clientAddr,&clientAddrLen)>0)运用recvfrom函数接纳来自客户端的信息,并把信息存放在数组buf中.一起也把客户端的地址存放在了clientAddr中,便利信息的回送,本例服务器端为运用回送.
{
printf(”ComefromClientis:%s”,buf);打印输出来buf中自客户端的信息
memset(buf,0,sizeof(buf));清空buf
}
}
}
client.c
#include
#include
#include
#include
#include
#include
以上是加载头文件,头文件里界说了一些程序运转时需求的数据.
#defineMAXBUF256界说了常量MAXBUF的值256,下面会用到.当然您也能够不必界说,在后边的数组里直接写256这个数字也能够
main()
{
charbuf[MAXBUF]=”HelloWorld”;给buf数组赋值为HelloWorld,这个字符串是后边要传送给服务器的信息.
intactiveSocket;界说一个整型变量activeSocket,它用来存储套接字描述符.
structsockaddr_inremoteAddr;同server.c中注释,设置Internet套接字地址结构变量remoteAddr
structsockaddr_inlocalAddr;同server.c中注释,设置Internet套接字地址结构变量localAddr
structhostent*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(”RemoteIPaddressis:%s…”,inet_ntoa(remoteAddr.sin_addr));显示长途服务器的地址,这一步不是有必要的.
sendto(activeSocket,buf,sizeof(buf),0,(structsockaddr*)&remoteAddr,sizeof(remoteAddr));发从存储在数组buf中的信息,也便是发送”HelloWorld”字符串到remoteAddr中指定的IP地址与端口.
printf(”SendSuccess!”);假如sendto成功则显示SendSuccess!
memset(buf,0,sizeof(buf));重置buf数组
close(activeSocket);封闭activeSocket套接字开释内存.
}
程序原理
在UNIX体系中,进程若对文件进行操作,一般运用open函数调用翻开一个文件进行拜访,每个进程都有一个文件描述符表,该表中存放了被进程翻开的文件的索引(也称文件描述符),索引指出了文件在文件描述符表中的方位,这个索引值是一个指向操作体系文件表的指针.运用程序只需运用该描述符就能够对指定文件进行操作.相似的,每个翻开的socket函数都对应一个整数,咱们称它为socket描述符,该整数也是socket描述符在文件描述符表中的索引值.但socket描述符在描述符表中的表项并不指向文件表,而是指向一个与该socket有关的数据结构

未经允许不得转载:IT技术网站 » TCPIP的协议构成和技术特性
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载