首页 > 代码库 > TCP/IP协议

TCP/IP协议

为什么会有TCP/IP协议

  在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。

  但是简单的连到一起是远远不够的,就好像语言不同的两个人互相见了面,完全不能交流信息。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。

TCP/IP协议分层

技术分享技术分享

 

  物理层(RS-232、V.35)和 数据链路层(HDLC、X.25)涉及到在通信信道上传输的原始比特流,它实现传输数据所需要的机械、电气、功能性及过程等手段,提供检错、纠错、同步等措施,使之对网络层显现一条无错线路;并且进行流量调控。Bits、Frames

  网络层检查网络拓扑,以决定传输报文的最佳路由,执行数据转发。其关键问题是确定数据包从源端到目的端如何选择路由。网络层的主要协议有IP、ICMP(Internet Control Message Protocol,互联网控制报文协议)、IGMP(Internet Group Management Protocol,互联网组管理协议)、ARP(Address Resolution Protocol,地址解析协议)和RARP(Reverse Address Resolution Protocol,反向地址解析协议)等。Packets

  传输层的基本功能是为两台主机间的应用程序提供端到端的通信。传输层从应用层接受数据,并且在必要的时候把它分成较小的单元,传递给网络层,并确保到达对方的各段信息正确无误。传输层的主要协议有TCP、UDP(User Datagraph Protocol,用户数据报协议)。Segments

  应用层负责处理特定的应用程序细节。应用层显示接收到的信息,把用户的数据发送到低层,为应用软件提供网络接口。应用层 包含大量常用的应用程序,例如HTTP(HyperText Transfer Protocol文本传输协议)、Telnet(远程登录)、FTP(File Transfer Protocol)等。

  


 

  发送方,加封装的操作是逐层进行的。各个应用程序将要发送的数据送给传输层;传输层(TCP/UDP)对数据分段为大小一定的数据段,加上本层的报文头。发送给网络层。在传输层报文头中,包含接收它所携带的数据的上层协议或应用程序的端口号,例如,Telnet 的端口号是 23。传输层协议利用端口号来调用和区别应用层各种应用程序。

 

  网络层对来自传输层的数据段进行一定的处理(利用协议号区分传输层协议、寻找下一跳地址、解析数据链路层物理地址等),加上本层的IP报文头后,转换为数据包,再发送给链路层(以太网、帧中继、PPP、HDLC 等);

 

  链路层依据不同的数据链路层协议加上本层的帧头,发送给物理层以比特流的形式将报文发送出去。

 

  在接收方,这种去封装的操作也是逐层进行的。从物理层到数据链路层,逐层去掉各层的报文头部,将数据传递给应用程序执行。

技术分享


 

 

应用层

FTP(文件传输协议、File Transfer Protocol)是用于文件传输的Internet标准。FTP支持一些文本文件(例如ASCII、二进制等等)和面向字节流的文件结构。FTP使用传输层协议TCP在支持FTP的终端系统间执行文件传输,因此,FTP被认为提供了可靠的面向连接的服务,适合于远距离、可靠性较差线路上的文件传输。

TFTP(Trivial File Transfer Protocol,简单文件传输协议)也是用于文件传输,但TFTP使用UDP提供服务,被认为是不可靠的,无连接的。TFTP通常用于可靠的局域网内部的文件传输。

SMTP(Simple Mail Transfer Protocol。简单邮件传输协议)支持文本邮件的Internet传输。

POP3(Post Office Protocol)是一个流行的Internet邮件标准。

SNMP(Simple Network Management Protocol。简单网络管理协议)负责网络设备监控和维护,支持安全管理、性能管理等。

Telnet是客户机使用的与远端服务器建立连接的标准终端仿真协议。

Ping命令是一个诊断网络设备是否正确连接的有效工具。

Tracert命令和Ping命令类似,可以显示数据包经过的每一台网络设备信息,是一个很好的诊断命令。

HTTP协议支持WWW(World Wide Web,万维网)和内部网信息交互,支持包括视频在内的多种文件类型。HTTP是当今流行的Internet标准。

DNS(Domain Name System,域名系统)把网络节点的易于记忆的名字转化为网络地址。

WINS(Windows Internet Name Server,Windows Internet命名服务器),此服务可以将NetBIOS 名称注册并解析为网络上使用的IP地址。

BootP(Bootstrap Protocol,引导协议)是使用传输层UDP协议动态获得IP地址的协议。

 技术分享 


 

 

 

传输层

传输层位于应用层和网络层之间,为终端主机提供端到端的连接,以及流量控制(由窗口机制实现)、可靠性(由序列号和确认技术实现)、支持全双工传输等等。传输层协议有两种:TCP和UDP。虽然TCP和UDP都使用相同的网络层协议IP,但是TCP和UDP却为应用层提供完全不同的服务。

 

传输控制协议TCP:为应用程序提供可靠的面向连接的通信服务,适用于要求得到响应的应用程序。目前,许多流行的应用程序都使用TCP。

 

用户数据报协议UDP:提供了无连接通信,且不对传送数据包进行可靠的保证。适合于一次传输小量数据,可靠性则由应用层来负责。

 

TCP协议通过以下过程来保证端到端数据通信的可靠性:

 

1、TCP实体把应用程序划分为合适的数据块,加上TCP报文头,生成数据段;

 

2、当TCP实体发出数据段后,立即启动计时器,如果源设备在计时器清零后仍然没有收到目的设备的确认报文,重发数据段;

 

3、当对端TCP实体收到数据,发回一个确认。

 

4、TCP包含一个端到端的校验和字段,检测数据传输过程的任何变化。如果目的设备收到的数据校验和计算结果有误,TCP将丢弃数据段,源设备在前面所述的计时器清零后重发数据段。

 

5、由于TCP数据承载在IP数据包内,而IP提供了无连接的、不可靠的服务,数据包有可能会失序。TCP提供了重新排序机制,目的设备将收到的数据重新排序,交给应用程序。

 

6、TCP提供流量控制。TCP连接的每一端都有缓冲窗口。目的设备只允许源设备发送自己可以接收的数据,防止缓冲区溢出。

 

7、TCP支持全双工数据传输。

技术分享

  TCP协议为终端设备提供了面向连接的、可靠的网络服务,UDP协议为终端设备提供了无连接的、不可靠的数据报服务。从上图我们可以看出,TCP协议为了保证数据传输的可靠性,相对于UDP报文,TCP报文头部有更多的字段选项。

首先让我们来看一下TCP的报文头部主要字段:

每个TCP报文头部都包含源端口号(source port)和目的端口号(destination port),用于标识和区分源端设备和目的端设备的应用进程。在TCP/IP协议栈中,源端口号和目的端口号分别与源IP地址和目的IP地址组成套接字(socket),唯一的确定一条TCP连接。

技术分享

  序列号(Sequence number)字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序列号对每个字节进行计数。序列号是一个32bits的数。

 

  既然每个传输的字节都被计数,确认序号(Acknowledgement number,32bits)包含发送确认的一端所期望接收到的下一个序号。因此,确认序号应该是上次已成功收到的数据字节序列号加1。

  TCP的流量控制由连接的每一端通过声明的窗口大小(windows size)来提供。窗口大小用数据包来表示,例如Windows size=3, 表示一次可以发送三个数据包。窗口大小起始于确认字段指明的值,是一个16bits字段。窗口大小可以调节。

  校验和(checksum)字段用于校验TCP报头部分和数据部分的正确性。

  最常见的可选字段是MSS(Maximum Segment Size,最大报文大小)。MSS指明本端所能够接收的最大长度的报文段。当一个TCP连接建立时,连接的双方都要通告各自的MSS协商可以传输的最大报文长度。我们常见的MSS有1024(以太网可达1460字节)字节。

  相对于TCP报文,UDP报文只有少量的字段:源端口号、目的端口号、长度、校验和等,各个字段功能和TCP报文相应字段一样。

  UDP报文没有可靠性保证和顺序保证字段,流量控制字段等,可靠性较差。当然,使用传输层UDP服务的应用程序也有优势。正因为UDP协议较少的控制选项,在数据传输过程中,延迟较小,数据传输效率较高,适合于对可靠性要求并不高的应用程序,或者可以保障可靠性的应用程序像DNS、TFTP、SNMP等;UDP协议也可以用于传输链路可靠的网络

技术分享

 TCP协议和UDP协议使用16bits端口号(或者socket)来表示和区别网络中的不同应用程序,网络层协议IP使用特定的协议号(TCP 6,UDP 17)来表示和区别传输层协议。

任何TCP/IP实现所提供的服务都是1~1023之间的端口号,这些端口号由IANA(Internet Assigned Numbers Authority,Internet号码分配机构)分配管理。其中,低于255的端口号保留用于公共应用;255到1023的端口号分配给各个公司,用于特殊应用;对于高于1023的端口号,称为临时端口号,IANA未做规定。

常用的TCP端口号有:HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等;常用的保留UDP端口号有:DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。

套接字(socket)分为源套接字和目的套接字:

源套接字:源端口号+源IP地址;

目的套接字:目的端口号+目的IP地址;

源套接字和目的套接字用于唯一的确定一条TCP连接。关于IP地址,将在后面讲述。

技术分享

为了在上图所示的主机和服务器之间建立一个连接,首先需要两端设备进行同步。同步(synchronization)是通过各个携带有初始序列号的数据段交换过程实现的。

主机发送一个序列号为a的报文段1;

服务器发回包含序列号为b的报文段2,并用确认号a+1对主机的报文段1进行确认;

主机接收服务器发回的报文段2,发送报文段3,用确认号b+1对报文段2进行确认。

这样在主机和服务器之间建立了一条TCP连接,这个过程被称为三步握手(three-way handshake)。接下来,数据传输开始。

数据传输结束后,应该终止连接。终止TCP连接需要4次握手。

技术分享

TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP使用肯定确认技术,其确认号指的是下一个所期待的字节。

下面我们以数据单方向发送为例,介绍滑动窗口如何实现流量控制。

假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3。发送方发送序列号为1、2、3的三个数据包,接收方设备成功接收数据包,用序列号4确认。发送方设备收到确认,继续以窗口大小3发送数据。当接收方设备要求降低或者增大网络流量时,可以对窗口大小进行减小或者增加,本例降低窗口大小为2,每一次发送两个数据包。当接收方设备要求窗口大小为0,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。发送方接收到携带窗口号为0的确认,停止这一方向的数据传输。

滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。然而,它只能在源端设备和目的端设备起作用,当网络中间设备(例如路由器等)发生拥塞时,滑动窗口机制将不起作用。我们可以利用ICMP的源抑制机制进行拥塞管理。关于ICMP,我们将在后面介绍。


 

 

 

 

网络层

技术分享

 

网络层位于TCP/IP协议栈数据链路层和传输层中间,网络层接收传输层的数据报文,分段为合适的大小,用IP报文头部封装,交给数据链路层。网络层为了保证数据包的成功转发,主要定义了以下协议:

IP(Internet Protocol)协议:IP协议和路由协议协同工作, 寻找能够将数据包传送到目的端的最优路径。IP协议不关心数据报文的内容,提供无连接的、不可靠的服务。

ARP协议(Address Resolution Protocol,地址解析协议):把已知的IP地址解析为MAC地址;

RARP(Reverse Address Resolution Protocol,反向地址解析):用于数据链路层地址已知时,解析IP地址;

ICMP(Internet Control Message Protocol,网际控制消息协议)定义了网络层控制和传递消息的功能。

IGMP(Internet Group Management Protocol,网际组管理协议),一种组播应用协议。

 

文章摘自其他网站

 

 

 


 

TCP/IP协议