传输层
前提
参考书:谢希仁《计算机网络(第7版)》、王道计网课程、天勤计网课程等。
1 传输层概述
1.1 传输层简介
(1)传输层为应用层提供通信服务,使用网络层的服务。
(2)传输层的功能:
- 传输层提供进程和进程之间的逻辑通信。
- 复用和分用
- 传输层对收到的报文进行差错检测。
- 传输层的两种协议
(3)网络层提供主机之间的逻辑通信。只有主机才有层次。
1.2 传输层的两个协议
(1)传输层有两个好兄弟,大哥TCP和小弟UDP,大哥靠谱,小弟不靠谱。
(2)TCP
- 面向连接的传输控制协议。
- 传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。
- 可靠,面向连接,时延大,适用于大文件。
(3)UDP
- 无连接的用户数据报协议。
- 传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
- 不可靠,无连接,时延小,适用于小文件。
1.3 传输层的寻址与端口
(1)复用:应用层所有的应用进程都可以通过传输层再传输到网络层。
(2)分用:传输层从网络层收到数据后,交付到指明的应用进程。
(3)端口
- 端口是传输层的SAP(服务访问点),标识主机中的应用进程。该端口为 逻辑端口/软件端口。
- 拓展:端口分硬件端口、软件端口。比如,路由器的端口实实在在存在着,摸得着,是硬件端口。而像这种摸不着的协议端口、进程端口等,则为软件端口。
(4)端口号主要运用于传输层上,用来标识同一台计算机中进行通信的不同应用程序(进程)。因此也被成为应用程序地址。
(5)端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。也就是说,不同计算机中,相同端口号可以指代不同的进程。
(6)端口号长度为16bit ,能表示65536个不同的端口号。
(7)端口号(按范围分):
- 服务端使用的端口号
- 熟知端口号(0~1023):给TCP/IP最重要的一些应用进程,让所有用户都知道。
- 登记端口号(1024~49151):为没有熟知端口号的应用程序使用的。
- 客户端使用的端口号(49152~65535):仅在客户进程运行时才动态选择。
(8)套接字
在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。
2 UDP协议
2.1 UDP协议的简介
- UDP,全称:User Datagram Protccol, 即用户数据报协议。
(1)UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能。
(2)UDP的主要特点:
- UDP是无连接的,减少了开销和发送数据之前的时延
- UDP使用最大努力交付,即不保证可靠交付。
- UDP是面向报文的,适合一次性传输少量数据的网络应用。
- UDP无拥塞控制,适合很多实时应用。
- UDP首部开销小,8个字节。而TCP需要20个字节。
(3)应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文。
2.2 UDP首部格式
分用时,找不到对应的目的端口号,就丢弃报文,并给发送方发送ICMP"端口不可达"差错报告报文。
2.3 UDP报文段
- 伪首部只有在计算机检验和时才出现,不向下传送也不向上递交。
- 17:封装UDP报文的IP数据报首部协议字段是17。
UDP长度:UDP首部(8B)+ 数据部分长度(不包括伪首部)。
2.4 UDP检验
在发送端:
- 填上伪首部
- 全0填充检验和字段
- 全0填充数据部分(UDP数据报要看成许多4B的字串接起来)
伪首部 + 首部 + 数据部分 采用二进制反码求和
- 把和求反码填入检验和字段
- 去掉伪首部,发送
在接收端:
- 填上伪首部
- 伪首部 + 首部 + 数据部分 采用二进制反码求和
- 结果全为1,则无差错,否则丢弃数据报 / 交给应用层附上出差错的警告。
3 TCP协议
3.1 TCP协议特点
- TCP是面向连接(虚连接)的传输层协议。
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
- TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可