OSI传输层功能及协议

网络 网络管理
与TCP的通信机制不同,由于UDP是无连接的协议,因此通信发生之前不建立会话。UDP是基于事务的,换言之,应用程序要发送数据时,它仅是发送数据而已。

一、传输层的作用

1、 跟踪各个会话

因为每台主机上可能有多个进程进行通信,传输层需要将各个数据段发送给相应的进程。这也可以理解,在传输层报头中加入了源和目的进程号(其实就是端口号)。

2、 分段数据并管理每个分段(源)

3、 重组数据(目的)

4、 标识应用程序

这一条和第一条类似,用端口号标识。

5、 流量控制

6、 错误恢复

7、 开始会话

二、端口号

类型:

公认端口——端口0到1023(210-1)

公认端口用于服务和应用程序。都是一些常用的应用程序所采用。

例如:FTP(端口20,21);HTTP(端口80);DNS(端口53)

已注册端口——端口1024到49151

分配给用户进程或应用程序。这些应用程序是用户选择安装的一些应用程序,不是已经分配了公认端口的常用应用程序。

这些端口在没有被服务器资源占用时,可由客户端动态选用为源端口。

例如:MSN Messenger(端口1812);HTTP备用(端口8008,8080)

动态或私有端口——端口49152到65535

也称为临时端口。这些端口往往在开始连接时被动态分配给客户端应用程序。客户端一般很少使用动态或私有端口服务(只有一些点对点文件共享程序使用)。

三、TCP头结构

TCP协议头最少20个字节,包括以下的区域:

TCP源端口(SourcePort):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是标示报文的返回地址。

TCP目的端口(Destinationport):这个端口指明报文接收计算机上的应用程序地址接口。

TCP序列号(序列码,SequenceNumber):32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1.

确认号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。如果设置了ACK控制位,这个值表示一个准备接收的下一个包的序列码。

注:可以将确认号简单理解为准备接收地下一个包得序列码。

数据偏移量(HLEN):4位包括TCP头大小,指示何处数据开始。

保留(Reserved):6位值域,这些位必须是0.为了将来定义新的用途所保留。

标志(Code Bits):6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN.

窗口(Window):16位,用来表示窗口大小。

校验位(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值结果完全一样,从而证明数据的有效性。

优先指针(紧急,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。

选项(Option):长度不定,但长度必须以字节。如果没有选项就表示这个一字节的域等于0.

填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍。

[NextPage]

四、TCP三次握手

第一次握手(申请):建立连接时,客户端发送SYN包(SYN=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize SequenceNumbers)。

第二次握手(回复+申请):服务器收到SYN包,必须确认客户的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手(回复):客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

五、通信中各种状态

LISTENING:监听来自远方TCP端口的连接请求。

SYN-SENT:在发送连接请求后等待匹配的连接请求。

SYN-RECE:在收到和发送一个连接请求后等待对连接请求的确认。

ESTABLISHED:代表一个打开的连接,数据可以传送给用户。

FIN-WAIT-1:等待远程TCP的连接中断请求,或先前的连接中断请求的确认。

FIN-WAIT-2:从远程TCP等待连接中断请求。

CLOSE-WAIT:等待从本地用户发来的连接中断请求。

CLOSING:等待远程TCP对连接中断的确认。

LAST-ACK:等待原来发向远程TCP的连接中断请求的确认。

TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认。

CLOSED :没有任何连接状态。

可以用netstat命令查看一下主机现在建立的连接和状态。

 

六、TCP会话终止

若要关闭连接,应设置数据报头重的FIN控制标志,需采用包含FIN数据段和ACK数据段的二次握手,因此要终止一个TCP支持的整个过程,需要实施4次交换,以终止两个双向会话。也可以用三次握手来终止(四次握手中的二、三两次合并为一次)。

[NextPage]

七、TCP重传

关于确认号的一个小细节:如果接收到序列号为1500到3000以及3400到3500的数据段,那么确认号应当为3001.这是因为未接收到3001到3399之间的数据段,此时准备接收的下一个数据段的序列号为3001.

TCP的标准实施流程是:主机传输数据段,并将数据段的副本列入重新发送队列,然后启动计时器。当接收到数据确认信息时,主机将从队列中删除对应数据段;如果到及时器超时还没有收到确认信息,将重新传输数据段。

现在的主机还有一项备选功能:选择性确认。如果两台主机都支持选择性确认功能,目的主机便可以确认间断数据段中得数据,那么源主机就只要传输丢失的数据。

八、TCP的拥塞控制

主要要清楚的就是动态窗口大小控制,来使得每个TCP会话有最佳的窗口大小。

九、UDP协议:低开销通信

UDP是一种简单协议,提供了基本的传输层功能。与TCP相比,UDP开销极低,因为UDP是无连接的,并且不提供复杂的重新传输、排序和流量控制机制。

与TCP的通信机制不同,由于UDP是无连接的协议,因此通信发生之前不建立会话。UDP是基于事务的,换言之,应用程序要发送数据时,它仅是发送数据而已。由于不建立会话,因此一旦数据和端口号准备就绪,UDP就可以生成数据报并递交给网络层,并在网络上寻址和发送。

因为UDP不进行排序,所以数据到达的时候只是按先来后到的顺序进行排列。如果数据的顺序对应用程序很重要,那么应用程序只能自己标志数据的正确顺序,并决定如何处理这些数据。

TCP与UDP的关键区别在于可靠性。

责任编辑:张存 来源: 红黑联盟
相关推荐

2010-07-05 11:32:54

HART协议

2023-10-09 18:28:12

2010-07-06 15:43:04

UDP协议

2009-12-29 19:35:56

2011-02-21 11:15:12

2010-06-09 13:21:30

TCP传输层协议

2010-07-09 11:37:29

动态路由选择协议

2019-09-30 09:41:04

五层协议OSITCP

2016-11-29 15:22:47

协议应用层安全层

2010-09-09 16:48:50

七层网络协议

2021-10-11 10:41:14

TCP传输层协议网络

2010-01-19 08:59:17

2014-06-17 09:30:14

OSI

2016-10-10 22:48:16

2010-02-01 09:27:00

2011-11-21 09:55:31

2010-06-30 12:40:47

Linux SNMP

2010-06-28 15:41:04

FTP文件传输协议

2016-10-10 23:00:18

2022-10-28 18:36:18

点赞
收藏

51CTO技术栈公众号