TCP/IP学习之路(六)

传输层

之前提到,TCP/IP传输层包含很多有用的协议,能够提供数据在网络中传输所需要的必要寻址信息。传输层充当了网络中应用程序与网络之间的接口。并且能够把网络数据传递给特定的应用程序。

端口和套接字

在TCP/IP系统中,应用程序可以使用端口号通过TCP或UDP协议模块指定数据目的地。端口是一个预定义的内部地址,充当从应用程序到传输层或是从传输层到应用程序之间的通路。例如,客户端计算机通常利用TCP端口21来访问服务器上的FTP程序。
进一步观察传输层这种与应用程序相关的寻址机制,就会发现TCP和UDP数据实际是被发送到一个套接字上的。套接字是一个由IP地址和端口号组成的地址,例如,套接字地址111.121.131.141.21指向IP地址为111.121.131.141的计算机的端口21。
下面的例子展示了一台计算机如何通过套接字访问目的计算机上的一个应用程序。
1.计算机A通过一个周知的端口向计算机B上的一个应用程序发起一个连接。周知的端口与IP地址组合之后就构成计算机A的目的套接字。连接请求包含着一个数据字段,告诉计算机B使用什么套接字向计算机
A返回信息,这也就是计算机A的源套接字地址。
2.计算机B通过周知端口接收到来自计算机A的请求,向作为计算机A源地址的套接字发送一个响应。这个套接字就成为计算机B上的应用程序向计算机A上的应用程序发送消息的目的地址。

多路复用/多路分解

套接字寻址系统使得TCP和UDP能够执行传输层的另一个重要任务:多路复用和多路分解。多路复用是指把多个来源的数据合并成一个输出,而多路分解是把从一个来源接收的数据发送到多个输出。
多路传输/多路分解让TCP/IP协议栈较低层的协议不必关心哪个程序在传输数据,只需要处理数据即可,与原应用程序相关的操作都由传输层完成了,数据通过一个与应用程序无关的管道在传输层与网际层之间传递。

TCP和UDP

TCP是一个面向连接的传输协议,提供了全面的错误控制和流量控制。UDP是个无连接协议,错误控制也简单得多。可以这样说,TCP是为了可靠性,而UDP是为了速度。必须要支持交互式会话得应用程序,比如SSH和FTP,才会使用TCP。而自己实现错误检测或不需要过多错误检测得应用程序会倾向于使用UDP。

TCP

面向流的处理:TCP以流的方式处理数据。面向流的处理意味着TCP可以一个字节一个字节地接收数据,而不是一次接受一个预定义格式地数据块。TCP把接受到的数据组成长度不定的段,再传递到网际层。
重新排序:如果数据以错误的顺序到达目的地,TCP模块能够对数据重新排序来恢复原始顺序。
流量控制:TCP的流量控制特性能够确保数据传输不会超过目的计算机接收数据的能力。由于在不同的环境中,处理器速度和缓存大小可能会有很大的差别,所以这种流量控制能力是非常重要的。
优先级与安全:美国国防部对TCP的规范要求可以为TCP连接设置可选的安全级别和优先级,但很多TCP实现并没有提供这些安全和优先级特性。
适当的关闭:TCP像重视建立连接一样重视关闭连接的工作,以确保在连接被关闭之前,所有的数据段都被发送和接受了。
TCP软件与已建立连接的计算机上的TCP软件进行通信。
TCP数据格式
*
TCP连接
TCP种的一切操作都发生在一个连接的环境中。TCP通过连接发送和接收数据,而这个连接必须根据TCP的规则进行请求、打开和关闭。
TCP的功能之一是为应用程序提供访问网络的接口。这个接口是通过TCP端口提供的,而为了通过端口提供连接,必须打开TCP与应用程序的接口。TCP支持以下两种打开状态。
被动打开:某个应用程序进程通过TCP准备通过TCP端口接收连接,这样就会打开TCP到应用程序的连接,从而为参与连接请求做准备。
主动打开:程序要求TCP发起与另一台计算机的连接,这就是主动打开状态。
在通常情况下,像接受连接的应用程序会把自身及其TCP端口状态置于被动打开状态。在客户端计算机上,FTP客户端的TCP状态很有可能是关闭的,直到用户发起一个从FTP客户端到FTP服务器的连接,此时客户端的状态变为主动打开。切换到主动打开状态的计算机上的TCP软件会开始交换一些用于建立连接的信息,这种信息交换被称为“三次握手”
建立连接
为了让序列/确认系统正常工作,计算机必须对序列号进行同步,换句话说,计算机B必须知道计算机A的初始序列号(ISN),计算机A也必须知道计算机B使用什么ISN开始传输数据。
这个序列号同步的过程称为三次握手
1.计算机A发送一个数据分段,其中:
SYN=1
ACK=0
序列号=X
处于主动打开状态的计算机发送一个数据分段,其中的SYN为1,ACK为0。SYN是同步的缩写,它表示在尝试建立一个连接。第一个数据分段的报头中还包含初始序列号,标记了计算机A待传输数据的第一个字节的序列号。也就是说,要发送给计算机B的第一个字节的序列号是ISN加1。
2.计算机B接受到计算机A的数据分段,并返回一个数据分段,其中:
SYN=1(仍然在同步阶段
ACK=1(“确认号”字段将包含一个值
序列号=Y(Y是计算机B的ISN
确认号=M+1(其中的M是从计算机A接受到最后一个序列号
3.计算机A向计算机B发送一个数据分段,确认收到计算机B的ISN:
SYN=0
ACK=1
序列号=序列中的下一个号码(M+1
确认号=N+1(其中N是从计算机B接受到的最后一个序列号

UDP

UDP比TCP简单得多,虽然UDP有时被认为没有错误检验功能,但实际上它能够执行基本的错误检测。UDP数据报中包含一个校验和,接收端计算机可以利用它来检验数据的完整性。其次,UDP没有像TCP那样提供数据的重新排序功能。UDP协议的主要用途是把数据报传递给应用层。UDP协议的功能简单,其报头架构也很简单。UDP不会重新传输丢失或损坏的数据报、重新排列混乱的接收数据、消除重复的数据报、确认数据报的接受、建立或是终止连接。
UDP头包含4个16位字段,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值