写在前面的话:”当有人说你是傻瓜时,证明你离成功不远了。”今天是中秋国庆假期的第五天,天气转凉,开始对我冻手冻脚了。冲冲冲!我是梦阳辰,未来我陪你一起成长!
当我们用QQ发消息的时候,我们通过应用层的协议知道了如何将数据转换成报文用来传输,知道了报文各个字段的含义,明确了进程什么时候发送报文。但是如何让接受方电脑知道我发送的消息是给QQ这个进程的而不是给微信或其它应用进程的呢?
通信的端点不是主机而是主机中的进程。也就是说端到端的通信是应用进程之间的通信。所以说依靠网络层定位到主机是不够的。因为真正进行通信的实体是主机中的进程。所以需要运输层解决这个问题。
01.概述
网络核心设备部分中的路由器在转发分组时都只用到了(物理,数据链路,网络)三层。
网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供了逻辑通信。
所以说传输层是主机(协议栈)才有的层次。
运输层的传输单元为:报文段。
传输层的功能:
1)运输层提供进程与进程之间的逻辑通信。
通过逻辑通信,运行不同进程的主机好像直接相连在一起一样;实际上,这些主机也许位于地球的两侧,通过很多路由器及多种不同类型的链路相连 。应用进程使用运输层提供的逻辑通信功能彼此发送报文,而无需考虑承载这些报文的物理基础设施的细节。
2)复用和分用
复用:发送方不同应用进程都可以使用相同的传输层协议传送数据。
分用:接收方的运输层去除首部报文后可以将数据送给正确交付给目的进程。
3)对收到的报文进行差错检测。
应用层和网络层只对首部进行差错检测而不检查数据部分。
UDP/TCP协议
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工(数据链路层会说明)的可靠信道。
当采用无连接的UDP协议时,这种逻辑通信信道是一条不可靠信道。
(TCP/IP体系中)两个对等运输实体在通信时传送的数据单元分别称为:TCP报文段或UDP用户数据报。
TCP要提供可靠的,面向连接的运输服务,因此不可避免地增加了许多开销,如确认,流量控制,计时器以及连接管理等。
02.端口和套接字
为了使运行在不同操作系统的计算机进程能够互相通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标志。
运输层的协议端口号
端口(逻辑端口/软件端口):标识主机中的唯一进程。只用来标识本机的应用层中的各个进程在和运输层交互时的层间接口。即端口号只有本地意义。因特网上的不同计算机的相同端口是没有联系的。
软件端口是应用层的各种协议进程与运输实体层间交互的一种地址。
TCP/IP的运输层用一个16位端口号来标志一个端口。
虽然通信的终点是进程,但只要把所传送的报文交到目的主机的某个合适的目的端口,剩下的工作就由TCP或UDP来完成。
不同的主机的进程端口可以相同。
由此可见两台计算机的进程之间要互相通信,不仅要知道对方的IP地址,而且要知道对方的端口号。
当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才使用过的客户端口号就不复存在,这个端口号就可以供其他客户进程使用。
客户再发起通信请求时,必须先知道对方服务器的IP地址和端口号。
因此运输层的端口号分为以下两类:
03.UDP协议
无连接的用户数据报协议。
用户数据报协议UDP只在IP数据报服务之上增加了很少的功能,即复用分用和差错检测功能。
UDP的主要特点:
1)UDP是无连接的,减少了开销和发送数据之前的时延。
2)UDP使用最大努力交付,即不保证可靠交付。(不需要维持复杂的连接状态)。
3)UDP是面向报文的,适合一次性传输少量数据的网络应用。
即用户层给UDP多长的报文,UDP就照样发送,保留这些报文的边界,即一次发送一个完整的报文。因此应用程序必须选择合适大小的报文。(太小,UDP把他交给IP层后,让IP数据报的首部相对较长,降低IP层的效率,太大,IP分片,降低效率)。
4)UDP无拥塞控制,适合很多实时应用。
5)UDP支持一对一,一对多,多对一和多对多的交互通信。
6)UDP首部开销小,8B,而TCP为20B。
源端口号在无需对方回应的时候,可以没有(全0),但是目的端口号必须有。
UDP长度代表首部和数据之和的长度。
差错检测:
虽然UDP之间的通信要用到端口号,但由于UDP的通信是无连接的,因此不需要使用套接字来建立连接。
04.TCP协议
面向连接的传输控制协议。
TCP协议的特点:
1)TCP是面向连接(虚连接)的运输层协议。
2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
3)TCP提供可靠交付服务,无差错,不丢失,不重复,按序到达。(可靠有序,不丢不重)。
4)TCP提供全双工通信。
发送缓存:准备发送的数据&已发送但尚未收到确认的数据。
接受缓存:按序到达但尚未被应用程序接受和读取的数据&不按序到达的数据。
在发送时,应用程序再把数据传送给TCP缓存后,就可以做自己的事,而TCP在合适的时候把数据发送出去。在接受的时候,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据。
5)TCP面向字节流:TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。
流:流入到进程或从进程流出的字节序列。
TCP报文段首部格式:
保留位:占6位,保留为今后使用,目前应置为0。
选项:长度可变,最大可达40字节。填充字段仅仅是为了使整个TCP首部长度使4字节的整数倍。
TCP连接管理
TCP可靠传输
可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。
TCP实现可靠传输的机制:
1.校验
与UDP校验一样,增加伪首部。
2.序号
3.确认
4.重传
TCP默认额使用累计确认,确认重传不分家,TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。超时重传。
TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)。
TCP流量控制
让发送方慢点,要让接收方来得及接受。
TCP利用滑动窗口机制实现流量控制。
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。
TCP拥塞控制
拥塞控制与其说是一种提供给调用它的应用程序的服务,不如说是一种提供给整个因特网的服务,这是 一种带来通用好处的服务 。不太严格地说, TCP 拥塞控制防止任何一条 TCP 连接用过多流量来淹没通信主机之间的链路和交换设备 。TCP 力求为每个通过一条拥塞网络链路的连接平等地共享网络链路带宽 ,这可以通过调节 TCP 连接的发送端发送进网络的流量速率来做到 ,在另一方面, UDP流量是不可调节的,使用 UDP 传输的应用程序可以根据其需要以其愿意的任何速率发送数据。
拥塞控制四种算法:
1)慢开始
2)拥塞避免
3)快重传
4)快恢复
假定:
1.数据单方向传送,而另一方只传送确认。
2.接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度。
发送窗口=Min{接收窗口rwnd,拥塞窗口cwnd}
接收窗口:接收方根据接收缓存设置的值,并告知给发送方,反应接收方容量。
拥塞控制:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。
慢开始和拥塞避免
快重传和快恢复
趁青春没有理由不去闯,即使会败,我也要败得漂亮!