传输层协议

传输层的功能

传输层位于应用层和网络层之间,为终端主机提供端到端的连接,以及流量控制(由窗口机制实现)、可靠性(由序列号和确认技术实现)、支持全双工传输等等。传输层协议有两种: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协议使用16bits端口号来表示和区别网络中的不同应用程序,网络层协议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

  1. TCP传输控制协议
  2. 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=1024, 表示一次可以发送1024字节的数据。窗口大小起始于确认字段指明的值,是一个16bits字段。窗口大小可以调节。

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

​​​​​​​​​​​​​​TCP的端口号

HOST A对HOST Z进行TELNET远程连接,其中目的端口号为知名端口号23,源端口号为1028。源端口号没有特别的要求,只需保证该端口号在本机上是唯一的就可以了。一般从1023以上找出空闲端口号进行分配。源端端口号又称作临时端口号,这是因为源端口号存在时间很短暂。

这是同一主机上多个应用进程同时访问一个服务的示例。HOST A上具有两个连接同时访问HOST Z的TELNET服务,HOST A使用不同的源端口号来区分本机上的不同的应用程序进程。

IP地址和端口号用来唯一地确定数据通讯的连接。

​​​​​​​TCP的序号和确认号综述

序列号的作用:一方面用于标识数据顺序,以便接收者在将其递交给应用程序前按正确的顺序进行装配;另一方面是消除网络中的重复报文包,这种现象在网络拥塞时会出现。

确认号的作用:接收者告诉发送者哪个数据段已经成功接收,并告诉发送者接收者希望接收的下一个字节。

— :注意

确认号是接收端希望得到的下一个数据段的序号,对于传输失败的数据段进行单独确认与重传。TCP三次握手/建立连接

TCP是面向连接的传输层协议,所谓面向连接就是在真正的数据传输开始前要完成连接建立的过程,否则不会进入真正的数据传输阶段。

TCP的连接建立过程通常被称为三次握手( three-way handshake),过程如下:

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

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

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

这三个报文段完成连接的建立。

发送第一个SYN的一端将执行主动打开(active open)。接收这个SYN并发回下一个SYN的另一端执行被动打开(passive open)

当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。RFC 793 [Postel 1981c]指出ISN可看作是一个32比特的计数器,每4 ms加1。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它作错误的解释。

如何进行序号选择? 在4.4 BSD(和多数的伯克利的实现版)中,系统初始化时初始的发送序号被初始化为1。这个变量每0.5秒增加64000,并每隔9.5小时又回到0。

另外,每次建立一个连接后,这个变量将增加64000。

 TCP四次手/终止连接

一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独进行关闭。当一方完成它的数据发送任务后就发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了那个方向的数据传送。所以TCP终止连接的过程需要四个过程,称之为四次挥手过程。

​​​​​​​ 基本概念——窗口控制

窗口实际上是一种流量控制的机制。

假定发送方设备以每一次发送4096字节数据,也就是说,窗口大小为4096。接收方设备成功接收数据包,用序列号4097确认。但同时接收方设备由于性能的原因还未全部送至上层协议处理,这时也将会发送确认报文,对收到的数据进行确认,同时调整窗口大小。发送方设备收到确认,将以窗口大小2048发送数据。如果发送方接收到携带窗口号为0的确认,将停止这一方向的数据传输,直到收到窗口大小大于0的确认报文再进行发送。

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

UDP用户报文协议

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值