计算机网络---运输层

引入
为什么需要运输层

网络层最终解决的问题:
分组从一台主机经过网络到达另一台主机,即主机到主机间的通信。
网络层没有解决的问题: .
主机中谁发送的数据、谁接收数据?
IP分组无序到达目的主机,接收进程如何处理?

运输层的作用

”逻辑通信”的意思是”好像是这样通信,但事实上并非真的这样通信”
从IP层来说,通信的两端是两台主机。但”两台主机之间的通信”这种说法还不够清楚。
严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。
也就是说,端到端的通信是应用进程之间的通信。

运输层复用和分用

在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。
根据应用程序的不同需求,运输层需要有两种不同的运输协议:
即面向连接的TCP
无连接的UDP。
表明运输层有一个很重要的功能:
复用(multiplexing)
分用(demultiplexing)。
运输层向高层用户屏蔽了下面网络核心的细节,使应用进程感觉在两个运输层实体之间有一条端到端的逻辑通信信道。

TCP与UDP (逻辑信道的差异性)

运输层的逻辑通信信道的差别:
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。
当运输层采用无连接的UDP协议时,这种逻辑通信信道是一条不可靠信道。
TCP靠谱,UDP不靠谱。

运输层的两个主要协议

用户数据报协议UDP (User Datagram Protocol)
传输控制协议TCP (Transmission Control Protocol)
两个对等运输实体传送的数据单元称为运输协议数
据单元TPDU (Transport Protocol Data Unit):
TCP传送的数据单位是TCP报文段(segment)。(先编号,再发送)
UDP传送的数据单位是UDP报文或用户数据报。(不分段)、

UDP协议

不需要先建立连接,提供无连接服务。(参考微信和电话的区别)
协议数据单元为UDP报文或用户数据报,
收到UDP报文后,无需任何确认。
UDP不提供可靠交付。
简单、支持单播、多播、广播。
适用于多媒体应用。

TCP协议

提供面向连接的服务。
传送的数据单位协议是TCP报文段(segment)。
TCP不提供广播或多播服务。
收到TCP报文段后,需要确认。
协议复杂、开销大,占用较多的处理机资源。
应用较多:万维网、电子邮件、文件传送等。

注意两点

运输层的UDP用户数据披与网际层的IP数据报有很大区别。
IP数据报要经过互连网中许多路由器的存储转发。
UDP用户数据报是在运输层的端到端抽象的逻辑信道中传送的。
TCP报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了TCP连接。

为什么需要”运输层的端口”

运行在计算机中的进程是用进程标识符来标志的。
但应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在互联网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符。
为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对TCP/IP体系的应用进程进行标志。

需要解决的问题

由于进程的创建和撤销都是动态的,发送方几乎无法识别其他机器上的进程。
有时我们会改换接收报文的进程,但并不需要通知所有发送方。
我们往往需要利用目的主机提供的功能来识别终点,而不需要知道实现这个功能的进程。
解决这个问题的方法就是在运输层使用协议端口号(protocol port number)
通信的终点是应用进程,但可以把端口想象是通信的终点,只要把要传送的报文交到目的主机的目的端口,剩下的工作(即最后交付目的进程)由TCP来完成。

端口号

端口用一个16位端口号进行标志。
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
两个计算机中的进程要互相通信,不仅必须知道对方的IP地址(为 了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。

两大类端口

回想一下linux
服务器端使用的端口号
熟知端口,数值一般为0~1023 (全世界都知道的)
登记端口号,数值为1024~49151, 给没有熟知端口号的应用程序使用的。
使用这个范围的端口号必须在IANA登记,以防止重复。
客户端使用的端口号
又称为短暂端口号,数值为49152~65535,留给客户进程暂时使用。
当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态
端口号。通信结束后,这个端口号可供其他客户进程以后使用。

用户数据报协议UDP

UDP只在IP的数据报服务之上增加了很少一点的功能:
复用和分用的功能
差错检测的功能
虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点。

UDP的主要特点

不需要建立连接——减少开销和发送数据之前的时延。
尽最大努力交付——即不保证可靠交付。
面向报文的——一次交付一个完整的报文。
没有拥塞控制——网络出现拥塞不会降低源主机的发送速率。
支持多种交互通信——一对一、一对多、多对一和多对多的交互通信。
首部开销小——8个字节,比TCP的20个字节的首部要短。

UDP协议的使用场景

可以重复请求信息的情况下:例如,DNS, DHCP
一次性传小量数据的应用(面向报文的)
时实应用: IP电话、视频会议等
多媒体应用

什么是“面向报文的UDP"

发送方UDP对应用程序交下来的报文,添加首部后就向下交付IP层
应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文
既不合并,也不拆分,保留这些报文的边界.
接收方UDP去除UDP报文首部,原封不动地交付上层的应用进程,一次交付一个完整的报文
在这里插入图片描述

伪首部

伪首部不是UDP真实首部,仅仅是为了计算检验和。
可以理解为UDP的两次检查:
一次是对IP地址进行检验,确认该IP分组是发送给本机的;
一次是对端口号和数据进行检验,确认交给哪个进程并且数据是无误的。
发送方:
1.增加伪首部,UDP首部检验和填充0;
2.数据部分填充0至4字节整数倍
3.计算机检验和,伪首部+首部+数据
4.首部填.上检验和
5.删除伪首部,发送UDP数据报
接收方:
1.增加伪首部
2.计算机检验和,伪首部+首部+数据
3.检验和全1无差错,否则丢弃或上交应用进程(附上错误警告)
太难了!

TCP
TCP最主要的特点

TCP是面向连接的:
TCP连接只能有两个端点,TCP连接是点对点的(一对一)。
TCP提供可靠交付的服务。
TCP提供全双工通信。
面向字节流:
TCP中的”流”(stream)指的是流入或流出进程的字节序列。
”面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据看成仅仅是一连串无结构的字节流。

几个面向连接的概念

面向连接的电路交换(物理层保证可靠)
通信双方之间必须有一条物理连接的通路(直接相连),且被通信双方独享,数据按序发送并按序接收。
面向连接的虚电路(网络层保证可靠)
通信双方采用复用技术,逐段占用物理通路,每段物理通路可被多对通信使用,分组按序发送并按序接收。
面向连接TCP (运输层协议保证可靠)
采用协议的方法(确认、序号、重传),确保通信双方有一条全双工的、可靠的逻辑信道(事实上,提供服务的IP数据报是不可靠的),字节按序发送并按序接收(但网络层IP数据报并不一定按序到达)

TCP面向流的概念

TCP不保证接收后应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。
接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
TCP不关心应用进程一次把多长的报文发送到TCP缓存。
TCP对连续的字节流进行分段,形成TCP报文段。
TCP根据对方给出的窗口值和网络拥塞程度决定报文段应包含多少个字节
TCP可把长的数据块划分短一些再传送,TCP 也可等待积累有足够多的字节后再构成报文段发送出去。

TCP的连接

TCP把连接作为最基本的抽象。
每一条TCP连接有两个端点。
TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。
TCP连接的端点叫做套接字(socket)或插口。
端口号拼接到(contatenated with) IP地址即构成了套接字
套接字socket =(IP地址:端口号)
TCP连接::= {socket1, socket2}= {IP1: port1),(IP2: port2)}
同一个中地址可以有多个不同的TCP连接;
同一个端口号也可以出现在多个不同的TCP连接中。
物流的连接:={(寄件人通信地址:寄件人),(收件人通信地址:收件人)}

TCP报文段的首部格式

TCP报文段首部的前20个字节是固定的
后面有4n字节是根据需要而增加的选项。
因此TCP首部的最小长度是20字节
TCP虽然是面向字节流的,但TCP传送的数据单元是报文段。
TCP报文段分为首部和数据两部分,TCP 的全部功能体现在首部中各字段的作用。
在这里插入图片描述源端口和目的端口:各占2字,是运输层与应用层的服务接口。
序号字段:4字节,指的是本报文段所发送的数据的第一个字节的序号 。
确认号字段:4字节,是期望收到对方的下一个报文段中数据的第一个字节的序号。
数据偏移(即首部长度) :占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。” 数据偏移"的单位是32位字(以 4字节为计算单位),最大60字节
状态比特位:

紧急URC:当URG= 1时,紧急指针字段有效,此报文段中有紧急数据,应尽快传送。
确认ACK:只有当ACK= 1时确认号字段才有效。当ACK=0时,确认号无效。
推送PSH:收到PSH= 1的报文段,就尽快上交接收应用进程。
复位RST:当RST= 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。
同步SYN:同步SYN= 1表示这是一个连接请求或连接接受报文。
终止FIN :用来释放-一个连接。FIN= 1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

窗口字段:占2字节,用来让对方设置发送窗口的依据,单位为字节。
检验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针字段:占16位,指出在本报文段中紧急数据共有多少个字节,紧急数据放在本报文段数据的最前面。
选项字段:长度可变。TCP最初只有一种选项,即最大报文段长度MSS。MSS告诉对方TCP:“我的缓存所能接收的报反段的数据字段的最大长度是MSS个字节。”

MSS (Maximum Segment Size): 是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。

为什么要规定MSS

提升传输效率
MSS太小,效率太低。
MSS太大,IP层需要分片,只要有一片出错,TCP需要重传。
MSS尽可能大些,只要在IP层不分片即可。
最佳的MSS很难选择。

其他选项

窗口扩大选项占3字节,其中有一个字节表示移位值S。新的窗口值等于TCP首部中的窗口位数增大到(16 + S),相当于把窗口值向左移动S位后获得实际的窗口大小。
时间戳选项:占10字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4 字节)
选择确认选项:告诉发送方收到的连续的字节块。

TCP的建立
TCP连接建立过程中要解决的三个问题

要使每一方能够确知对方的存在。
要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。
能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP连接的建立采用客户服务器方式。
主动发起连接建立的应用进程叫做客户(client),
被动等待连接建立的应用进程叫做服务器(server)。

为什么需要三次握手建立连接

防止服务器空等
可靠性要求之一(确认、 序号、重传) :起始数据字节编号协商。

TCP的释放
四次挥手
A为什么必须等待2MSL的时间后进入CLOSED

保证TCP协议的全双工连接能够可靠关闭
如果Client直接进入CLOSED状态,Server有可能没有收到Client最后向复的ACK)Server超时之后继续发送FIN。但Client已经进入CLOSED状态了,服务器重发的FIN找不到对应的连接,Server就会 收到RST而不是ACK。
这种情况不会造成数据丢失,但导致TCP协议不符合可靠连接的要求。Client不是直接进入CLOSED状态,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确地关闭连接。
保证这次连接的重复数据从网络中消失
如果Client直接进入CLOSED状态之后,又向Server发起一个新连接,有可能新连接和老连接的端口号是相同的。
如果前一次连接的某些数据仍然滞留在网络中,这些数据在建立新连接之后才到达Server, TCP协议就认为数据是属于新连接的,这样就和真正的新连接的数据包发生混淆。
Client在TIME_ WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失(Server与 Client的连接已经释放,这期间Server收到的TCP报文段,直接丢弃)。

保活计时器

用来防止在TCP连 接出现长时期的空闲
保活计时器通常设置为2小时。若服务器过了2小时还没有收到客户的信息,它就发送探测报文段。若发送了10个探测报文段(每一 个相隔75秒)还没有响应,就假定客户出了故障,因而就终止该连接。

TCP四个计时器:超时重传计时器、坚持计时器(0窗口报文探测计时器)、 时间等待计时器(2MSL 关闭连接)、 保活计时器

TCP有限状态机

在这里插入图片描述

TCP流量控制

让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制在TCP连接上实现流量控制。
在这里插入图片描述

TCP协议传输效率问题

可以用不同的机制来控制TCP报文段的发送时机:
第一种机制:TCP 维持一个变量, 它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个 TCP报文段发送出去。
第二种机制:由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作。
第三种机制:发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去。

发送方糊涂窗口综合症

考虑TeInet连接上字符传输问题:
发送方发送一个字符;
接收方确认该字符(未携带数据);
接收方回送该字符;
发送方确认回显字符(未携带数据)
传输2字节数据,共需4个TCP报文, 传输总长度为162字节,效率太低。

Nagle算法

发送方先发送第一个数据字节,后面到达的数据字节缓存起来。
发送方收到对第一个数据字符的确认后,把发送缓存中的所有数据组装成一个报文段发送出去,继续对随后到达的数据进行缓存。
只有在收到对前一个报文段的确认后才继续发送下一个报文段。
当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一-个报文段。

接收方糊涂窗口综合症

接收方的TCP缓冲区已满、接收方会向发送方发送窗口大小为0的报文。
接收方的应用进程以交互方式每次只读取一个字节,接收方发送窗口大小为一个字节的确认报文,发送方发送一个字节的数据,接收窗口又满了,如此循环往复。
解决方法:
接收方等待一段时间,使得接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有-半空闲的空间。
只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。

TCP的拥塞控制
拥塞控制的一般原理

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏这种现象称为拥塞(congestion)。
若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。
链路容量不足
资源分配不均衡
路由器缓存空间
流量分布不均衡
处理机速度太慢

增加资源能解决拥塞吗?

不能。网络拥塞是一个非常复杂的问题。
简单地采用上述做法,不但不能解决拥塞问题,还可能使网络的性能更坏。
网络拥塞往往是由许多因素引起的,例如:增大缓存,但未提高输出链路的容量和处理机的速度,排队等待时间将会大大增加,引起大量超时重传,解决不了网络拥塞,提高处理机处理的速率会将瓶颈转移到其他地方;

拥塞常常趋于恶化

路由器没有足够的缓存空间,它就会丢弃-些新到的分组。
分组被丢弃时,发送这一分组的源 点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。可见拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。
拥塞控制:防止过多的数据注入到网络中,使网络中的路由器或链路不致过载。
拥塞控制的前提:网络能够承受现有的网络负荷。
拥塞控制是一个全局性的过程:涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。

拥塞控制与流量控制的区别

流量控制:是端到端的问题(接收端控制发送端),点对点通信量的控制。
抑制发送端发送数据的速率,以便使接收端来得及接收。
拥塞控制:是一个全局性的过程,涉及到与降低网络传输性能有关的所有因素。
防止过多数据注入到网络,使网络中的路由器或链路不致过载。
某些拥塞控制算法是向发送端发送控制报文,并告诉发送端,网络已出现麻烦,必须放慢发送速率,与流量控制是很相似。

拥塞控制的一般原理

由于拥塞控制是个动态问题,因此拥塞控制很难设计。
分组的丢失是网络发生拥塞的征步而不是原因:
数据链路层:帧出错被丢弃
网络层:出错IP分组被丢弃
拥塞控制本身也可能成为网络性能恶化甚至发生死锁的原因。
开环控制方法:在设计网络时考虑发生拥塞的因素,力求网络不产生拥塞。
闭环控制方法:基于反馈环路的概念:
监测网络系统以便检测到拥塞在何时、何处发生。
将拥塞发生的信息传送到可采取行动的地方。
调整网络系统的运行以解决出现的问题。

监测网络的拥塞的指标

主要指标有:
由于缺少缓存空间而被丢弃的分组的百分数;
平均队列长度;
超时重传的分组数;
平均分组时延;
分组时延的标准差,等等。
上述这些指标的.上升都标志着拥塞的增长。

拥塞通知的传递与时机

发送通知拥塞发生的分组;
在分组中保留表示拥塞状态的字段;
周期性地发出探测分组等。
TCP报文首部中,除了6个常用的标志位,还有2个与拥塞有关的标志位:
E:ECN,显式拥塞提醒回应
W:CWR,拥塞窗口减少
拥塞控制的时机选择:
过于频繁,会使系统产生不稳定的振荡;
过于迟缓,采取行动又不具有任何价值。

TCP的拥塞控制方法

TCP采用基于窗口的方法进行拥塞控制,该方法属于闭环控制方法。
TCP发送方维持一个拥塞窗口CWND (Congestion Window)
拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
发送端利用拥塞窗口根据网络的拥塞情况调整发送的数据量。
真正的发送窗口值= Min(公告窗口值,拥塞窗口值)
网络没有出现拥塞,拥塞窗口增大一些,以便发送更多的分组,提高网络的利用率。
网络出现拥塞或有可能出现拥塞,拥塞窗口减小-些,减少注入到网络中的分组数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值