本文已参与「新人创作礼」活动,一起开启掘金创作之路。
概述和传输层服务
传输服务和协议
为运行在不同主机上的应用进程提供==逻辑通信==
传输协议运行在端系统:
- 发送方:将应用层的报文分成==报文段==,然后传递给网络层
- 接收方:将报文段重组成报文,然后传递给应用层
有多个传输层协议可供应用选择:
- Internet: TCP和UDP
传输层vs网络层
网络层服务:主机之间的逻辑通信
传输层服务:进程间的逻辑通信
- 依赖于网络层的服务。延时、带宽
- 并对网络层的服务进行增强。数据丢失、顺序混乱、 加密
有些服务是可以加强的:不可靠一>可靠、安全
但有些服务是不可以被加强的:带宽,延迟
传输层协议
-
可靠的、保序的传输:TCP 。多路复用、解复用 。拥塞控制 。流量控制 。建立连接 。字节流
-
不可靠、不保序的传输:UDP 。多路复用、解复用 。没有为尽力而为的IP服务添加更多的其它额外服务 。数据报
-
都不提供的服务: 。延时保证 。带宽保证
多路复用和解复用
- 在发送方主机==多路复用== 从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)
- 在接收方主机多路解复用 根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)
多路解复用工作原理
无连接(UDP)的多路解复用
UDP socket 由二元组确定:目的 IP 地址, 目的端口号
当主机接收 UDP 段:
- 检测段中的目的端口号
- 引导 UDP 段到具有该端口号的 socket
具有不同源IP及/或源端口号的IP 数据报被引导到同一个 socket
无连接的多路解复用
当主机接收到UDP段时:
- 检查UDP段中的目标端口号
- 将UDP段交给具备那个端口号的套接字
具备相同==目标IP地址和目标端口号==,即使是==源IP地址==或/且==源端口号==的IP数据报,将会被传到相同的目标UDP套接字上
UDP多路复用的例子
面向连接(TCP)的多路复用
TCP socket 由四元组确定:
- ==源 IP==
- ==源端口==
- ==目的 IP==
- ==目的端口==
==解复用==:接收主机使用这四个值,将报文段引导至适当的 socket
服务器主机可以支持多个并发的 TCP socket:
- 每个 socket 由其自身的四元组确定
Web 服务器对每个连接的客户端,有不同的 socket
- 非持续的 HTTP 对每个请求有不同的 socket
面向连接(TCP)的解复用例子
无连接传输:UDP
UDP:User Datagram Protocol
UDP 数据段可以
- 丢失
- 应用数据不按序到达
无连接
- 在UDP收发双方之间, 无需握手信号
- 每个 UDP 数据段的操作都互相独立
UDP 被用于
- 流媒体(丢失不敏感,速率敏感、应用可控制传输速率)
- DNS
- SNMP
在UDP上可行可靠传输
- 在应用层增加可靠性
- 应用特定的差错恢复
为什么会有UDP
- 不建立连接
- 简单
- 报文段的头部小
- 无拥塞控制和流量控制
UDP:用户数据报协议
UDP数据报协议:
UDP校验和
目标:检测在被传输报文段中的差错
发送方:
- 将报文段的内容看作一串16比特的整数
- checksum(校验和):作段内容的加法和、反码
- 发送方将校验和放入 UDP的 checksum 字段
接收方:
- 对接收到的段内容进行和反码计算
- 检查计算结果是否与收到的校验和相等: -- NO – 查出错误 -- YES – 没查出错误. 但是仍有可能存在错误
UDP校验和例子
==最高位的进位回加到结果中==
1