Claws Garden

互联网——传输层

概览

Transport Layer

使用数据段。基于端口。

第四层可以校验数据的可靠性,如果一方发给另一方的数据出错,接收方会在第四层要求对方重传数据。

第四层还可以做流控制,使得数据传输的速度适合慢的主机。

协议

第四层的两个代表性的协议是TCP和UDP协议。

TCP即Transmission Control Protocol,而UDP是User Datagram Protocol。两者有着共同点就是都是把上层来的数据进行分段后一段一段传输。两者区别是:

端口

但无论哪个第四层协议,都是使用端口建立进程之间的连接的。

网络操作系统对多个要求上网的进程所使用的是分时复用的方案,会分出许多不同的端口供服务进程使用。

端口作为一个数据占2个字节,取值从0到65535。这就意味着同一主机可以有很多不同的进程同时上网。

端口大致可以分为以下几类:

所有要上网的应用进程都需要有端口号。

第四层的通讯单位称为Socket,结构是(IP_address, port),也就是既有IP又有端口号。而一个连接也可以用源Socket和目的Socket来描述。

TCP协议中不支持多播和广播。

TCP协议

特点:可靠传输,流控制,连接管理。

TCP数据段结构

TCP数据段由前面的首部和后面的数据部分组成。

首部结构:

如图,前二十字节是固定首部,后面还有可变长度的一段内容。

所以一个数据段由一个至少20字节长的首部和数据部分构成。

建立连接

两台主机采用TCP协议建立连接要三次握手实现。

具体过程如图:

一般是服务器一直处于一个监听的状态,然后由客户端主动发出连接请求。图中的seq表示数据段首部的序号字段,而ack表示数据段首部的确认号字段。详细过程即:客户端先发送连接同步请求,如果服务器不同意就会将RST状态位置为1发回,表示拒绝;如果同意就发回应答。然后客户端受到应答之后再对应答做确认,发回。

值得注意的是,之后的数据传输一般还是客户端开始发信,而且seq和ack和第三次握手是一样的。所以现在有时候会在第三次握手的时候顺便携带一些数据,避免一次无用的发信。但是考试认为,这三次握手都是不携带数据部分的。

TCP传输控制

TCP为了可靠的传输,传输的内容总是需要接收方做确认。

发送方发送数据后,会为这次发送启动一个重传计时器,如果计时器到时了还没有收到接收方的回复就会重新发送一遍数据。

为了传输的效率,通常会采用流水线式的发送方法。如图:

值得注意的是,虽然图中是这么画的,但是事实上并不是发送方要对每一个接收的数据段做确认,也可以一个回复就能确认之前好几个接受的数据段的内容,这就由ack确认号字段实现了。

这里看到,接收方的窗口信息可以告知发送方最多还能再发送多少字节的内容。发送方依据窗口信息来组织发送,避免出现发送信息过快对方无法及时处理的情况。下图更清晰地说明了窗口的作用:

下面是一个综合的例子。

断开连接

断开连接需要四次握手。如图:

详细过程:一般是客户端主动发送断开连接的请求,表示“我”已经不会再主动发送信息了。服务器收到后做确认。但是到此位置可能服务器还有要发送的内容没有完成,因此客户端不会立刻离开,而是等待服务器发送完数据(这些数据依然被客户端正常处理)后也发送结束请求。在收到服务器发来的结束请求后客户端发回确认。但是客户端依旧不会离开,因为这条确认信息可能存在丢失的风险,一旦丢失,服务器就会在一段时间等待后重传刚才的结束申请。因此客户端通常会再等待一段时间。

TCP计时器

在上面的过程中,TCP协议用到了四种计时器:

TCP有限状态机

仅供参考,无需深入探究:

UDP协议

即用户数据报协议。特点是无连接,不可靠,不做差错处理,没有逻辑控制,但是达到了以更快的速度和更小的开销在网络中传输数据的目的。现在在流媒体传输和RIP、DNS、SNMP、TFTP、DHCP技术中使用。如果要广播或者组播,也只能使用UDP。

UDP数据段结构:

0~1516~3132~4748~6364~
Source PortDes PortLengthCheck SumData…

可见,首部是固定的八个字节长。这里的校验和同时校验首部和数据部分。

UDP的逻辑十分简单,对上层传来的数据报文会直接转发,不做拆分处理。因此可能需要使用UDP协议的上层应用实现做好划分,避免一个数据段太长。

NAT/PAT技术

这两种技术都是转换内网地址和公网地址的技术。由于IP资源的短缺,许多局域网内部可能使用私有IP。但是如果要和外面的主机交流的话,私有IP是不能上Internet的,需要一个全局IP来代言。这两种技术可以将内网的私有IP地址映射为一个全局IP地址。

NAT/PAT技术分为三类:

还有一点值得说的就是技术中的地址类型:

#互联网计算课程