从这篇博客起来总结计算机网络中传输层的部分。
传输层服务和协议概述
传输层协议为运行在不同host上的进程也就是应用进程提供了一种逻辑通信机制。什么叫逻辑通信机制呢?指的就是两个进程之间仿佛是直接连接的,它不需要关心这期间有多远的物理距离,经过了多少路由器,使用了哪些物理层等等。端系统运行传输层协议,其中发送方将应用递交的消息分成一个或多个的报文段,并向下传给网络层。接收方将接收到的报文段组装成消息并向上交给应用层。
传输层协议
可靠、按序的交付服务(TCP)
- 拥塞控制
- 流量控制
- 连接建立
不可靠的交付服务(UDP)
基于“尽力而为”的网络层,没有做扩展。
复用和分用
复用:从多个报文段接收数据,为每块数据封装上头部信息,生成报文段,交给网络层。
分用:传输层依据头部信息将收到的报文段交给正确的socket,即不同的进程。如下图所示:
主机2上面运行着两个进程,分别是P1和P2,主机1的P3进程会给主机2的P1进程发报文段,主机3的P4进程会给主机2的P2进程发报文段,那么主机2的传输层作为接收端就要进行多路分用,就是要将报文段正确的交给对应的进程。主机收到报文段之后,传输层协议提取IP地址和端口号信息,将报文段导向相应的socket。
UDP
User Datagram Protocol用户数据报协议,基于IP协议,进行多路复用/分用和错误校验的工作。UDP提供一种尽力而为的服务模型,这是因为IP就是一种尽力而为的机制,而UDP在IP的基础上没有附加太多的东西所以就造成了这种不可靠的特性。UDP发送方和接收方之间不需要握手,每个UDP段的处理独立于其他段。
UDP为什么存在?
1.UDP无需建立连接,所以就会减少延迟的时间,这也就是为什么DNS用的是UDP而不是TCP。
2.实现简单,无需维护连接状态。
3.头部开销少。
4.没有拥塞控制,应用可以更好的控制发送时间和速率。
UDP的用途
常用于流媒体应用,容忍流失,速率敏感。还用于DNS,SNMP协议等。
在UDP上实现可靠性传输?
- 在应用层增加可靠性机制
- 应用特定的错误恢复机制
TCP
Transmission Control Protocol传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。有以下几个特点:
- 点对点
- 可靠的,按序的字节流
- 采用流水线机制
- 能够对发送方/接收方进行缓存
通信双方在发送数据之前必须建立连接,连接状态只在连接的两端中维护,在沿途节点中并不维护状态。TCP连接包括:两台主机上的缓存、连接状态变量、socket等。
下图是TCP的段结构
其中介绍一下这几个标志位
- ACK——确认连接
- RST——复位
- SYN——请求建立连接
- FIN——终止连接