传输层 —— 读书笔记《王道考研资料》

2018-12-09  本文已影响0人  OmaiMoon

传输层

传输层的功能:

传输层是向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。

传输层位于网络层之上,为运行在不同主机上的应用程序提供逻辑通信,而网络层提供了主机之间的逻辑通信。即使网络层的协议是不可靠的,但传输层还是能为应用程序提供可靠的服务。

只有主机的协议栈才会有传输层和网络层,而路由器再转发分组的时候都只用到了下三层的功能。(即在通信子网中没有传输层,传输层只存在于通信子网以外的主机中)

<font face="微软雅黑" color=#DC143C size=4 >** 传输层的功能:**</font>

1、传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是,网络层提供的是机之间的逻辑通信。

2、复用和分用。复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。

注意:传输层的复用分用功能与网络层的复用分用功能不同。
网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去,分用是指接收方的网络层在剥去首部后把数据交付给相应的协议。

3、传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查IP数据报的首部,不检验数据部分是否出错。

4、提供两种不同的传输协议,即面向连接的TCP和无连接的UDP。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路,要么只提供无连接服务,如数据报,而不可能在网络层同时存在这两种方式)。

端口和端口号:

一、端口的作用:

端口能够让应用层的各种应用进程将其数据通过端口号向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过通端口交付给应用层相应的进程。

端口就是传输层服务访问点TSAP,它在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程。

端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

二、端口号:

应用进程通过端口号进行标识,端口号长度为16bit,能够表示6536(2^6)个不同的端口号。

端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程,不同计算机的相同的端口号是没有联系的。根据端口号范围可将端口分为两类:

<font face="微软雅黑" color=#DC143C size=4 >1、服务端使用的端口号。</font>

这里又分为两类,最重要的一类是熟知端口号,数值为0~1023,IANA(互联网地址指派机构)把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。

另一类叫做登记端口号,数值为1024~49151。它是为没有熟知端口号的应用程序使用的,使用这类端口号必须在IANA登记,以防止重复。

一些常用的熟知端口号如下:


<font face="微软雅黑" color=#DC143C size=4 >2、客户端使用的端口号:</font>

数值为:49152 ~ 65535,由于这类端口号仅在客户进程运行时才动态选择,因此又叫短暂端口号。通信结束后,刚才使用过的客户端口号就不复存在,这个端口号就可以供其他客户进程使用。

三、套接字

网络中通过 IP 地址来表示一台主机,通过端口号来区分一台主机中的不同应用程序。在网络中采用发送方和接收方的套接字组合来识别端点,所谓的套接字实际上就是一个通信端点,即:

套接字=(主机 IP 地址 , 端口号)

它唯一的标识了网络中的一个主机和其上的一个应用(进程)

无连接服务和面向连接服务:

面向连接的服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。当通信结束后,则应该释放这个连接。

而无连接的服务,两个实体之间的通信不需要先建立好连接,需要通信的时候,直接将信息发送到“网络”中,让该信息的传递在网上尽力而为地往且的地传送。

TCP 是一种面向连接的服务,提供可靠的传输服务。从而不可避免增加了许多开销,如:确认、流量控制、计时器以及连接管理。这不仅使协议数据单元的头部增大很多还要占用许多的处理机资源。

因此TCP主要适用于可靠性更重要的场合,如文件传输协议FTP、超文本传输协议HTTP、远程登录TELNET等。

UDP 是一种无连接的非可靠传输层协议,它在IP之上仅提供两个附加服务:多路复用和对数据的错误检查。

UDP在传送数据之前不需要先建立连接,远程主机的传输层收到UDP报文后,不需要给出任何确认。

由于UDP比较简单,其执行速度就比较快、实时性好。使用UDP的应用主要包括小文件传送协议(TFTP)、DNS、SNMP和实时协议(RTP)。

<font face="微软雅黑" color=#DC143C size=4>注意:</font>

1、IP数据报和UDP数据报的区别:

IP数据报在网络层要经过路由的存储转发;

而UDP数据报是在传输层的端到端的逻辑信道中传输,而封装成IP数据报在网络层传输时,UDP数据报的信息对路由是不可见的。

2、TCP 和网络层虚电路的区别:

TCP报文段是在传输层抽象的逻辑信道中传输,对路由器不可见。

虚电路所经过的交换结点都必须保存虚电路状态信息。

在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用TCP协议不影响网络层提供无连接服务。

UDP

UDP只是做了传输协议能够做的最少工作,只在IP的数据报服务之上增加了两个最基本的服务: <font face="微软雅黑" color=#DC143C size=4>复用和分用</font> 以及 <font face="微软雅黑" color=#DC143C size=4>差错控制</font> 。

一、UDP 的优点:

1、UDP无需建立连接。因此UDP不会引入建立连接的时延。

2、无连接状态。

TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数和序号与确认号的参数。

而UDP不维护连接状态,也不跟踪这些参数。因此,某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。

3、分组首部开销小。TCP 20字节的首部开销,而UDP仅有8字的开销。

4、应用层能更好地控制要发送的数据和发送时间。

UDP没有拥塞控制,因此网络中的拥塞也不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好满足这些应用的需求。

UDP 常用于一次性传输比较少量数掘的网络应用,如DNS、SNMP等, UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等)

UDP 提供尽最大努力的交付,即不保证可靠交付,但这并不意味着应用对数据的要求是不可靠的,因此所有维护传输可靠性的工作需要用户在应用层来完成。应用实体可以根据应用的需求来灵活设计自己的可靠性机制。

UDP是面向报文的。发送方UDP对应用层交下来的报文,在添加首部后就向下交付给IP层,既不合并,也不拆分,而是保留这些报文的边界;

接收方UDP对IP层交上来UDP用户数据报,去除首部后就原封不动地交付给上层应用进程,一次交付一个完整的报文。

因此报文不可分割,是UDP数据报处理的最小单位。

二、UDP的首部格式

UDP数据报包含两个部分: UDP首部和用户数据,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中,如图所示。

校验和:检测UDP数据报在传输中是否有错。有错就丢。当源主机不想计算校验和,则直接令该字段为全0。

如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方。

三、UDP 校验:

在计算校验和之前要在 UDP 数据报之前增加 12 个字节的伪首部。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。

有了伪首部不仅校验了 UDP 数据报,同时也校验了 IP 数据报的源 IP 地址和目的 IP 地址。

<font face="微软雅黑" color=#DC143C size=5 >校验的过程:</font>

首先发送方把是全零放入校验和字段并且添加伪首部。

然后,把UDP数据报看成是由许多16位的字串连接起来。

若UDP数据报的数据部分不是偶数个字节,则要在数据部分增加一个全零字节(此字节不发送)。

接下来就按二进制反码计算出这些16位空的和。将此和的二进制反码写入校验和中。

在接收方,把收到的UDP数据报加上伪首部(如果不为偶数个字节,则需要补上全零字节)后,按二进制反码计算出这些16位字的和。

当无差错时其结果应全为1。否则就表明有差错出现,并丢弃这个 UDP 数据报。


<font face="微软雅黑" color=#DC143C size=4 >注意:</font>

1、校验时,若UDP数据报部分的长度不是偶数个字节,则需要填入一个全0字节,但是此字节和伪首部一样,是不发送的。

2、如果UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付给上层,但是需要附上错误报告,即告诉上层这是错误的数据报。

3、相比于 IP 数据报的校验只校验 IP 数据报的首部而言,UDP 的校验是把首部和数据部分一起进行校验。

这种简单的差错检验方法的检错能力并不强,但它的好处是简单,处理速度快。

public static void main(String args[]){
  System.out.println(" Hello Word ");
}
上一篇下一篇

猜你喜欢

热点阅读