计算机网络一刷5-运输层
-
运输层为相互通信的应用进程提供逻辑通信
为它上面的应用层提供通信服务。
IP协议把分组传送到目的主机,但这个分组还停留在主机的网络层而没有交付主机中的应用进程;
通信的真正端点并不是主机而是主机中的进程;
IMG_20190820_212704.jpg
-
功能
复用(multiplexing):发送方不同的应用进程可使用同一个运输层协议传送数据
分用(demultiplexing):接收方的运输层在剥去报文的首部后能把数据正确交付给应用进程 -
网络层和运输层的区别
网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。 -
差错检测
在网络层,IP数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。 -
两个主要协议
- 用户数据报协议UDP(User Datagram Protocol)
- 传输控制协议TCP(Transmission Control Protocol)
按照OSI术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU(Transport Protocol Data Unit)。但在TCP/IP体系中,TCP--TCP报文段(segment)、UDP--UDP用户数据报
-
应用和应用层协议主要使用的运输层协议
IMG_20190820_213717.jpg -
协议端口号(protocol port number)
简称端口(port);
通信的终点是应用进程,把所传送的报文交到目的主机的目的端口,交付目的进程由TCP或UDP完成;
硬件端口是不同硬件设备进行交互的接口;
软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址;
具有本地意义,标志本计算机应用层中的各个进程在和运输层交互的层间接口; -
运输层的端口号分类
8.1 服务器端使用的端口号
8.1.1 熟知端口号(well-known port number)--系统端口号, 0~1023
8.1.2 登记端口号,1024~49151
8.2 客户端使用的端口号,49152~65535,短暂端口号 -
用户数据报协议UDP--主要特点和概述
无连接、尽最大努力交付、面向报文、没有拥塞控制、首部开销小(8字节)、支持一对一/一对多/多对一/多对多的交互通信
IMG_20190820_222948.jpg
UDP对应用层交下来的报文,不合并不拆分,保留边界,而是照样发送,一次发送一个报文;
对IP层交上来的UDP数据报,去除首部后原封不动交付上层的应用进程; -
UDP首部--首部格式
四个字段组成,每个字段的长度都是两个字节;
源端口、目的端口、长度、检验和;
IMG_20190820_223530.jpg -
传输控制协议TCP--概述
IMG_20190820_224524.jpg
主要特点:
11.1 面向连接的运输层协议
11.2 只能是点对点(一对一)
11.3 可靠交付,传送的数据无差错、不丢失、不重复、且按序到达
11.4 全双工通信
11.5 面向字节流
TCP报文段先要传送到IP层,加上IP首部,再传送到数据链路层。再加上数据链路层的首部和尾部后,才离开主机发送到物理链路。 -
TCP连接
每一条TCP连接有两个端点;
端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口;
套接字(socket) 又称:插口
套接字socket = (IP地址:端口号) -
可靠传输的工作原理
13.1 停止等待协议
13.2 自动重传请求ARQ(Automatic Repeat reQuest)
13.3 信道利用率
13.4 连续ARQ协议
发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方对按序到达的最后一个分组发送确认。 -
TCP报文段的首部格式
IMG_20190822_223732.jpg
最大报文段长度MSS(Maximum Segment Size)
MSS是每一个TCP报文段中的数据字段的最大长度;
窗口扩大选项、时间戳选项、选择确认(SACK)选项;
序号只有32位;
《计算机网络基础》221-225页
-
TCP可靠传输的实现
假定数据传输只在一个方向进行;
-
TCP流量控制
概念:让发送方的发送速率不要太快,要让接收方来得及接收。
-
TCP的拥塞控制
概念:防止过多的数据注入到网络中,使网络中的路由器或链路不致过载;
方法:慢开始、拥塞避免、快重传、快恢复 -
TCP的运输连接管理(重点)
三个阶段:连接建立、数据传送、连接释放;
-
连接建立过程:三报文握手
三次握手
A主动打开连接,B被动打开连接;
-
A创建传输控制模块TCB
同步位SYN=1,初始序号seq=1;
SYN=1的报文段不能携带数据,但要消耗一个序号;
客户端进入SYN-SENT(同步已发送)状态; -
B收到请求报文段,同意建立连接
SYN位和ACK位置1,确认号ack=x+1,初始序号seq=y;
不携带数据,但消耗掉一个序号;
服务器进程进入SYN-RCVD(同步收到)状态; -
收到B的确认,再向B给出确认
ACK置1,确认号ack=y+1,序号seq=x+1;
ACK报文段可携带数据,如果不携带数据则不消耗序号;
TCP连接已建立,客户端进入ESTABLISHED(已建立连接); -
B收到A的确认
服务器进程进入ESTABLISHED(已建立连接)状态; -
连接释放过程:四报文握手
四报文握手 -
A向B发出连接释放报文段
终止控制位FIN置1,序号seq=u;
客户端进入FIN-WAIT-1(终止等待1)状态;
FIN报文段即使不携带数据,页消耗一个序号; -
B收到连接释放报文段后发出确认
确认号ack=u+1,序号=v(已传送数据的最后一个字节的序号加1);
服务器进程进入CLOSE-WAIT(关闭等待)状态;
从A到B的这个方向连接释放,TCP连接处于半关闭(half-close)状态;
B可继续向A发送数据; -
A收到B的确认
客户端进入FIN-WAIT-2(终止等待2)状态;
等待B发出连接释放报文段; -
B发出连接释放报文段
FIN=1,重复发送确认号ack=u+1,序号为w;
应用进程通知TCP释放连接;
B进入LAST-ACK(最后确认)状态,等待A确认; -
A收到B的连接释放报文段后,发出确认
ACK置1,确认号ack=w+1,序号seq=u+1;
客户端进程进入TIME-WAIT(时间等待)状态; -
时间等待计时器(TIME-WAIT timer)
-
最长报文段寿命(Maximum Segment Lifetime)