运输层
运输层
概念
- 运输层属于面向连接部分的最高层,同时也是用户功能的最低层
- 两台主机进行通信就是两台主机中应用进程互相通信, 通信的真正端点不是主机而是主机中的进程
- “端到端”通信中的端指的是端口号
- 网络层为主机之间提供逻辑通信,运输层为应用进程之间提供端到端的逻辑通信
-
硬件端口:不同硬件设备进行交互的接口
-
软件端口:应用层的各种协议进程与运输实体进行层间交互的一种地址
-
TCP/P的运输层用一个16位(即65535个不同端口号)端口号来标志一个端口(端口只具有本地意义):
-
服务器使用的端口号:
-
熟知端口号:(0~1023) 这些端口号被IANA指派给TCP/IP最重要的一些应用程序:例:
应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP HTTPS 熟知端口号 21 23 25 53 69 80 161 443
-
登记端口号:(1024~49151)为没有熟知端口号的应用程序使用的,使用这类端口号必须按照IANA规定手续登记,防止重复
-
-
客户端使用的端口号:留给客户进程选择暂时使用,通信结束后,刚才使用过的客户端口号就不复存在,这个端口号可以供其他客户进程使用
-
-
运输层的两大协议:TCP UDP
-
应用 应用层协议 运输层协议 名字转换 DNS(域名系统) UDP 文件传送 TFTP(简单文件传送协议) UDP 路由选择协议 RIP(路由信息协议) UDP IP地址配置 DHCP(动态主机配置协议) UDP 网络管理 SNMP(简单网络管理协议) UDP 远程文件服务器 NFS(网络文件系统) UDP IP电话 专用协议 UDP 流式多媒体通信 专用协议 UDP 多播 IGMP(网际组管理协议) UDP 电子邮件 SMPT(简单邮件传送协议) TCP 远程终端接入 TELNET(远程终端协议) TCP 万维网 HTTP(超文本传输协议) TCP 文件传送 FTP(文件传送协议) TCP -
TCP的滑动窗口机制只解决了端到端的流量控制
-
Intern中计算机通信的基础单元:套接字
功能
提供进程与进程之间的通信
-
面向连接服务:使用TCP(Transmission Control Protocol)传输控制协议(全双工):
- TPDU运输协议数据单元(Transport Protocol Data Unit):TCP报文段
- 不提供广播或多播服务
- 应用程序在使用TCP协议之前,必须先建立TCP连接(虚连接/逻辑连接)
- 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的
- 提供可靠交付的服务:无差错,不丢失,不重复,且按序到达
- TCP连接两端都设有发送缓存和接收缓存
- 面向字节流: TCP不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少字节;而UDP发送的报文长度时应用进程给出的
- **TCP连接的端点叫做套接字(socket)或插口 ** 套接字 socket = (IP地址:端口号)
-
首部最小长度是20B 最大长度是60B
- 若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到
- 确认ACK(ACKnowledge):TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
- 推送PSH(PuSH):接收方TCP收到PSH=1的报文段,就尽快交付接收应用进程
- 复位RST(ReSet):当ReSet=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立运输链接 ,还可以用来拒绝一个非法的报文段或拒绝打开一个连接
- 同步SYN(SYNchronization):SYN=1表示这是一个连接请求或连接接收报文
- 窗口:指的是发送本报文段的一方的接收窗口
- 选项:最初只有MSS即最大报文长度(Maximum Segment Size),MSS是每一个TCP报文段中的数据字段的最大长度 (MSS的默认值是536B)
-
TCP 的运输连接管理:
三报文握手:
-
连接建立(采用C/S)
-
数据传送
-
连接释放
-
TCP规定:SYN报文段不能携带数据,但要消耗一个序号 ;ACK报文段可以携带数据,但如果不携带数据则不消耗序列号
四报文握手:
数据传输结束后,通信双方都可以释放连接
TCP规定:FIN报文段即使不携带数据,也消耗一个序号
A收到B的FIN报文段必须经过时间等待计时器(TIME-WAIT timer)设置的2MSL最长报文段寿命(Maximum Segment Lifetime)后,A才进入到CLOSED状态
-
为了保证A在发送的最后一个ACK报文段能够到达B
-
使本连接持续的时间内产生的所有报文段从网络中消失
-
无连接(不需要使用套接字建立连接)服务:使用UDP(User Datagram Protocol)用户数据报协议:
-
TPDU运输协议数据单元(Transport Protocol Data Unit):UDP用户数据报
-
只在IP数据报服务之上增加了复用、分用及差错检测功能
-
面向报文 :一次交付一个完整报文
-
尽最大努力交付
-
没有拥塞控制
-
支持一对一,一对多,多对一,多对多的交互通信
-
-
首部开销小,仅有8B:
-
源端口(2B)需要对方回信时选用,不需要时可用全0 目的端口(2B)终点交付报文时必须使用 长度(2B)最小值是8 检验和(2B)无错时结果应全为1,有错就丢弃
-
-
在计算校验和时,要在UDP用户数据报之前增加12B伪首部(仅仅为了计算校验和)
-
伪首部:
4B 4B 1B 1B 2B 源IP地址 目的IP地址 0 17 UDP长度
-
如果接收方UDP报文发现收到的报文中的目的端口号不正确,就丢弃该报文,并由ICMP发送“端口不可达”差错报文给发送方
复用和分用
-
复用(multiplexing):发送方不同的应用进程都可以使用同一个运输层协议传送数据
-
分用(demultiplexing):接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程
TCP实现可靠传输
-
校验
-
确认
-
序号
-
重传:收到三个冗余ACK(快速重传)
自适应:新的RTTs=7/8旧的RTTs+1/8新的RTT样本
RTO=RTTs+4RTTD
新的RTTD=3/4RTTD+1/4|RTTs-RTT样本|
KARN算法:只要报文段重传了,就不采用其往返时间样本,但是这样超时重传时间无法更新
修正的KARN算法:每重传一次,RTO增大一些:新的RTO=旧的RTO*2
TCP默认使用累积确认
TCP采用自适应算法动态改变重传时间RTTs:
-
若收到的确认是对重传报文段的确认,但被源主机当成对原来报文的确认,则算出来的RTTs和超时重传时间RTO就会偏大
-
若收到的确认是对原来报文段的确认,但被源主机当成对重传报文的确认,则算出来的RTTs和超时重传时间RTO就会偏小
差错检测
TCP的拥塞控制(全局)
网络拥塞条件:∑对资源的需求>可用资源
判断网络拥塞的条件:出现了超时
- 开环控制(静)
- 闭环控制(动)
接收方窗口又称为通知窗口(advertised window),发送方的窗口一定不能超过接收方的窗口值
发送窗口上限值=Min[rwnd,cwnd]
TCP连接初始化时,把拥塞窗口cwnd置为1
-
慢开始和拥塞避免:(AIMD算法:加法增大,乘法减小)
-
慢开始:发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值+1,因此拥塞窗口随着传输轮次按指数规律增长
-
-
拥塞避免:并非完全能够避免拥塞,拥塞避免是说把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞
-
快重传和快恢复:
-
快重传:要求接收方收到数据时立即发送确认,发送方只要一连收到三个重复确认,立即进入重传(t3)
-
-
快恢复:发送方调整门限值ssthresh=cwnd/2,同时设置cwnd=ssthresh,并开始执行拥塞避免
有的快恢复开始时的拥塞窗口值再增大一些,即cwnd=ssthresh+3MSS (三个冗余ACK停留在接收方的缓存中)
-
主动队列管理AQM(Active Queue Management)
路由器队列通常采用FIFO(First In First Out)
全局同步(global synchronization):路由器队列已满,以后再到达的所有分组都被丢弃(尾部丢弃策略),导致一连串分组丢失,可能会同时影响很多条TCP连接,使许多TCP连接在同一时间突然进入到慢开始状态
应当在队列长度达到某个值得警惕的数值时(即当网络拥塞有了某些拥塞征兆时),就主动丢弃到达的分组
TCP的流量控制(可变窗口)(端到端)——滑动窗口机制
流量控制(flow control):让发送方的发送速率不要太快,要让接收方来得及接收
流量控制往往是点对点通信量的控制,是个端到端的问题
TCP的窗口单位是字节,不是报文段
打破死锁局面:
只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带一字节的数据),而对方就在确认这个探测报文段给出了现在的窗口值;若窗口仍是零,重新设置持续计时器,如果不是零,那么死锁被打破