传输层的功能
- 提供应用进程之间的逻辑通信。
- 复用:不同进程可以使用同一个传输层协议传输数据。
- 分用:接收方剥去报文首部后可以正确交付给目的进程。
- 对收到的报文进行差错检测。
端口号和套接字
端口
- 端口是传输层地SAP
套接字
- 套接字 Socket = (主机IP地址 : 端口号)
- 套接字唯一地标识了网络中地一个主机和其上地一个应用进程。
- TCP和UDP分别拥有自己地端口号,它们互不干扰,可以共存于同一台主机。
TCP
TCP的特点
- TCP在不可靠的IP层之上实现了可靠的数据传输协议。
- TCP是全双工的。
- TCP面向字节流,传送时给每一个字节都编上序号。TCP数据像自来水一样连续流入盆中(缓存)。
- TCP能够保证数据的正确性,也能够保证数据顺序到达,不可能丢包。
- TCP像自动挡的汽车,连接,按序到达,可靠性,自动切包都已经内置了。
应用场景
- 如果是由客户端间歇性地发起无状态的查询,并且偶尔发生的延迟可以容忍,那么就使用HTTP/HTTPS。
- 如果客户端和服务器都可以独立发包,但是偶尔发生的延迟可以容忍(比如在线的纸牌游戏、大部分MMO类游戏),那么使用TCP长连接。
TCP报文段
- TCP报文包头的最小长度为 20B。
- 单个数据包最大能承载 $2^{16}- 1 = 65,535$B 的数据。(16为窗口大小的位数)
建立连接的三次握手
断开连接的四次挥手
UDP
UDP的特点
- UDP无连接,不可靠,尽最大努力交付。
- 使用UDP,应用层能更好的控制要发送的数据和发送时间。
- 应用层协议要自己限制合适的报文大小,以免报文太大导致丢包率高。
- UDP为数据包模式,不是流模式,UDP数据像机关枪一样不停的扫射到目的地。
- UDP不保证任何事情(不保证正确,不保证按顺序到达),且可能丢包。
- UDP像手动挡汽车,只会简单的传输,什么都不能保证,但在效率上潜力巨大;只要应用层能够处理好需求,延迟比TCP低得多。
应用场景
- 如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如大多数多人动作类游戏、少部分MMO类游戏),那么使用UDP。