概述
它属于面向通信部分的最高层,同时是用户功能最底层。网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的通信。
两个主要协议
UDT在传输数据之前不需要先建立连接,也就是说原地主机收到UDP报文后,不需要给出任何确认。TCP提供面向连接的服务,他不提供广播和多播服务。下表给出了一些常用应用层协议与运输层协议(最好经典的要背下来)。
端口
我们要知道硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层各种协议进程与运输实体进行层间交互的一种地址。本节主要讲述后者。端口号只有本地意义,也就是说不同计算机中,相同的端口号没有关联。两个计算机之间通信不仅要知道计算机的IP地址,还要知道那个进程的端口号。因此运输层的端口号分为下面两大类:
- 服务器端使用的端口号。 这里又分为两类;一类是熟知的端口号 1-1023,另一类是登记端口号 1024-49151.下图最好掌握。
- 客户端使用的端口号 49152-65535.仅在客户进程运行动态选择,也叫做短暂端口号。
UDP概述
UDP主要特点:
- UDP是无连接的
- UDP是尽最大努力交付的
- UDP是面向报文的,UDP一次性交付一个完整的报文,因此UDP的长度要谨慎选择不要过大或者过小。
- UDP没有拥塞控制
- UDP支持一对一,一对多,多对一,多对多的交互通信
- UDP首部开销小,首部长度8字节
首部格式
首部字段很简单,只有8个字节,四个字段组成。源端口、目的端口、长度、检验和。请注意虽然UDP通信要用到端口号。
计算检验和时要添加一个伪首部它既不向下传递也不向上交付,格式关系如下:
UDP检验和特殊之处在于他把首部和数据部分一起计算,如果数据部分不是偶数个字节就要在后面添零计算。它的计算过程和网络层检验和一样,二进制反码运算求和,得出的结果求反,无差错时应全为1。注意:上方的17代表这是UDP数据报,若为TCP应为6.
TCP概述
TCP主要特点:
- TCP是面向连接的运输层协议
- TCP提供可靠交付的服务。无差错、不丢失、不重复、按需到达
- TCP提供全双工通信
- 每一条TCP只能有两个端点,是一对一的
- 面向字节流的
TCP连接是通过套接字来连接:
可靠传输
TCP使用了检验、序号、确认和重传等机制来达到这一目的。
- 序号 TCP把数据视为一个无结构但有序的字节流,给每一个字节都设立一个编号
- 确认 指希望收到的下一个报文的序号
- 重传 两件事情导致重传:超时和冗余ACK。其中超时计时器的时间应该略大于加权平均往返时间。TCP规定当发送方收到对同一个报文的3个冗余ACK时就可以认为跟在这个被确认报文段后面的报文段已经丢失,进行快速重传。
流量控制
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
发送方的发送窗口不能超过接收方给出的接收窗口。TCP为每一个连接设有一个持续计时器,只要收到对方的零窗口通知就开启,若计时器到期,就发送一个探测报文段。
拥塞控制
拥塞控制也叫基于窗口的拥塞控制。发送方让自己的发送窗口等于拥塞窗口,发生超时或者三个重复的ACK就知道网络出现了拥塞。使用满开始算法后每经过一个传输轮次(往返时间),拥塞窗口就加倍。慢开始的初值为MSS;
上图应该牢记,所有题目的变形都基于上图。
还要牢记的是发送窗口=min{接收窗口,拥塞窗口}
TCP的连接方式
三报文握手
上图中的细节要牢记,包括状态和序号值。
四次挥手
该图的细节与流程同样需要重点掌握。除了时间等待计时器外,还设置一个保活计时器,如果客户端突然出现故障,使用保活计时器,如果没有收到客户数据就发送一个探测报文,每隔75s一次一连发送10个没有反应就关闭连接。
还有一点要强调的是FIN不携带数据也要消耗一个序号;SYN不携带数据也要消耗一个序号;ACK携带数据时消耗,不携带数据不消耗序号。