HCNA --- TCP/IP传输层

传输层位于TCP/IP协议栈第四层,为应用程序提供服务。传输层定义了主机应用程序之间端到端的连通性。传输层将上层的数据封装到自己的数据部分并加上传输层头部封装成数据段交给下层协议处理,传输层定义了自己的报文格式。

TCP传输控制协议为应用程序提供可靠的、面向连接的服务。
TCP通过如下几方面提供其可靠性:
面向连接的传输:TCP的任何一方进行数据传输之前必须在双方之间建立连接。
MSS(最大报文段长度):表示TCP发往另一端的最大报文段长度。当建立一个连接时,连接的双方都要通告各自的MSS,以充分利用带宽资源。
传输确认机制:当TCP传输一个数据段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到目的端的确认报文,TCP将重传该数据段。
首部和数据的检验和:TCP将保持首部和数据的检验和,这是一个端到端的检验。目的是检测数据在传输过程中的变化。如果收到段的检验和有所差错,TCP将丢弃该报文段并不确认收到此报文段。因此TCP将启动重传机制。
流量控制:TCP还能提供流量控制。TCP连接的每一方都有一个固定大小的缓冲空间。 TCP接收端只允许另一端发送接收缓冲区所能够容纳的数据。这能够防止较快的主机致使较慢的主机缓冲区溢出。

TCP使用IP作为网络层协议, TCP数据段被封装在一个IP数据包内。
TCP数据段由TCP Head(头部)和TCP Data(数据)组成。
TCP最多有60个字节的首部,如果没有任选字段,正常的长度是20字节。
TCP Head如上图标识的一些字段组成,这里列出几个常用的字段。
16位源端口号: TCP会为源应用程序分配一个源端口号。
16位目的端口号:目的应用程序的端口号。
每个TCP段都包含源和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址可以唯一确定一个TCP连接。
32位序列号:用于标识从TCP发端向TCP收端发送的数据字节流。
32位确认序列号:确认序列号包含发送确认的一端所期望收到的下一个序号。确认序列号为上次成功收到的数据序列号加1。
4位首部长度:表示首部占32bit字的数目。因为TCP首部的最大长度为60字节。
16位窗口大小:表示接收端期望接收的字节,由于该字段为16位,因而窗口大小最大值为6553字节
16位检验和:检验和覆盖了整个TCP报文段,包括TCP首部和TCP数据。该值由发端计算和存储并由接收端进行验证。

TCP提供可靠的面向连接的全双工传输层协议。 TCP的可靠性通过很多方法来得到保障,在数据连接建立之后再传送数据就是其中一种方法。
TCP的任何一方在传输数据之前都必须在通信的双方之间建立一条连接。
TCP连接的建立是一个三次握手的过程。如图所示:
1、请求端(通常也称为客户端)发送一个SYN段表示客户期望连接服务器端口,初始序列号为a。
2、服务器发回序列号为b的SYN段作为响应。同时设置确认序号为客户端的序列号加1(a+1)作为对客户端的SYN报文的确认。
3、客户端设置序列号为服务器端的序列号加1(b+1)作为对服务器端SYN报文段的确认。
这三个报文段完成TCP连接的建立。

前面提到TCP是面向连接的全双工传输层协议。全双工意味着同一时刻双方向都可以进行数据的传输,因此通信的双方都必须关闭连接。
TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。
如图所示:
1、请求端(通常也称为客户端)想终止连接则发送一个FIN段,序列号设置为a。
2、服务器回应一个确认序号为客户端的序列号加1(a+1)的ACK确认段,作为对客户端的FIN报文的确认。
3、服务器端向客户端发送一个FIN终止段(设置序列号为b,确认号为a+1)。
4、客户端返回一个确认报文(设置序列号为b+1)作为响应。
以上四次交互完成双方向的连接的关闭。

多路复用是指多个应用程序共享同一个传输层建立的连接进行数据的传送。传输层把上层发来的不同应用程序数据分成段,按照先到先发(FIFO)的原则(或者其他原则)发送数据段。这些数据段可以去往同一目的地,也可以去往不同目的地。在传输过程中,服务器和终端主机继续以它们的协议软件进行通信,以验证数据是否正确接收。当终端设备收到数据流时,它对这些数据流进行分离和排序,以使传输层能够正确地将数据流送到终端主机。当数据传输结束后,双方协商断开虚链路。

MSS(Maximum Segment Size)表示TCP传给另一端的最大报文段长度。当建立一个连接时,连接的双方都要通告各自的MSS,协商得到MSS。 MSS的默认值为536,因此它允许IP数据报长度为576字节(536+20字节IP首部+20字节TCP首部)。通过协商最大报文段长度值,可以更好的提高网络利率和提升网络性能。

TCP的可靠传输还体现在TCP使用确认技术保证数据流从源设备准确无误地发送到目的设备。窗口机制因为使用了肯定确认(positive acknowledgement)技术,通常被认为是非常可靠的。
确认技术的工作原理如下:
当目的设备接收到源设备发送的数据包时,向源端发送确认报文,源设备收到确认报文后,继续发送数据包,如此重复;当源设备发送数据包后没有收到确认报文,在一定时间后(源设备在发送数据包时启动计时器,计时器计时结束的时间),源设备降低数据传输速率,重发数据包。

如上图所示,源设备与目的设备建立了一条端到端的虚链路,开始数据传输。源设备向目的设备发送序列号为1的数据包,目的设备收到数据包后,用序列号2(1+1)来确认正确接收此数据包,源设备收到确认信息后,继续发送序列号为2(1+1)的数据包。目的设备由于没有正确接收到序列号为2的数据包,所以继续用序列号2(1+1)来进行确认,表示目前只正确接收到序列号为1的数据包。源设备收到序列号为2的确认报文后,重发序列号为2的数据包,当目的设备正确接收到数据包后用序列号3(2+1)进行确认。

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

如上图所示以数据单方向发送为例,介绍滑动窗口如何实现流量控制。
服务器端向客户端发送4个大小为1024字节的数据段,其中发送端的窗口大小为4096,客户端到以ACK4097响应,窗口大小调整为2048,表明客户端(即接收端)缓冲区只能处理2048个字节的数据段。于是发送端改变其发送速率。发送接收端能够接收的数据段大小2048的数据段。滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。然而,它只能在源端设备和目的端设备起作用,当网络中间设备(例如路由器等)发生拥塞时,滑动窗口机制将不起作用。我们可以利用ICMP的源抑制机制进行拥塞管理。

UDP为应用程序提供面向无连接的服务,所以在传数据之前源端和目的端之间不必要像TCP一样需要事先建立连接。正由于UDP是面向无连接的传输协议,所以UDP不需要去维护连接状态和收发状态,因此服务器可同时向多个客户端传输相同的消息。UDP适用于对传输效率要求高的运用,由应用层提供可靠性的保障。如常用于认证计费的Radius协议、RIP路由协议都是基于UDP的

UDP和TCP一样都使用IP作为网络层协议, TCP数据报被封装在一个IP数据包内。
由于UDP不象TCP一样提供可靠的传输,因此UDP的报文格式相对而言较简单。整个UDP首部有如下标识:
16位源端口号:为源端应用程序分配的一个源端口号。
16位目的端口号:目的应用程序的端口号
16位UDP长度:是指UDP首部和UDP数据的字节长度。该字段的最小值为8。
16位UDP检验和:该字段提供与TCP检验和同样的功能,只不过在UDP协议中该字段是可选的。

如上所示,本页对比了TCP协议与UDP协议。通过比较可以总结出TCP是适合于对传输可靠性要求高的服务;而UDP适合于对传输速度敏感的服务。 UDP由于协议自身不提供可靠性,因此要求上层协议提供差错控制和重传机制。

TCP/IP常见应用介绍

TCP/IP协议栈应用层负责处理特定的应用程序。应用层包括大量常用的应用程序,如: FTP、 TFTP、 POP3、 SMTP、 SNMP、Telnet、 Ping、 Tracert、 HTTP、 DNS、 WINS等。

Ping是用来检查IP网络连接及主机是否可达的常用方法。如路由器之间,主机与路由器之间的连通性问题都可以使用Ping来判断。 Ping使用一系列ICMP(Internet Control Message Protocol互联网控制消息协议)的消息来确定目的地址是否可达,通讯延时以及丢包情况。 Ping实际上是一个发出请求并等待响应的过程。发起Ping命令的源端首先向目的地址发送“Echo”消息并等待回应。如果“Echo”包到达目的地址,并且在确定时间周期内,从目的地成功返回“Echo Reply”包给源端,则Ping成功。一旦超过时间周期则会显现“Request timed out”请求超时的消息。
上图中,通过在RTA上使用Ping命令测试与RTB互联IP地址的连接,可以检测RTA与RTB之间的连通性。
Ping 1.1.1.2 , 1.1.1.2为用于测试连通性的目的址址。
Ping除基本命令外提供许多可选参数供使用,这里列举-a和-i两个参数。
-a source-ip-address:设置发送ICMP ECHO-REQUEST报文的源IP地址。
-i interface-type interface-number:设置发送ICMP ECHOREQUEST报文的接口。
上图中还可以用Ping 1.1.1.2 –a 1.1.1.1。

ICMP协议是网络层的一个重要组成部分。 IP不提供可靠性,所以无法获取到网络故障的信息,利用ICMP可以获取网络中问题的反馈。
ICMP传递差错、控制、查询报文等信息。其报文被封装在IP报文中,协议字段值为1。

ICMP提供了不同的消息类型,这里列举了常用的消息类型。
0 Echo Reply 响应回应消息
3 Destination Unreachable目的不可达消息
4 Source Quench源抑制消息
5 Redirect重定向消息
8 Echo响应消息
11 Time Exceeded超时消息
12 Parameter Problem参数问题消息
13 Timestamp时间戳消息
Timestamp Reply时间戳回应消息
通常情况下消息类型是成对出现的。如Echo Reply就是对Echo消息的回应。同一个类型的消息也包含了不同的信息。

ICMP报文使用基本的IP报头(即20字节)。ICMP报文封装在IP报文中,数据报有前64bit数据表示是ICMP报文。因此ICMP报文实际是IP报文加上该数据报的前64bit数据。
ICMP报文的基本格式由Type、Code、Checksum和unused字段组成。不同的消息报文其格式略有些不同,这里不做深入的介绍。
Type类型:表示ICMP消息类型。
Code代码:同一个ICMP消息类型中通过不同的代码表示不同的信息。
例如:Type为3的Destination Unreachable目的不可达消息,其Code代码就细分了几类,这里列举了以下四个:
0 = net unreachable 网络不可达
1 = host unreachable 主机不可达
2 = protocol unreachable 协议不可达
3 = port unreachable 端口不可达
Checksum校验和:该字段占16bit,目前没有使用,值为0。

Tracert是为了探测源节点到目的节点之间数据报文所经过的路径。它利用IP报文的TTL值在每经过一个路由器转发后减1,当TTL=0时则向源节点报告TTL超时。Tracert首先发送一个TTL为1的UDP报文,因此第一跳发送回一个ICMP错误消息以指明此数据报不能被发送(因为TTL超时),之后Tracert再发送一个TTL为2的UDP报文,同样第二跳返回TTL超时,这个过程不断进行,直到到达目的地,由于数据报中使用了无效的端口号(缺省从33434开始使用,后续UDP报文目的端口号自动加1)此时目的主机会返回一个ICMP的目的不可达消息,表明该Tracert操作结束。 Tracert记录下每一个ICMP TTL超时消息的源地址,从而提供给用户报文到达目的地所经过的网关IP地址。Tracert同样可以提供测试连通性的功能,当Tracert某一目的地址时,从显示的路径信息可以判断出故障点在什么地方。

在上图中列举出测试连通性的两种方法Ping和Tracert。
Ping和Tracert都可以测试出RTA与RTC的3.3.3.3之间是否连通从两个显示结果可以看到Ping可以简单的直观的知道结果是可达的,而Tracert则更加详细的显示数据包的转发路径。数据包首先经过10.1.1.2然后经过10.2.2.2到达3.3.3.3。另一方面,使用Tracert命令更可以找到问题的故障点。如本例中如果显示信息如下,则说明了数据包可以被送到下一跳10.1.1.2,但是无法从该路由器再转发出去,则证明问题出现在该路由器与目的地之间。
[RTA]tracert 3.3.3.3
traceroute to 3.3.3.3(3.3.3.3) 30 hops max,40 bytes packet
1 10.1.1.2 31 ms 31 ms 32 ms
2 * * *

Telnet常用于远程服务,用户通过Telnet可以登录到远程服务器。
Telnet使用的传输层协议为TCP,其端口号为23。
Telnet命令如下:
telnet 192.168.1.22 23
192.168.1.22:为远程服务器IP地址。
23:为端口号,默认为23,可以不输入。如果不是23的情况下一定要输入端口号。

FTP是用于文件传输的Internet标准协议,它采用两个TCP连接来传输一个文件。一个是控制连接;另一个是数据连接。根据是使用Port模式还是Passive模式, FTP使用不同的TCP端口号。在过去,客户端缺省为Port模式;近来,由于Port模式的安全问题(容易受到黑客攻击),许多客户端的FTP应用缺省为Passive模式。
Port模式下, FTP采用两个缺省端口号: 20与21; 20端口用于数据传输, 21端口用于命令传输。VRP系列路由器即可以作为FTP Client又可以作为FTP Server。
上图中PC作为FTP Client通过FTP协议登录到FTP Server进行操作。客户端PC运行FTP程序(即在“运行”中输入命令FTP1.1.1.1),系统会自动弹出登录视图要求输入用户名和密码,成功输入用户名和密码后,客户端可以成功登录。

使用VRP系列路由器时如果需要从远端服务器中加载系统文件,这时VRP路由器可作为FTP Client从FTP Server获取文件。
在VRP系统参观视图下输“FTP 远端服务器地址”,这时会提示要求输入用名和密码,成功输入用户名和密码后,提示符变为“[FTP]”表示已成功登录。
Get和Put是对文件的两种不同操作方式。其中Get表示从服务器下载文件,而Put表示从本地上传文件到服务器。
上图中,命令Get vrpcfg.cc vrp1表示从FTP服务器下载名为vrpcfg.cc的文件到本地,并以vrp1为文件名存储。

TFTP ( Trivial File Transfer Protocol)即简单文件传送协议。当用户需要在服务器端与客户端传送文件且不需要复杂的交互环境时,可以使用TFTP协议。TFTP使用UDP协议,端口号为69 。VRP系列路由器只支持作为TFTP Client。

总结:

1、TCP如何建立连接和终止连接?
TCP连接的建立是一个三次握手过程。通过请求-确认-再确认三次交互建立连接。
由于TCP采用全双工的工作模式。建立连接的双方各自提出终止连接请求并等待对待确认,因此连接的终止则要经过四次交互。
2、TCP如何提供可靠性?
TCP通过序列号和确认机制提供其传输的可靠性。使用序列号通信的双方可以清楚的了解数据报文段的发送和接收情况。TCP的确认机制可以保证传输的可靠性。保证数据流从源设备准确无误地发送到目的设备。
3、TCP滑动窗口技术的目的?
TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间的数据传输。滑动窗口机制为端到端设备间的数据传输提供了可靠的流量控制机制。

4、Ping和Tracert的作用分别是什么?
Ping和Tracert都可用于测试网络的连通性。 Ping可以提供相应的选项来满足不同的测试需求,如可以指定发出报文的源IP,源端口等。而Tracert更多是用于获得数据包的转发路径,通过Tracert也可以初步的判断故障点。
5、ICMP的报文格式?
ICMP报文使用基本的IP报头(即20字节),报文封装在IP报文中。 ICMP报文的基本格式由Type、 Code、 Checksum和unused字段组成。不同的消息报文其格式不同。
6、FTP和TFTP的区别?
FTP是基于TCP,而TFTP基于UDP。 TFTP是一个简单的文件传输协议,适合于只读存储器,而FTP设计用于高吞吐量的文件传输,同时FTP可以提供对FTP用户的登录名和密码的控制, TFTP不提供该功能。路由器可以支持FTP Client和FTP Server两种工作模式,而TFTP只支持Client模式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值