一、传输层的服务基本原理
1.多路复用和解复用(分路)技术
复用是指:发送方的不同的应用进程都可以使用同一个传输层协议传送数据;
分路技术是指:接收方的传输层剥去报文首部之后能把这些数据正确的传输到正确的应用进程上。
2.可靠数据传输
3.流量控制和拥塞控制
二、传输层提供的服务
2.1传输层寻址和端口
传输层主要是提供不同主机上的进程之间的逻辑通信(端到端的通信),即使在不可靠的网络层(主机之间的逻辑通信)传输下,传输层也能提供可靠的传输。(所谓的逻辑通信就是指:传输层之间看似是在水平方向传送数据,但是事实上这两个传输层之间并没有水平方向上的物理连接)
传输层的寻址最重要的就是进程的端口号了。那么什么是端口和端口号呢?
端口简言之就是为其临近层的应用层的各个应用进程的数据通过这个“门”向下传递给传输层,反过来呢就是让传输层知道接受到的报文数据如何正确传递交付到对应的应用层上的进程上。
端口号就是用来标识应用进程的数字标识。其端口号的长度为16Bit;也就是能够标识2^16个不同的端口号。另外端口号根据端口范围分为2类。
1.服务端使用的端口号:1、熟知端口号:0-1023范围。由IANA(互联网地址指派机构分配给TCP/IP最重要的一些应用进程,为固定格式)。2、登记端口号:1024-49151为没有熟知端口号的应用程序使用的,需要给IANA注册登记,防止重复。
常见的熟知端口号:
应用进程 | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
---|---|---|---|---|---|---|---|
端口号 | 21 | 23 | 25 | 53 | 69 | 80 | 161 |
2.客户端使用的端口号:数值范围为49152-65535.也叫作短暂端口号。是在客户端进程运行成功后动态选择的。
另外需要注意 是端口号只具有本地意义,即端口号只是标志本地计算机应用层的各进程。在因特网中,不同的计算机的相同端口号是没有联系的。
补充:套接字(socket)。我们知道在网络中通过Ip来唯一标识一个主机。而通过端口号来标识一台主机中的不同应用进程。所以在网络连接中就出现了Socket套接字来标识一个主机上的某进程。其实际是一个通信端点。
套接字(Socket) = (Host IP , port)
2.2无连接服务和面向连接服务
面向连接和无连接服务的区别在于在通信双方通信之前,是否需要先建立连接。换句话说就是,通信双方之间的数据传输是否基于双方需要建立连接。那么,面向连接就是在双方通信之前,必须建立连接,在通信过程中,整个连接的过程一直被监控和管理,在通信结束之后,则释放这个连接。相反,无连接服务是。两个实体之间的通信不需要建立好连接,需要通信时,直接将信息发送到“网络”上,让该信息在网上尽力传输到目的方。
在TCP/IP协议簇中,在IP层中使用了这两种协议服务。其中TCP提供面向连接的可靠的传输服务,它不提供广播和组播机制,包括了确认-重传机制、流量控制、计时定时器、连接管理等等。这一方面使得TCP连接适用在可靠性高的传输场合,如HTTP何FTP、TELNET等 。但是,另一方面呢就是也因此增加了开销。例如数据报的报头增大。
UDP协议是非连接的不可靠传输机制。它在Ip之上仅提供了多路复用和数据差错检查服务。由于UDP服务不需要建立连接,执行速度快,实时性好,只要用于小文件的传输协议*(DNS,SNMP,RTP,TFTP)
补充:
1.IP数据报和UDP数据报的区别:IP数据报在网络层要经过路由的存储转发;而UDP数据报是在传输层的端到端的逻辑信道中传输,而封装成IP数据报在网络传输中,UDP数据报对于路由是不可见的。
2.TCP和网络层的虚电路的区别:TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换节点都必须保存虚电路状态信息。在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用TCP协议不影响网络层提供无连接服务。
三、UDP协议
3.1UDP的首部格式
UDP数据报有两个部分组成,分为UDP首部和用户数据。首部部分有8个字节,4个2字节的字段组成,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中。其UDP数据报组成图解如下:
其中checkSum校验和表示简单的校验和来进行差错检测。有错就丢弃。该字段是可选的。
以下是UDP数据报首部和伪首部(12位,为了计算检验和)和IP数据报的图解
伪首部仅仅是为了计算校验和,而不进行传送和递交服务。这样的校验和,既检查了UDP数据报,
又同时对IP数据报的源IP地址和目的IP地址进行了校验。
四、TCP协议
TCP协议只要解决传输的可靠、有序、无丢失和不重复的问题,它主要特点是:
1.是面向连接的传输层协议。
2.是端对端的,只能是一对一连接。
3.可靠的交付服务。无差错、无重复、且有序。
4.面向字节流
4.1、TCP报文报
同样的,TCP数据报分为数据首部和TCP数据两部分。其首部格式图解:
字段解释:
- 来源连接端口(16位长)-辨识发送连接端口
- 目的连接端口(16位长)-辨识接收连接端口
- 序列号(seq,32位长)
- 确认号(ack,32位长) —期望收到的数据的开始序列号。也即已经收到的数据的字节长度加1。
- 如果含有同步化旗标(SYN),则此为最初的序列号;第一个数据比特的序列码为本序列号加一。
- 如果没有同步化旗标(SYN),则此为第一个数据比特的序列码。
- 报头长度 —以4字节(如果不这样根本不够)为单位计算出的数据段开始地址的偏移值。
- 保留 —须置0
- 标志符
- URG —为1表示高优先级数据包,紧急指针字段有效。
- ACK —为1表示确认号字段有效
- PSH —为1表示是带有 PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满(很少使用)
- RST —为1表示出现严重差错。可能需要重现创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。
- SYN —为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
- FIN —为1表示发送方没有数据要传输了,要求释放连接。
- 窗口(WIN) —表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小。用于流量控制
- 校验和 —对整个的TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得。这是一个强制性的字段。
- 紧急指针 —本报文段中的紧急数据的最后一个字节的序号。
- 选项字段 —最多40字节。每个选项的开始是1字节的kind字段,说明选项的类型。
序列号:
- 序列号指的是Segment中第一个字节的编号,而不是Segment的编号
- 建立TCP连接时,双方随机选择序列号