5.1 传输层的服务
5.1.1 传输层功能
通信和信息处理的角度:向上面的应用层提供通信服务,属于面向通信部分的最高层,是用户功能中的最底层
传输层为运行在不同主机上的进程之间提供逻辑通信。网络层提供主机之间的逻辑通信。
只有主机的协议栈才有传输层和应用层。路由器在转发分组时都只用到下三层。即:通信子网没有传输层,通信子网之外的主机才有。
IP协议的作用范围:LAN-路由器-WAN-路由器-LAN,即认为通信双方是两个主机
传输层协议的作用范围:主机-LAN-路由器-WAN-路由器-LAN-主机,认为通信双方是进程,且在逻辑上表现为水平方向。
传输层的功能:
- 进程之间的逻辑通信
-
复用和分用
- 复用:发送方不同的应用进程可以使用同一个传输层协议传送
- 分用:接收方的传输层可以将复用的报文正确交付给相应进程
- 对收到的报文记性差错检测(首部、数据部分),网络层只检查IP的首部
- 提供面向连接的TCP和无连接的UDP,而网络层无法同时实现两种协议,要么虚电路要么逻数据报
传输层同样向高层用户屏蔽了下层的实现细节(如网络拓扑、路由协议),TCP相当于具有全双工的可靠信道,UDP是不可靠信道。
5.1.2 传输层的寻址和端口
1.端口的作用
让应用层的各种应用进程将其数据通过端口向下交付给传输层,并让传输层知道应该将其报文段中的数据向上交付给应用层的进程。
端口就是传输层服务访问点(TSAP,Transport Service Access Point)。端口只有本地意义。不同主机的相同端口号没有联系。
IP地址是网络层的SAP,MAC地址是数据链路层的SAP,端口是传输层的SAP。
硬件端口是不同硬件设备的交互接口,软件端口是各种协议进程和传输实体的交互地址。传输层使用的是软件端口。
2.端口号
长度为16bit,可表示65536个不同端口。只有本地意义。根据范围分为两类,由IANA(互联网数字分配机构)指派:
- 服务端使用的端口号
- 熟知端口号:0-1023,给TCP/IP的最重要程序
- 登记端口号:1024-49151,必须在IANA登记来防止重复。
- FTP:21; SSH:22; TELNET:23; SMTP:25; DNS:53; TFTP:69; HTTP:80; SNMP:161; HTTPS:443; MSSQL:1433; MySQL:3306
- 客户端使用的端口号:49152-65535,短暂端口号(临时端口)
3.套接字
网络中通过IP地址标识和区别不同主机,而用端口号标识和区分不同进程。采用发送方和接收方的套接字(Socket)组合识别端点。所谓套接字实际上是一个通信端点,即:
套接字 = 主机IP地址, 端口号
唯一标识了网络上的一个主机和其上的一个进程。
网络通信中,主机之间发送的报文段包含目的端口号和源端口号,确保发送确认信息。
5.1.3 无连接和面向连接
TCP:面向连接,需要建立和释放连接。不提供广播和组播,具备确认、流量控制 、计时器、连接管理等额外开销。协议数据的头部更大。适用于可靠性优先的场合。
UDP:无连接的非可靠传输层协议。在IP之上仅提供两个附加服务:多路复用和错误检查。执行快,实时性强,主要包括小文件传输(TFTP)、DNS、SNMP、实时协议(RTP)
注意:
- IP数据报在网络层需要经过路由的存储转发,而UDP数据报是在其基础上进行的,对网络层不可见,可认为是逻辑信道的水平传输。
- TCP是传输层抽象的逻辑信道,而虚电路是网络层上面向连接的协议,经过的交换节点必须保存虚电路的状态信息。在网络层采用虚电路则不能在上一层提供无连接服务(已经有了连接),而在传输层采用TCP不影响网络层提供无连接服务。(允许下层无连接而上层高有连接)
5.2 UDP协议
5.2.1 UDP数据报
1.概述
RFC768的UDP只在IP的基础上增加了多路复用分用和差错检测,因此UDP开发主要还是在处理IP。
优点:
- 无建立延时
- 不必在端系统维护连接状态(如拥塞控制、收发缓存)
- 分组首部开销小,TCP20B,UDP8B
- 没有拥塞控制,拥塞不影响主机效率,能容忍数据丢失
常用于一次传输较少的应用,如DNS、SNMP;只提供最大努力交付,不保证可靠交付;面向报文,报文不可分割,是处理的最小的单位。
2. UDP首部格式
首部8字节,分别为:
- 源端口号,2B,不需要回信则全0
- 目的端口号,2B
- UDP长度,2B,是包括首部和数据的总长,最小8B
- UDP校验和,2B,用于检错,有错就丢弃。不用则全为0
5.2.2 校验
计算校验和之前需要在UDP数据报之前添加12B的伪首部,伪首部不进行传输。和IP数据报首部的校验类似,使用二进制反码运算求和再取反取得校验信息。不同在于,IP数据报只检测首部而UDP数据报一起检验首部和数据部分。
发送方:
- 将全0放入校验和字段,添加伪首部
- 将UDP数据报看做16位(2B)子串的集合,若末尾非偶数则添加全0
- 按二进制反码计算这些16位子串的和,并将此和的反码写入校验和字段
接收方:
- 添加伪首部,补为偶数字节数
- 按二进制反码算出16位字的和
- 无差错时,运算结果全为1,否则丢弃
注意:尾部添加的全0、位首部都不发送,只在计算时用到。
5.3 TCP协议
5.3.1 TCP的特点
- 面向连接
- 每个TCP连接只能有两个端点,即每个TCP连接都是点对点的
- TCP提供可靠交付, 保证传输无差错、不丢失
- 全双工,双方能在任何时候发送数据
- TCP面向字节流,应该把传输的数据块看做一连串无结构的字节流
发送缓存:
- 发送应用程序传送到发送方TCP端口,准备发送的数据
- TCP已发送但未收到确认的数据
接收缓存:
- 按序到达但尚未被应用程序读取的数据
- 不按序到达的数据
5.3.2 报文段
TCP传送的数据单元为报文段。分为首部和数据两部分,作为IP数据报的数据部分封装在IP数据报中。首部固定的前20字节是最小长度。后面必须是4N个字节(按照32bit对齐)。
TCP报文段可以实现:
- 运载数据
- 建立和释放连接
- 应答
20B首部的5部分:
- 第一个
4B-源端口和目的端口,各2B - 第二个
4B-序号字段,数据流传送过程中的每个字节都需要编上一个序号。序号字段的值是本报文段中的第一个字节的序号。 - 第三个
4B-确认号,期望收到对方下一个报文段的数据的首字节的编号。确认号为N则表示前N-1个字节都正确收到 - 第四个4B中的
4bit-数据偏移,表示首部长度,即首部和数据部分的距离,以对齐的4B为一个单位,即20B的数据偏移为5个32bit - 第四个4B中的
6bit-保留字段 - 第四个4B中的
6bit-URG、ACK、PSH、RST、SYN、FIN- 紧急位URG:1表示紧急指针字段有效,有需尽快传送的紧急数据
- 确认位ACK:1时确认号字段才有效,否则无效
- 推送位PSH:接收方TCP收到1表示尽快交付不必等缓存满
- 复位位RST:1表示严重差错,需要释放重连
- 同步位SYN:1则表示是连接请求(ACK=0)或连接接受报文(ACK=1)
- 终止位FIN:用于释放连接,1则释放
- 第四个4B中的
2B-窗口字段:指出允许发送的数据量,单位是字节 - 第五个4B中的
2B-检验和:和UDP算法步骤一致,也是按2B分段。但伪首部字段不同 - 第五个4B中的
2B-紧急指针:指出紧急数据的长度,紧急数据保存在数据字段的最前方。 - 选项字段:长度可变,不在最小长度之内。规定了最大报文段长度(Maximum Segment Size,MSS),是数据字段的最长长度
- 填充字段:填充选项字段,使之4B对齐