计算机网络(第五章)
第五章
5.1运输层概述
如何为运行在不同主机上的应用进程提供直接的通信服务时运输层的任务,运输层直接为应用进程间的逻辑通信提供服务。
5.2运输层端口号、复用与分用的概念
运行在计算机的进程使用进程标识符PID标记,不同操作系统不同格式进程标识符,为了不同操作系统进程之间通信必须使用统一方法对 TCP/IP体系的应用进程标识。
TCP/IP体系运输层使用端口号来区分不同进程-端口号使用16比特表示,取值范围0~65535;端口号只有本地意义,即只是为了表示本计算机应用层的各进程,不同计算机的相通端口号没有联系。
发送方复用和接收方分用—UDP和TCP都得封装为IP
常用协议熟知端口号
5.3UDP和TCP对比
UDP—用户数据报协议,无需连接,支持单薄,多播及广播;面向应用报文的;提供无连接不可靠传输服务(适用于实时应用);首部仅有八字节
TCP—传输控制协议,面向连接,只支持单播;面向字节流的;提供面向连接的可靠服务(适用于要求可靠的服务);首部最小20字节最大60字节。
5.4 TCP流量控制
流量控制-让发送方的发送频率不要太块,要让接收方来得及接收
利用滑动窗口来实现流量控制—TCP利用自己接收窗口大小来限制发送方发送窗口大;发送方接收到零窗口通知后启动持续计时器,计时器超时向接收方发送零窗口探测报文。
5.5 TCP的拥塞控制
拥塞—在某段时间对网络某i资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏。出现拥塞而不控制会导致整个网络吞吐量随输入负荷的增大而下降。使用满开始、拥塞避免、快重传和快恢复四种算法解决。
发送方维护一个拥塞窗口cwnd的状态变量,值为网络拥塞程度,动态变化。维护原则:只要没出现拥塞,拥塞窗口就大一点,出现拥塞,窗口就减少一点;判断拥塞出现依据:发生超时重传;发送方将拥塞窗口作为发送窗口swnd。
当维护一个慢开始门限ssthresh状态变量:
- 当cwnd小于ssthresh,使用慢开始算法;大于时停止慢开始采用拥塞避免算法;等于时可以任意使用二者之一。
慢开始算法-每个传输轮次结束后拥塞窗口逐渐加大,不断×2
拥塞避免算法-每次拥塞窗口线性加一,每当重传计时器超时时,ssthresh更新为cwnd值的一半,cwnd值减少为1并重新开始慢开始算法。
为了避免个别报文段丢失而导致误判拥塞造成降低传输效率,快重传算法可以让发送方尽早知道个别报文段丢失。快重传—发送方尽快重传而不是等超时计时器超是再重传:要求接收方立即发送确认,即使收到失序报文段也要发出对已收到的报文段的重复确认,发送方一旦收到三个连续重复确认则将相应报文段立即重传。
发送方一旦收到三个确认重复,便不启动慢开始算法而是执行快恢复算法—发送方将慢开始门限值和cwnd值调整为当前窗口的一半,开始执行拥塞避免算法。
5.6 TCP超时重传时间选择
超时重传时间RTO理论上应略大于往返时间RTT,但是有很多情况要考虑所以不能一概而论。
RFC6298建议使用下式计算RTO:
出现超时重传时,新RTO值为2倍旧RTO值
5.7 TCP可靠传输实现
TCP基于以字节为单位的滑动窗口来实现可靠传输。
发送方的发送窗口并不总是和接收方的接收窗口一样大,对于不按序到达的数据TCP会先临时存放再接收窗口中,在按序交付上层应用进程。
TCP要求接收方必须有累计确认和捎带确认机制,接收方不应过分推迟发送确认
TCP通信是全双工通信。
5.8TCP的余数连接管理
TCP运输连接三阶段—1.建立TCP连接 2.数据传输 3.释放TCP连接
TCP三次握手建立连接—客户端发送TCP连接请求(SYN=1,seq=x);服务器收到后发送针对TCP连接请求的确认(SYN =1 ACK =1 seq =y ack =x+1);客户端收到后发送针对TCP连接请求的确认的确认 ACK =1 seq =x+1 ack =y+1),完成连接的建立开始传输数据。为了防止已失效的连接请求报文段突然又传送到了TCP服务器而导致错误,因此三次握手是必须的。
TCP四次握手释放连接—客户端发送TCP连接释放(FIN =1 ACK =1 seq= u ack =v) 服务器收到后发送TCP普通确认(ACK =1 seq =v ack =u+1) 然后通知应用进程,被动关闭后服务器发送TCP连接释放(FIN =1 ACK =1 seq =w ack =u+1) 客户端收到后发送TCP普通确认(ACK=1 seq =u+1 ack=w+1) 并在等待2MSL后关闭,服务器收到后关闭。 MSL—最长报文段寿命,RFC793建议为2分钟
TCP服务器进程每收到一次TCP客户进程的数据就重新设置并启动保活计时器(2小时定时)。若保活定时器周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程向TCP客户进程发送一个探测报文段,后每75秒发送一次,若发送10个后仍无响应则服务器认为客户进程主机出现故障便关闭连接。
5.9TCP报文段首部格式
TCP报文段由首部和数据载荷构成
具体格式查看大佬的文章