计算机网络原理笔记 第四章 传输层
5.1传输层的两个协议
5.1.1 TCP和UDP的应用场景
-
网络中的计算机通信无外乎有以下两种情况:
1.要发送的内容多,需要将发送的内容分成多个数据包发送。
2.要发送的内容少,一个数据包就能发送全部内容。 -
针对这两种情况,在传输层有两个协议,TCP(Transmission
Control Protocol 即传输控制协议)和UDP(User Datagram
Protocol即用户数据报协议)。
5.1.2 传输层协议和应用层协议之间的关系
-
应用层协议很多,传输层就两个协议,如何使用传输层两个协议
标识应用层协议呢? -
传输层协议加一个端口号来标识一个应用层协议,展示了传输层
协议和应用层协议之间的关系。
- 一些常见的应用层协议和传输层协议,以及它们之间的关系。 -
HTTP默认使用TCP的80端口标识。
-
FTP默认使用TCP的21端口标识。
-
SMTP默认使用TCP的 25端口标识。
-
POP3默认使用TCP的110端口。
-
HTTPS默认使用TCP的443端口。
-
DNS使用UDP的53端口。
-
远程桌面协议(RDP)默认使用TCP的3389端口。
-
Telnet使用TCP的23端口。
-
Windows访问共享资源使用TCP的445端口。
-
微软SQL数据库默认使用TCP的1433端口。
-
mySQL数据库默认使用TCP的3306端口。
5.1.3 服务和端口之间的关系
-
Windows和Linux操作系统有些服务为本地计算机提供服务,有些服务为网络中的计算机提供服务。
-
为网络中计算机提供服务的服务,一旦启动就会使用TCP或UDP的某个端口侦听客户端的请求。
5.2 用户数据报协议 UDP
5.2.1 UDP 协议的特点
- (1)UDP是无连接的,即发送数据之前不需要建立连接(当然发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
- (2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有许多参数),通信的两端不用保持连接,因此节省系统资源。
- (3)UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给网络层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
- (4)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发
送速率降低。这对某些实时应用是很重要的。 - (5)UDP支持一对一、一对多、多对一和多对多的交互通信。
- (6)UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
5.2.2 UDP 的首部格式
- UDP的首部包括四个字段,源端口、目标端口、长度和校验和,每个字段的长度是两个字节。
- 伪首部包括:源地址、目的地址、UDP数据长度、协议类型(0x11),协议类型就一个字节,但需要补一个字节的0x0,构成12个字节。
计算UDP检验和的例子
5.3传输控制协议 TCP
5.3.1 TCP 协议主要的特点
- (1)TCP是面向连接的传输层协议。这就是说,应用程序在使用TCP协议之前,必须 先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。这就是说,应用 进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放 连接。
- (2)每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的 (一对一)。
- (3)TCP提供可靠交付的服务。也就是说,通过TCP连接传送的数据,无差错、不丢 失、不重复、且按序发送。
- (4)TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。 TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时, 应用程序把数据传送给TCP的缓存后,就可以做自己的事,而TCP在合适的时候把数据 发送出去。在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取 缓存中的数据。
- (5)面向字节流。TCP中的“流”(steam)指的是流入到进程或从进程流出的字节序列。
5.3.2 TCP 报文的首部格式
TCP协议是能够实现数据分段传输、可靠传输、流量控制、网络拥
塞避免等功能,因此TCP报文的首部要比UDP报文首部字段要多,
并且首部长度不固定。
-
(1)源端口和目的端口各占2个字节,分别写入源端口号和目的
端口号。和前面图所示的UDP的分用相似,TCP的分用功能也是通
过端口实现的。 -
(2)序号占4字节。序号范围是[0,232-1],共232(即4 294 967 296)个序号。序号增加到232-1后,下一个序号就又回到0。TCP
是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节
都按顺序编号 -
(3)确认号 占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。
- TCP协议能够实现可靠传输,接收方收到几个数据包后,就会给发送方一个确认数据包,告诉发送方下一个数据包该发第多少个字节了。
- 若确认号是N,则表明:到序号N-1为止的所有数据都已正确收到。
-
(4)数据偏移 占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是必要的。但请注意,“数据偏移”的单位为4字节,由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度,这也就意味着选项长度不能超过40字节。
-
(6)保留 占6位,保留为今后使用,但目前应置为0。
-
(7)紧急URG(URGent) 当URG=l时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送。
-
(8)确认ACK(ACKnowlegment) 仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。‘
-
(9)推送PSH(PuSH) 当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。
-
(10)复位RST(ReSeT) 当RST=l时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
-
(11)同步SYN(SYNchronization) 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。
-
(12)终止FIN(FINish意思是“完”、“终”) 用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据己发送完毕,并要求释放传输连接。
-
(13)窗口 占2字节。窗口值是[0,216-1]之间的整数。TCP协议有流量
控制功能,窗口值告诉对方:从本报文段首部中的确认号算起,接收方
目前允许对方发送的数据量(单位是字节)。 -
(14)检验和 占2字节。检验和字段检验的范围包括首部和数据这两部分。和UDP用户数据报一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
-
(15)紧急指针 占2字节。紧急指针仅在URG=1时才有意义,它指出本
报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此
紧急指针指出了紧急数据的末尾在报文段中的位置。 -
(16)选项 长度可变,最长可达40个字节。当没有使用选项时,TCP的
首部长度是20字节。TCP最初只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size)。
5.4 可靠传输
5.4.1 TCP可靠传输的实现-停止等待协议
5.4.2 连续 ARQ 协议和互动窗口协议-改进的停止等待协议
5.4.3以字节为单位的滑动窗口技术详解
滑动窗口是面向字节流的,为了方便大家记住每个分组的序号,下面的讲解每一个分组就假设100个字节,为了方便画图表示,将分组进行编号简化表示,如图所示,不过你要记住,每一个分组的序号是多少。
5.4.4改进的确认-选择确认(SACK)
-
TCP通信时,如果发送序列中间某个数据包丢失,TCP会通过重传最后确认的分组后续的分组,这样原先已经正确传输的分组也可能重复发送,降低了TCP性能。为改善这种情况,发展出SACK(Selective Acknowledgment,选择确认)技术,使TCP只重新发送丢失的包,不用发送后续所有的分组,而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据已经提前收到等。
-
选择性确认最多表示4个边界
5.4.5超时重传的时间调整
-
TCP的发送方在规定的时间内没有收到确认就要重传己发送的报文段。这种重 传的概念是很简单的,但重传时间的选择却是TCP最复杂的问题之一。
-
传输层的超时计时器的超时重传时间究竟应设置为多大呢?TCP往返传输时间 (RTT) 的测量可以采用两种方法:
-
TCP Timestamp选项
- TCP时间戳选项可以用来精确的测量RTT。发送方在发送报文段时把当前时钟的时间值放 入时间戳字段,接收方在确认该报文段时把时间戳字段值复制到时间戳回送回答字段。 因此,发送方在收到确认报文后,可以准确地计算出RTT来。RTT=当前时间-数据包中 Timestamp选项的回显时间。
-
重传队列中数据包的TCP控制块
- 在TCP发送窗口中保存着发送而未被确认的数据包,数据包skb中的TCP控制块包含着一 个变量, tcp_skb_cbwhen,记录了该数据包的第一次发送时间,当收到该数据包确认, 就可以计算RTT,RTT=当前时间-when。这就意味着发送端收到一个确认,就能计算新 的RTT
-
RTT调整
. -
超市计时器设置的超时重传时间RTO
5.5 流量控制
5.6 拥塞控制
5.6.1拥塞控制的原理
5.6.2拥塞控制方法-慢开始和拥塞避免
5.6.3拥塞控制方法-快重传和快恢复
5.6.4发送窗口的上限
5.7 TCP连接管理
5.7.1 TCP的连接建立
- 请求建立TCP连接的数据包
- TCP连接建立的数据包
- 确认的确认
- TCP连接建立的过程
5.7.2 TCP连接释放
- 查看TCP连接释放的数据包