15、TCP/IP协议

15、TCP/IP协议


      几台孤立计算机系统组在一起形成网络,几个孤立网络连在一起形成一个网络的网络,即互连网。一个互连网就是一组通过相同协议族互连在一起的网络。
互联网的目的之一是在应用程序中隐藏所有的物理细节。
网格协议通常分不同层次进行开发,每一层分别负责不同的通信功能:
(1)链路层(数据链路层/网络接口层),通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡,它们一起处理与电缆的物理接口细节。
(2)网络层(互联网层),处理分组在网络中的活动,如分组的选路。
(3)运输层主要为两台主机上的应用程序提供端到端的通信。
(4)应用层负责处理特定的应用程序细节。

 

      网络层IP提供一个不可靠的服务,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。
      运输层TCP提供一个可靠的服务,TCP采用超时重传,发送和接收端到端的确认分组等机制。
      连接网络的途径有两个:一个是网桥、一个是路由器。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网格进行互连。
一般来说,TCP服务器是并发的,而UDP服务器是重复的。
15.1、TCP传输协议

TCP通过以下方式来提供可靠性:
(1)应用数据被分割成TCP认为最适合发送的数据块,这与UDP完全不同,应用程序产生的数据报长度保持不变。
(2)当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。
(3)当TCP收到发自TCP连接另一端的数据,它将发送一个确认。
(4)TCP将保持它首部和数据的检验和。
(5)TCP会对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
(6)当IP数据报发生重复时,TCP的接收端会丢弃重复的数据。
(7)TCP还能提供流量控制。TCP的流量控制由连接的每一端通过声明的窗口大小来提供。

 

建立TCP连接协议:(建立一个连接需要三次握手、而终止一个连接要经过四次握手)

(1) 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。

(2) 服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

(3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)

当一个连接建立时,连接双方都要通告各自的MSS(最大报文段长度)。

半关闭:TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

同时打开:TCP是特意设计为了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。

TCP呼入连接请求队列规则:

(1) 正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接请求已被TCP接受,但还没有被应用层所接受。
(2) 应用层将指明该队列的最大长度,这个值通常称为积压值(backlog)。它的取值范围是0—5之间的整数,包括0和5。
(3) 当一个连接请求(即SYN)到达时,TCP使用一个算法,根据当前连接队列中的连接数来确定是否接收这个数据。

15.2、IP协议


      IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。

      首部长度指的是首部占32bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60字节。

      总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节。总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。

      标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。
      TTL(time to live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
      首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
      每一份IP数据报都包含源IP地址和目的地址。
      最后一个字段任选项,是数据报中的一个可变长的可选信息。

15.3、UDP用户数据报协议


      UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。

    UDP长度字段指的是UDP首部和UDP数据的字节长度。
    UDP检验和覆盖UDP首部和UDP数据,而IP首部检验和只覆盖IP首部并不覆盖IP数据报中的任何数据。UDP的检验和是可选的,而TCP的检验和是必需的。
    UDP检验和的基本计算方法与IP首部的检验和计算方法相类似(16bit字的二进制反码和),但是它们之间存在不同的地方。(1)UDP数据报的长度可以为奇数字节,但是检验和的算法是把若干个16bit字相加。(2)UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算检验和而设置的。
    UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端和接收端之间发生的任何改动。
    TCP连接经常是“远程”连接(经过许多路由器和网桥等中间设备)。UDP一般为本地通信。 
IP分片:
    物理网格层一般要限制每次发送数据帧的最大长度。IP分片可以发生在原始发送端主机上,也可以发生在中间路由器上,只有到达目的地才进行重新组装,重新组装是由目的端的IP层来完成,其目的是使分片的重新组装过程对运输层(TCP和UDP)是透明的,以及防止某些可能的性能降低。
由于IP层本身没有超时重传的机制而是由更高层来负责超时和重传,IP分片传送过程中,只要丢失一片数据就会重传整个数据报。
在一个以太网上,数据帧的最大长度是1500字节。
    位于@符号后的数字是从数据报开始处计算的片偏移值。
    大多数UDP服务器是重复型服务器,单个服务器进程对单个UDP端口上(服务器上的名知端口)的所有客户请求进行处理。如请求来不急处理便会由UDP自动排队。
    当UDP数据到达的目的IP地址为广播地址或多播地址,而且在目的IP地址和端口号外有多个端点时,就向每个端点传送一份数据报的复制。

15.4、域名系统(DNS)


    域名系统是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。

    在一个应用程序请求TCP打开一个连接或使用UDP发送一个数据报之前,必须将一个主机名转换为一个IP地址。

15.5、网络文件系统


      RPC是构造客户-服务器应用程序的一种方式,使得看起来客户只是调用了服务器的过程,所有的网格操作细节都被隐藏在RPC程序包为一个应用程序生成的客户和服务器残桩以及RPC库的过程中。实际上发生如下动作:
(1) 当客户程序调用远程的过程时,它实际上只是调用了一个位于本机上的、由RPC程序包生成的函数。
(2) 服务器主机上的一个服务器残桩负责接收这个网络报文。
(3) 当服务器函数返回时,它返回到服务器残桩。
(4) 客户残桩从接收到的网格报文中取出返回值,将其返回给客户程序。

 

 

posted @ 2013-12-28 20:22  YGingko  阅读(265)  评论(0编辑  收藏  举报