网络编程书籍讲义(第四讲)

上传人:j****9 文档编号:54652974 上传时间:2018-09-16 格式:PPT 页数:27 大小:623KB
返回 下载 相关 举报
网络编程书籍讲义(第四讲)_第1页
第1页 / 共27页
网络编程书籍讲义(第四讲)_第2页
第2页 / 共27页
网络编程书籍讲义(第四讲)_第3页
第3页 / 共27页
网络编程书籍讲义(第四讲)_第4页
第4页 / 共27页
网络编程书籍讲义(第四讲)_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《网络编程书籍讲义(第四讲)》由会员分享,可在线阅读,更多相关《网络编程书籍讲义(第四讲)(27页珍藏版)》请在金锄头文库上搜索。

1、第1页,人民邮电出版社,第4章 互联网络层,第2页,4.1 传输层的通信与端口,4.1.1 点到点通信与端到端通信 在互联网中,任何两台通信的主机之间,从源端到目标端的信道都是由一段一段的点到点通信线路组成的(一个局域网中两台主机通信时只有一段点到点的线路)。 直接相连的节点之间对等实体(源节点的IP层和目标节点的IP层)的通信,叫点到点(point to point)通信。 点到点的通信是由网络互联层来实现的,网络互联层只是屏蔽了不同网络之间的差异,构建了一个逻辑上的通信网络,因此它只是解决了数据通信问题。现在我们的问题是在网络中传输的数据,在源主机上从何而来,送到目标主机的何处去。回答这个

2、问题很简单,因为源主机到目标主机之间的通信,本质上是源主机上的应用程序与目标主机上的应用程序之间的通信,因此源主机上IP层要传输的数据来源于它的网络应用程序,最终要通过目标主机的IP层,送到目标主机上需要使用数据的某个特定网络应用程序。这样在源主机和目标主机之间,好像有一条直接的数据传输通路,它覆盖了低层点到点之间的传输过程,直接把源主机应用程序产生的数据,传输到目标主机使用这些数据的应用程序,这就是端到端(end to end)的通信。 端到端通信是建立在点到点通信基础之上的,它是比网络互联层通信更高一级的通信方式,完成应用程序(进程)之间的通信。端到端的通信是由传输层来实现的。,第3页,4

3、.1 传输层的通信与端口,4.1.2 端口的概念与功能 传输层端口的概念是怎么来的呢?我们知道,数据链路层接收到数据帧之后,由数据帧中的协议类型字段(以太网)就可以知道要把数据送到高层的哪个协议(见表3-10所示)。 IP层在收到低层送来的数据时,根据IP数据报头中的上层协议类型字段,就可以知道要把IP数据报送到高层的哪个协议(见表3-2所示)。在TCP/IP协议的传输层之上是应用层,现在用户使用的操作系统都是多任务操作系统,也就是说在IP层之上,可能有多个网络应用程序(进程)在进行数据传输,哪么传输层收到的数据究竟要送到哪个应用程序呢?,第4页,4.1 传输层的通信与端口,4.1.2 端口的

4、概念与功能 为了识别传输层之上不同的网络通信程序(进程),传输层引入了端口的概念。在一台主机上,要进行网络通信的进程,首先要向系统提出动态申请,由系统(操作系统内核)返回一个本地惟一的端口号,进程再通过系统调用把自己和这个特定的端口联系在一起,这个过程叫绑定(binding)。这样每个要通信的进程都与一个端口号对应,传输层就可以使用其报文头中的端口号,把收到的数据送到不同的应用程序。 在TCP/IP协议中,传输层使用的端口号用一个16位的二进制数表示。因此,在传输层如果使用TCP协议进行进程通信,则可用的端口号共有64K个。由于UDP也是传输层一个独立于TCP的协议,因此使用UDP协议时也有6

5、4K个不同的端口。IP地址 用来区分 不同的网络设备的 PORT 用来区分 同一个网络设备上不同的进程(应用程序),第5页,4.1 传输层的通信与端口,4.1.3 常用的端口 如果按上面所论述的,每个要通信的进程在通信之前,都要先通过系统调用动态的申请一个端口号。这样就有一个问题,相距遥远的两个进程,它们之间进行通信时,怎么知道对方的端口号呢?如果不知道对方进程的端口号,通信也就无法进行。 其实我们知道,两个进程在进行通信时,总有一方要首先提出通信的请求,而另一方一直处于等待状态,准备来响应其它主机对它提出的请求。提出请求的一方就是客户端,响应客户的请求的一方就是服务器,这是典型的客户-服务器

6、模式。客户端在提出请求时一定先要知道对方的端口号,为此TCP/IP协议在进行设计时,把服务器上守候进程的端口号进行静态分配。特定的服务对应一个特定的端口号,这些端口号是事先已经分配好的,是众所周知的(well-known port)的端口号。顾名思义,客户要使用的由服务器进程提供的服务,客户已经知道它们的端口号。例如,FTP服务器的TCP端口号都是21,Telnet服务器的TCP端口号都是23,TFTP(简单文件传送协议)服务器的UDP端口号是69。众所周知的端口号介于1255之间,这些端口号由Internet号分配机构IANA(Internet Assigned Numbers Author

7、ity)来管理。一些常用服务的TCP和UDP的众所周知端口号见表4-1和表4-2。,第6页,4.1 传输层的通信与端口,4.1.3 常用的端口,第7页,4.1 传输层的通信与端口,4.1.3 常用的端口,第8页,4.1 传输层的通信与端口,4.1.3 常用的端口 2561023之间的端口号通常都是由Unix系统占用,以提供一些特定的Unix服务。现在IANA管理11023之间所有的端口号。任何TCP/IP实现所提供的服务都使用11023之间的端口号。 客户端口号又称作临时端口号(即存在时间很短暂)。这是因为客户端口号是在客户程序要进行通信之前,动态的从系统申请的一个端口号。然后以该端口号为源端

8、口,使用某个众所周知的端口号为目标端口号(如在TCP协议上要进行文件传输时使用21)进行客户端到服务器端的通信,通信完成后,客户端的端口号就被释放掉,而服务器只要其服务在运行,其相应端口上的服务就存在。另外,大家可能已经想到了,当服务器要向客户端传输数据时,服务器怎么知道客户端临时分配的端口号呢?由于服务器可以从客户的请求报文中获得其端口号,因此也可以正常通信。大多数TCP/IP实现时,给临时端口分配10245000之间的端口号。大于5000的端口号是为其它服务预留的(Internet上并不常用的服务)。 综上所述,我们知道两台要通信的主机,每一端要使用一个二元地址(IP地址,端口号),才可以

9、完成它们之间的通信。端到端之间的一条通信就可能表示为(源主机IP地址,源端口号;目标主机IP地址,目标端口号),IP地址用来标识互联网中的两台通信的特定主机,端口号用来标识特定主机上通信的进程。在进行网络程序设计时这是最基本的知识。,第9页,4.2 用户数据报协议(UDP),4.2.1 UDP数据报 UDP(User Data Protocol)是网络层之上常用的一个非常简单的协议,它主要是在IP层之上提供了协议端口功能,以标识源主机和目标主机上通信的进程。因此,UDP只能保证进程之间通信的最基本要求,而没有提供数据传输过程中的可靠性保证措施,所以大家常把它称为无连接,不可靠的通信协议,这可以

10、通信它的协议格式非常明显地看出。 UDP协议在工作时是建立在IP协议之上的,UDP从进程的缓冲区接收进程每一次产生的输出,对每次输出都生成一个UDP数据报,然后把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输层使用UDP协议时,发送端不需要发送缓冲区。 被封装在IP报文中的UDP数据报,通过网络传输到目标主机的IP层后,由目标主机的UDP层根据目标端口号送到接收该数据的相应进程。,第10页,4.2 用户数据报协议(UDP),4.2.1 UDP数据报,第11页,4.2 用户数据报协议(UDP),4.2.2 伪首部与校验和 UDP头部的校验和是一个用16位二进制数表示的错误检查字段,

11、它是一个可选项。如果发送端为了提高UDP协议的工作效率,可以不计算该字段的值,这时填入0。UDP校验和的计算除了包含UDP首部和UDP数据区外,还包含了一个12个字节长的伪首部(pseudo header)。顾名思义,这个伪首部它并不是UDP的真正组成部分,它只是为了UDP在进行差错检查时,可以把更多的信息包含进去而人为加上的。伪首部的格式如图4-5所示。从伪首部的构成就可以看出,它主要是加入了IP地址信息,因为如图4-4所示的UDP数据报中并不包含与IP地址有关的信息,如果只以UDP数据报为依据计算校验和,就无法对目标地址的正确性进行检查。,第12页,4.2 用户数据报协议(UDP),伪首部

12、包含IP首部的一些字段,填充域全填0,目的是使伪首部为16位二进制数的整数倍,这是计算校验和时所需要的。协议字段的值为17,UDP长度为UDP数据报的总长(当然不能包括虚构的伪首部)。 源端在发送UDP数据报时,使用构造的UDP伪首部和UDP数据报计算出校验和(校验和的计算方法同IP首部校验和的计算方法相同),然后填入UDP首部。目标端在收到UDP数据报时,同样使用构造的UDP伪首部和UDP数据报计算出校验和,在计算时如果包括校验和字段,则计算结果为0(如果不包括校验和字段,则计算结果应与源端计算的结果一样),表明报文在传输过程中没有出现差错。 另外,还有两个问题,一是在计算UDP校验和时,如

13、果UDP数据报(UDP的首部为8个字节,但数据区长度是可变的)的总长度为奇数个字节,就要在数据报最后增加一个值为0的填充字节,这只是为了检验和的计算(因为检验和的算法是以16位二进制数为一个量计算的),但该字节并不一定被传送出去。二是如果检验和的计算结果为0时,则校验和存入的值为全1(即65535,表示0的反码),以区别没有计算校验和时直接填入的0。,第13页,4.2 用户数据报协议(UDP),从UDP协议的数据报格式可以看出,UDP对数据的封装非常简单,主要加了端口号与校验和后,直接通过IP层进行传输,因此它具有如下的几个特点: UDP是一种无连接、不可靠的数据报传输服务协议。UDP不与远端

14、的UDP模块保持端对端的连接,它仅仅是把数据报发向网络,并从网络接收传来的数据报。关于连接的问题学完TCP后,可能更容易理解。 UDP对数据传输过程中惟一的可靠保证措施是进行差错校验,如果发生差错,则只是简单的抛弃该数据报。 如果目标端收到的UDP数据报中的目标端口号,不能与当前已使用的某端口号匹配时,则将该数据报抛弃,并发送目标端口不可达的ICMP差错报文。 UDP协议在设计时的简单性,是为了保证UDP在工作时的高效性和低延时性。因此,在服务质量较高的网络中(如局域网),UDP可以高效地工作。 UDP常用于传输延时小,对可靠性要求不高,有少量数据要进行传输的情况,如DNS(域名服务)、TFT

15、P(简单文件传输)等。,第14页,4.3 传输控制协议(TCP),4.3.1 TCP报文段格式 TCP提供一种面向连接的、可靠的数据流服务。因为它的高可靠性,使TCP协议成为传输层最常用的协议,同时也是一个比较复杂的协议。TCP和IP一样是TCP/IP协议簇中最重要的协议。 TCP报文段(TCP报文常称为段或TCP报文段)与UDP数据报一样也是封装在IP中进行传输的,只是IP报文的数据区为TCP报文段。 TCP报文段的格式如图形4-6所示。,第15页,4.3 传输控制协议(TCP),1 TCP源端口号 TCP源端口号长度为16位,用于标识发送方通信进程的端口。目标端在收到TCP报文段后,可以用

16、源端口号和源IP地址标识报文的返回地址。 2 TCP目标端口号 TCP目标端口号长度为16位,用于标识接收方通信进程的端口。源端口号和IP首部中的源端IP地址,目标端口号和目标端IP地址,这四个数就可以惟一确定从源端到目标端的一对TCP连接。 3 序列号 序列号长度为32位,用于标识TCP发送端向TCP接收端发送数据字节流的序号。序列号的实际值等于该主机选择的本次连接的初始序号ISN(Initial Sequence Number)加上该报文段中第一个字节在整个数据流中的序号。由于TCP为应用层提供的是全双工通信服务,这意味数据能在两个方向上独立地进行传输,因此,连接的每一端必须保持每个方向上

17、传输数据的序列号,当序列号到达232-1后又从0开始。序列号保证了数据流发送的顺序性,是TCP提供的可靠性保证措施之一。,第16页,4.3 传输控制协议(TCP),4 确认号 确认号长度为32位,因为接收端收到的每个字节都被计数,这样它可用来标识接收端希望收到的下一个TCP报文段第一个字节的序号。既然,确认号包含发送确认的一端希望收到的下一个字节的序列号,因此,确认号应当是上次已成功收到数据字节的序列号加1。确认号字段只有ACK标志(下面介绍)为1时才有效。在下一小节介绍完连接的建立后我们就会明白,一旦一个连接建立起来,这个字段总是有效的,也就是说ACK标志字段也总是被设置为1。 5 首部长度 该字段用4位二进制数表示TCP头部的长短,它以32位二进制数为一个计数单位。TCP首部长度一般为20个字节,因此通常它的值为5。但当首部包含选项时该长度是可变的。首部长度主要用来标识TCP数据区的开始位置,因此又称为数据偏移。 6 保留 保留字段长度为6位,该域必须置0。准备为将来定义TCP新功能时使用。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号