传输层协议介绍(深入学习)

1.TCP协议介绍

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通讯协议。TCP/IP传输协议对互联网各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是一个四层的体制结构,应用层、传输层、网络层和数据链路层都包含在内。

TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP/SMTP等,是用来接收来自传输层数据或者按照不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用使用电脑及平台内部数据集合通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、ICMP,主要负责网络中数据包的传送;网络访问层,也叫网络接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒体媒介有关信息细节问题进行有效处理。

1.1.TCP的特点

TCP/IP协议能够迅速发展起来并称为事实上的标准,是恰好适应了世界范围内数据通信的需要。它有以下特点:

(1)协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。

(2)独立于网络硬件系统,可以运行在广域网,更适合于互联网。

(3)网络地址统一分配,网络中每一个设备和终端都具有一个唯一的地址。

(4)高层协议标准化,可以提供多种多样可靠网络服务。

1.2.TCP时效性

TCP/IP传输协议的时效性是指,传输的信息在一定的使用情景、时间范围内,数据信息对使用者是有价值的。更宏观的来说,信息的时效性还包括数据信息在传输后引起接受者的兴趣和对社会产生的影响。但随着时间的推移,数据信息的被利用价值就会越来越小。也就是说,针对同一事物的相关数据信息在不同的时间段里有着或大或小的价值差异,这种差异我们叫作数据信息的时效性。TCP/IP传输协议下的数据信息传输,克服了传统信息传输方式的滞后、拖延、效率低下的问题。TCP/IP传输协议往往能及时地将有效信息传输给信息需要者,这就能实现数据信息的价值最大化,保证数据信息的时效性。

(1)数据的时新性:TCP/IP传输协议能利用高速运转的网络技术,及时捕捉科学有效的数据信息。并且能随着时间的变化,自动淘汰过时的无用信息,做到与时俱进。

(2)数据的灵活性:数据在传输之后,它最终是要满足使用者的需要。计算机网络中的TCP/IP传输协议除了能保障数据信息的时新性,还能根据使用者的不同需求,提供与实际相符的数据信息,具有充分的灵活性和可扩展性。

(3)数据的安全准确性:数据信息在传输过程中会一般会受传输者、接收者、传输渠道以及外部环境的影响。这些因素会不同程度上影响数据信息输送的及时性。例如由于传输者自身的计算机专业能力的水平有限,没有认识到信息传输的重要性,对数据的收集不够完整和有效,或者是采用了错误的传输方式,都会影响信息传输的时效性。而计算机网络中的TCP/IP传输协议的数据传输,不仅能处理好复杂的信息结构,繁多的数据信息,还能维护数据信息的安全,确保数据信息的科学准确性。

(4)数据传输过程的流畅性:为了满足当今社会对数据信息的需求,计算机网络中的TCP/IP传输协议在对传统的数据传输过程进行了改善,使得网络信息的传输具备时效性特点,更加快速便捷。基于计算机网络的TCP/IP协议,数据传输流程主要是建立TCP/IP连接、数据发送、数据接收这三个主要环节。这三个环节的无缝连接使得数据信息实现了实时性传输。

(5)传输技术的先进易用性:能够实现实时性的信息传输,最主要的是离不开网络技术的支持。TCP/IP传输协议能够保证数据信息及时传输,它采用的技术具有先进性,并且容易理解和使用。计算机网络中TCP/IP传输协议主要采用的是先进的数据压缩技术。数据压缩就是文本编码的过程,以便将相同的数据信储存在更少的字节空间。文本占用空间减少、传输速度加快。数据压缩技术允许以最快的操作速度进行实时编码。

1.3.TCP的缺陷

(1)该模型没有明显地区分服务、接口和协议的概念。因此,对于使用新技术来设计新网络,TCP/IP模型不是一个太好的模板。

(2)TCP/IP模型完全不是通用的,并且不适合描述除TCP/IP模型之外的任何协议栈。(协议栈(英语:Protocol stack),又称协议堆叠,是计算机网络协议套件的一个具体的软件实现。协议套件中的一个协议通常是只为一个目的而设计的,这样可以使得设计更容易。因为每个协议模块通常都要和上下两个其他协议模块通信,它们通常可以想象成是协议栈中的层。最低级的协议总是描述与硬件的物理交互。每个高级的层次增加更多的特性。用户应用程序只是处理最上层的协议。)

(3)链路层并不是通常意义上的一层。它是一个接口,处于网络层和数据链路层之间。接口和层间的区别是很重要的。

(4)TCP/IP模型不区分物理层和数据链路层。这两层完全不同,物理层必须处理铜缆、光纤和无线通信的传输特征;而数据链路层的工作是确定帧的开始和结束,并且按照所需的可靠程度把帧从一端发送到另一端。

1.4.TCP报文格式

1.4.1源端口和目的端口字段
  • TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。
  • TCP目的端口(Destination Port):目标计算机的应用程序端口号,占 16 位。
1.4.2序列号字段

CP序列号(Sequence Number):占 32 位。它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。

1.4.3确认号字段

TCP 确认号(Acknowledgment Number,ACK Number):占 32 位。它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。

1.4.4数据偏移字段

TCP 首部长度(Header Length):数据偏移是指数据段中的“数据”部分起始处距离 TCP 数据段起始处的字节偏移量,占 4 位。其实这里的“数据偏移”也是在确定 TCP 数据段头部分的长度,告诉接收端的应用程序,数据从何处开始。

1.4.5保留字段

保留(Reserved):占 4 位。为 TCP 将来的发展预留空间,目前必须全部为 0。

1.4.6标志位字段
  • CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
  • ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
  • URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
  • ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
  • PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
  • RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
  • SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
  • FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
1.4.7窗口大小字段

窗口大小(Window Size):占 16 位。它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。

1.4.8TCP 校验和字段

校验位(TCP Checksum):占 16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum 是根据伪头 + TCP 头 + TCP 数据三部分进行计算的。

1.4.9紧急指针字段

紧急指针(Urgent Pointer):仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数,占 16 位。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。

1.4.10可选项字段

选项(Option):长度不定,但长度必须是 32bits 的整数倍。

TCP报文格式

1.5.TCP三次挥手

建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

三次挥手(1)

为什么需要三次握手,是为了解决下列的一个问题:

client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用三次握手,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用三次握手的办法可以防止上述现象发生。

1.6.四次挥手

四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。

1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

2.第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

3.第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

4.第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1, Server进入CLOSED状态,完成四次挥手。

三次挥手(1)

如果有大量的连接,每次在连接、关闭时都要三次握手,四次挥手,会很明显会造成性能低下,因此,

HTTP有一种叫做keep connection的机制,它可以在传输数据后仍然保持连接,当客户端再次获取数据时,直接使用刚刚空闲下的连接而无需再次握手

v2-249e9f2a599f1904cf0a604a71e4b501_720w

2.UDP协议介绍

2.1.UDP协议的特点

面向报文,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。即不拆分,也不合并,而是保留这些报文的边界。不对数据做特殊处理,不提供数据包分组,组装和不能对数据包进行排序,提供面向事务的简单不可靠信息传送服务,分组传输顺序的检查与排序由应用层完成,可靠性由应用层保证。

常用UDP端口号有:53(DNS)、69(TFTP)、161(SNMP)

使用UDP的协议包括:TFTP、SNMP、NFS、DNS、BOOTP

2.2.UDP协议应用场景

UDP具有资源消耗校,处理速度快的优点和可靠性不高的缺点,可以适用于在数据传输效率高,对可靠性要求不高的应用程序,或者可以在应用程序层来保障可靠性的应用程序。

适用的场景:(1)在屏幕上报告股票市场、显示航空信息等。(2)音频、视频和普通数据在传输时使用UDP较多。(3)IM工具,比如聊天用的ICQ和QQ就是使用的UDP协议。(4)在现场测控领域、面向的是分布化的控制器、监测器等,其应用场合环境比较恶劣,这样就对待传输层数据提出了不同的要求,如实时、抗干扰性、安全性等。

2.3.UDP报文格式

UDP 报文中每个字段的含义如下:

(1)源端口:这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了。

(2)目的端口:接收端计算机上 UDP 软件使用的端口,占据 16 位。

(3)长度:该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。

(4)校验值:该字段占据 16 位,可以检验数据在传输过程中是否被损坏。

UDP报文格式

3.常见协议及其端口介绍

telnet:远程登入协议 23

FTP:文件传输协议 21

SMTP:邮件传输协议 25

DNS:域名解析协议 53

POP3:邮件服务器 110

UDP:用户数据报协议

OSI:网络协议

IOS:苹果操作系统

ISO:镜像文件格式

HTTP协议是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,HTTP协议的端口号为:80

TCP传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,电脑是通过增删改查这四种方式与服务器进行交互的。其中中间有一个TCP传输层,让电脑和服务器建立连接的,它是采用三次握手确认建立一个连接。四次挥手,终止TCP连接。

HTTP协议是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,HTTP协议的端口号为:80

TCP传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,电脑是通过增删改查这四种方式与服务器进行交互的。其中中间有一个TCP传输层,让电脑和服务器建立连接的,它是采用三次握手确认建立一个连接。四次挥手,终止TCP连接。

Logo

长江两岸老火锅,共聚山城开发者!We Want You!

更多推荐