目录
- [3.1 概述和运输层服务](#3.1 概述和运输层服务)
- [3.2 多路复用和多路分解](#3.2 多路复用和多路分解)
-
- [3.2.1 多路分解](#3.2.1 多路分解)
- [3.2.2 多路复用](#3.2.2 多路复用)
- [3.2.3 socket](#3.2.3 socket)
- [3.2.4 无连接的多路复用和多路分解](#3.2.4 无连接的多路复用和多路分解)
- [3.2.5 面向连接的多路复用与多路分解](#3.2.5 面向连接的多路复用与多路分解)
- [3.2.6 Web服务器与TCP](#3.2.6 Web服务器与TCP)
- [3.3 无连接运输:UDP](#3.3 无连接运输:UDP)
-
- [3.3.1 特点](#3.3.1 特点)
- [3.3.2 使用UDP的原因](#3.3.2 使用UDP的原因)
- [3.3.3 UDP报文段结构](#3.3.3 UDP报文段结构)
- [3.3.4 UDP校验和](#3.3.4 UDP校验和)
3.1 概述和运输层服务
-
端到端通信,无需网络的帮助,不在路由器中实现
-
运输层把待发送的报文转换成报文段(segment),运输层的packet就是segment
-
Logical
应用利用传输层提供的逻辑通信互发消息,无需关心这些消息的物理基础设施细节
-
运输层和网络层的关系
-
运输层为运行在不同主机上的应用进程提供了逻辑通信(通信的真正实体是进程)
-
网络层提供了主机之间的逻辑通信(不是通信的真正实体)
-
-
因特网运输层概述
-
网络层
-
协议:IP
-
IP服务:尽力而为,不可靠
-
-
传输层
-
UDP(用户数据报协议)
- 不可靠,无连接服务
-
TCP(传输控制协议)
-
可靠,面向连接的服务
-
附加服务
-
可靠数据传输
-
拥塞控制
-
流量控制
-
-
-
-
3.2 多路复用和多路分解
3.2.1 多路分解
将运输层报文段中的数据交付到正确的套接字(socket)的工作
3.2.2 多路复用
从不同套接字收集数据块,并为每个数据集封装上首部信息从而生成报文段,再把报文段传递到网络层
3.2.3 socket
-
应用程序和网络之间的接口,让程序可以实现数据的收发
Socket = IP地址 + 端口号 + 协议,如192.168.1.1:8080/TCP
-
打开socket意味着OS分配一个buffer来接收数据,并把缓冲区地址返回给打开它的进程。因此存在socket-OS 的buffer映射关系
-
从socket接收数据意味着数据从OS buffer复制到应用buffer
-
无连接socket(如UDP)
流程
-
Server socket打开后就准备好接收携带应用消息的报文段
-
Server OS为应用消息新建buffer
-
Client socket发送消息前不通知server(即发送前不建立连接)
-
-
面向连接socket(如TCP)
流程
-
Server socket打开后就准备好接收携带连接消息的报文段
-
Server OS为连接报文段新建buffer
-
Client socket发送连接报文段建立连接
-
Server OS新建一个连接socket,实际上是为即将到来的应用消息新建buffer
一个client进程可对同一个server socket发起多个连接
-
3.2.4 无连接的多路复用和多路分解
-
UDP套接字由一个二元组全面标识:
{D.IP, D.P} -
D.IP:目的IP地址。
D.P:目的端口号
3.2.5 面向连接的多路复用与多路分解
-
TCP套接字由一个四元组表示:
{S.IP, D.IP, S.P, D.P} -
S是源
3.2.6 Web服务器与TCP
-
Web服务器本质上是处理HTTP消息的TCP服务器
-
作为TCP服务器意味着监听一个面向连接的server socket
-
功能
-
接收client socket的连接
-
创建新buffer
-
-
服务器架构
-
单线程Web服务器
用同一个执行进程处理server socket和连接socket
-
多线程Web服务器
由管理server socket的进程派生的独立线程处理client的连接socket
-
3.3 无连接运输:UDP
UDP是一种简单粗略、功能单一的运输层协议,在IP基础服务上仅提供最小限度增强功能
3.3.1 特点
-
无连接
- 发送报文段前不握手
-
不可靠
3.3.2 使用UDP的原因
-
关于发送数据内容和发送时间的应用层控制更精细
要求最小发送速率, 如视频会议
-
无需连接建立
节省时间,TCP需要三次握手
-
无连接状态
TCP每个连接需要服务器维护状态,UDP服务器可支持更多活跃用户
-
分组首部开销小
UDP首部8字节,TCP首部20字节
3.3.3 UDP报文段结构
-
S.P字段与D.P字段
用于多路复用和多路分解
-
长度字段:只是UDP报文段总字节数(首部+数据)
-
校验和字段:接收方检查报文段是否出错(仅检测,不校正)
-
应用数据(报文)
3.3.4 UDP校验和
-
发送方除了发送应发送的报文段,还需要发送校验和
-
校验和:将报文段拼接数据报的其他内容构成16位,把这些16位字相加,溢出位加到最低位,最后把结果取反码
-
接收方将这些报文段和校验和相加,如果结果全为1则正确,否则包有错误
(别忘了运输层报文段(segment)就是packet)
-
差错检测的必要性
-
会出现比特错误
-
在传输时
-
在路由器buffer时
-
-
端到端原则(end-end principle)
- 必须在最终端点提供差错检测,而不是依靠中间节点
-