运输层总结(一)
运输层总结(一)
基本概念
运输层作用:为不同的主机的应用进程之间提供逻辑通信。这也意味着运输层协议只在端系统中实现而不是在路由器中实现。运输层中将应用进程接收到的报文转换成分组,也称分组为报文段。运输层可以提供可靠服务和不可靠服务,但是网络层向运输提供的服务是不可靠的。要在运输层中向上层提供可靠服务则需要运输层协议本身做出许多控制。例如UDP向上层提供的服务是无连接不可靠的服务,而TCP向上提供的服务是面向连接可靠的服务。他们所使用的网络层协议均为IP,但IP是不可靠的服务。UDP和TCP最基本的责任是将IP在两个端系统中的交付服务扩展为端系统中两个进程之间的交付服务。而这种扩展也叫做多路分解与多路复用。
将两个端系统中的交付服务扩展为进程之间的交付服务其实相当于寄快递和取快递的服务。运输的工作交给快递公司,而寄和取交给人。人寄和取相当于进程之间的交付服务,快递公司运输相当于是两个端系统中的交付服务。一个进程可以有一个以上的套接字,也相当于人可以有一个以上的手机号。主机之间交付后运输层通过套接字将报文段交付给相应进程,相当于取快递时通过手机号来找到对应的人。进程通过套接字传输报文给运输层,运输层封装成报文段传递给网络层,这也相当于人通过他的手机号标识后将快递交给快递公司。
而多路分解和多路复用也就相当于取快递和寄快递。之所以叫做多路分解和多路复用也类似于人有很多,手机号也有很多,而传输的道路逻辑上就是快递公司这一条道路。将多个快递传递到一条道路上叫做复用,而将一条道路上的快递取出给多人也就叫做分解。这个比喻应该非常好理解。
端口号
端口号是一个16比特的数字,大小在0-65535之间。0-1023范围的称为周知端口号,是受限制的,是保留给一些周知应用层协议使用的。要开发一个网络应用程序必须为其分配一个端口号。网络进程通过不同端口号来识别。
UDP
udp提供了最简单的传输协议,即进程之间的交付服务和差错检查。当然udp只是提供差错检查但是对于差错恢复无能为力。
差错检查
差错检查的方式也很简单。例如传输3个比特,在发送端将三个比特进行加和得到检验和再求反,在接收端将三个比特加和再加上检验和,如果数据未受损则结果必为1111 1111。只要其中有一个0则可以断定数据受损。
数据交付
要知道数据如何交付首先要知道udp报文段的定义结构:

如上述,udp必须定义源端口号和目的端口,就像快递上要标识寄件人和取件人的手机号。再有就是差错检查的检验和。以及报文的长度,这里长度有别的用途,如果要省略而直接计算也不是不可以。注意这里没有标明源ip地址和目的ip地址。因为udp是无连接的。在每次传输过程中都封装新的ip地址就可以了。
TCP
概念
TCP也叫做传输控制协议(Transmission Control Protocol)。顾名思义它可以控制传输过程,而不仅仅是交付数据。TCP是面向连接的可靠协议,使用tcp传输报文段前必须经过三次握手才能够建立连接。这种连接是一条逻辑连接,只建立在两个端系统上而不建立在中间的路由器上,中间的路由器只能够看得到数据报而不是报文段。它提供的也是全双工服务,也就是同时两个进程能够互相发送数据。建立起连接后就可以互相发送数据了。客户进程通过套接字将数据引导到发送缓存,之后tcp就会从发送缓存取出数据传递到网络层,再由ip协议发送到接收缓存。示意图如下:

tcp可以从缓存中取出并存放入报文段的最大长度MSS取决于数据链路层最大链路层帧长度,即下层最多一次能够封装多少数据决定了上层能够封装多少数据。tcp为每一块数据封装一个tcp头部,形成多个tcp报文段。报文段首部可以如下图所示:

因为在发送报文段之前已经建立了连接,所以这里也不需要源ip和目的ip,只需要端口号就可以了。tcp将数据看成是一个无结构,顺序的字节流。报文段首部的序号就是对字节流的编号,如图所示:

而确认号则是主机A期望主机B发送过来的下一个字节的序号。tcp只确认到第一个丢失的字节流为止,那么如果收到了失序报文段怎么办?tcp将这个问题留给了编程人员,可以选择丢弃也可以选择接收,之后再等待缺少的报文段补充。对于实践来说常采用第二种方法。tcp首部还有其他几个字段值得解释:
-
首部长度
指示了tcp的首部长度,典型的tcp首部长度是20字节
-
选项字段
用于发送方和接收方协商最大报文段长度MSS,或者在高速网络环境下做窗口调节因子
-
标志字段
ACK用于确认字段中的值是有效的,RST、SYN、FIN用于建立连接和拆除连接。PSH比特置位时表示接收方应该立即将数据交给上层,URG用来指示报文段里存在着被发送端的上层实体置为紧急的数据。紧急数据的最后一个字节在紧急数据指针字段指出。

浙公网安备 33010602011771号