一、传输层提供的服务
端口的作用:
① 通过“端口号”标识本主机的一个特定进程
每台主机的端口号是相互独立的
TCP、UDP 两种协议的端口号是相互独立的
② TCP 或 UDP 协议,通过 Socket套接字={IP 地址:端口号},唯一地标识网络中的一台主机上的一个应用进程
端口号的分类:
① 服务器使用的端口号:
熟知端口号 0~1023:通常只能用于被熟知的重要应用程序
登记端口号 1024~49151
② 客户端使用的端口号
短暂端口号 49152~65535
功能:
① 实现端到端(进程到进程)的通信
② 复用和分用
- 复用(从上到下):在发送数据的时候,同一台主机上的多个进程可以使用同一个传输层协议
- 分用(从下到上):在接收数据的时候,传输层可以把数据正确交付到目的进程
③差错检测
- TCP 检测出差错后丢弃数据,并通知发送方重传
- UDP 检测出错误后直接丢弃数据,且不通知发送方
④向应用层提供两种服务
- 面向连接的、可靠的端到端传输服务(TCP)一一确保数据正确/完整,但开销大、实时性较差
- 无连接的、不可靠的端到端传输服务(UDP)--数据可能出错/丢失,但速度快、开销小
传输层根据端口号来区分数据来自/去往哪个进程
IP 地址+端口号 指向网络中一台主机上的一个特定的进程
网络层实现了“主机到主机”的通信。网络层在 IP 数据报的首部,指明源 IP 地址、目的 IP 地址传输层实现了“端到端”(进程到进程)的通信。
传输层在 TCP(或 UDP)报文段的首部,指明源端口、目的端口
假设:进程 1、5 正在用 TCP 通信;2、6正在用 TCP 通信;3、7 正在用 UDP 通信;4、8正在用 UDP 通信
两台主机的端口号是相互独立的
- TCP、UDP 的端口号也是相互独立的
- 当两个进程之间想要通信时,需要指明:
① 使用哪种传输层协议;
② 本进程绑定的端口号,
③ 对方的 IP 地址和端口号;
套接字(Socket)=(IP 地址:端口号),分为TCP套接字、UDP 套接字
- 0~1023 为熟知端口号,开发的时候一般不使用
- 其他端口号在实际开发时并没有特别严格的限制,只要在本机没有被使用的端口号都可以使用
- 端口号分类只是一种“建议标准”,而非“强制标准
有连接的传输 vs 无连接的传输:
有连接:传输前先打招呼,先确认对方已经准备好接收数据。传输结束时也要告知对方已结束
无连接:不打招呼,直接把数据传给对方
可靠的传输 vs 不可靠的传输
可靠的:接收方使用“确认机制”让发送方知道哪些数据已被正确接收
不可靠的:接收方无论收没收到数据、数据是否正确,都不给发送方反馈
二、UDP数据报
UDP 协议不支持报文拆分、重装,因此应用层的报文长度不能超过 UDP 协议上限
- UDP 首部很小,只占 8B
- UDP 每次传输一个完整的报文,不支持报文自动拆分、重装
- UDP 是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制
- UDP 支持一对一<