思维导图:
一、 概述
与数据链路层关系
- 提供可靠的、高效的、性价比高的数据传输
- 输出实体
- 传输层利用网络层的服务,为它的上层应用层提供服务
网络层与传输层不同点:
- 网络层运行在由承运商操作的路由器上,因此用户无法真正控制到网络层
- 把另一层放在网络层之上,可以让用户能够控制到服务质量(some control)
- 传输层原语独立于网络层原语,而网络层原语会因为网络的不同而不同
- 网络层负责把数据从源机送达到目的机(Host to Host)
- 传输层负责把数据送达到具体的应用进程(End to End:端到端)
与数据链路层关系
数据段(TPDU,传输层协议数据单元)
- TPDU(Transport Protocol Data Unit)是从传输实体发到对端传输实体的信息,有的教材叫TPDU为数据段(segment)
- TPDU作为数据(载荷)被封装在分组(packet)中,由网络层传输交换
- 分组作为数据(载荷)被封装在帧(frames)中,由数据链路层传输交换
两个常用的协议:
- UDP(User Datagram Protocol)用户数据报协议
- TCP(Transmission Control Protocol)传输控制协议
二、 用户数据报协议UDP
UDP提供无连接的连接,可以使用源端口和目的端口
- UDP数据段包括4个字段共8字节的头部和数据两个部分
- 其中第3个字段,长度字段(域)表示;包括头部和数据总共有多少字节
- 第4个是校验和(checksum)是可选的,如果不计算校验和,则该字段/域置为0
- UDP数据段中最独特、最重要的字段是1、2个字段,分别表示源端口和目的端口,都是用16比特表示的
端口被分为三段:
自由端口(Free port)
- 本地分配
- 动态的随机端口
UDP校验和计算:
校验和中用到的IP伪头部:(TCP协议值为6)
收到数据进行校验和计算,计算的数据里面包括收到的校验和,计算的结果应该为全1,否则传输过程中发生错误。
通信模型
端点就是套接字(Socket)
包括:
- IP地址
- 端口号
通信五元组:
一些著名的端口号:
传输层的PDU不仅仅送达主机,而且送达端口,即应用进程
三、 TCP数据段(Transmission Control Protocol)
- TCP连接上的每个字节都有它自己独有的32位序列号
- 单收、发双方的TCP实体不是以字节,而是以数据段的形式交换数据
- TCP数据段必须适合IP分组的65515字节(65535-20B)的载荷限制
- 每个TCP数据段必须适合于下层网络的MTU
Sequence number
- 序列号,表示一个字节的编号
- 初始序列号ISNs(initial sequence numbers):随机产生的
Acknowledgement number
- 确认号,期望接收的字节编号(32位)
- TCP的可靠传输保证,采用了肯定确认机制
:
保留字段,和控制比特
- URG:紧急数据,即使win = 0,也可以发送。值为1时,马上处理
- ACK: =1,确认号有效
- PSH:表示这是带有PUSH标志的数据,接受方收到这样的数据,应该立刻送到上层,而不需要缓存它
- RST: 被用来重置一个已经混乱的连接,如果在连接建立阶段,就直接拒绝建立连接
- SYN: 用在连接建立的过程
- FIN:被用来释放连接,它表示发送方已经没有数据要传输了,但是可以继续接收数据
Window size:
- 为了避免接收方被大量涌入的数据所淹没,TCP实体进行流控(Flow control)
- 告诉对方可以发送的数据字节数,即从确认字节号开始,连续发送的字节总数
- 窗口尺寸的大小,取决于接收方
Checksum(校验和):
- 计算方法跟UDP数据段中校验和计算一样,唯一不一样的就是伪头部中的用户协议值取为6
Urgent pointer:
- 紧急指针,和URG控制位配合使用,指明了紧急数据
Options
- 如果有选项域,它提供了一种增加基本头没有包含的内容的方法
TCP三次握手
1. 建立过程
- 一方(server)被动地等待一个进来地连接请求
- 另一方(client)通过发送连接请求,设置一些参数
- 服务器回发确认应答
- 应答到达请求方,请求方最后确认,连接建立
- 可能地安全问题:SYN泛洪Dos攻击(伪造源IP)
2. 连接释放
- 任何一方在没有数据要传送地时候,都可以发送一个FIN置位了的TCP数据段
- 当FIN被确认的时候,该方向的连接被关闭了
- 当双向的连接都关闭了的时候,连接释放
四次握手正常释放连接:
TCP传输策略
传输的是全双工的字节流
采用Window size 进行流控
策略
- 当窗口数为0时,发送者不能正常发送数据段,除非:
- Urgent数据。比如,用户想杀掉远端机器上的进程的时候,可以发送数据。
- 发送者可以发送一个字节的数据段,以便让接收者再次发送期待接收的字节号(确认)和窗口数(避免死锁)
优化
1. 优化接收端
- 接收端可以推迟500ms发送确认分组和窗口更新,以便可以免费搭载在处理后的回显分组内(free ride)
-
傻瓜窗口综合症
2. 优化发送端:Nagle's algorithm
- 当数据以一次一字节的速度到达传输实体的时候,只发送第一个字节,然后将后续的字节缓存起来,知道发出的字节得到确认
- 将缓存起来的字节在一个数据段中发出,在继续缓存,知道发出的数据得到确认
- 有些情况禁用,如:互联网远程运行
TCP拥塞控制
拥塞检测(Congestion detection)
- 所有的互联网TCP算法都假定超时是由拥塞引起的,并且通过监视超时的情况来判断是否出现问题
拥塞控制(Congestion control)
- 当一个连接建立的时候,双方选择一个合适的窗口大侠,接收方根据自己的缓存区大小来指定窗口的大小
- 如果发送者遵循这个窗口大小的限制,则接收端不会出现缓冲区溢出的问题,但可能由于网络内部的拥塞而发生问题
两个窗口问题
- 要解决拥塞,应该是认识到这两个潜在的问题:网络容量、接收者容量
- 为此,每个发送者维护两个窗口
- 接收者窗口:反映了目前接收者的处理能力(容易获取)
- 拥塞窗口:大小反应了网络目前的容量(难于获取)
- 只要发送者发送的数据字节数是两个窗口中小的那个窗口数
慢启动算法(Slow Start)
- 当连接建立的时候,发送者用当前使用的最大数据段长度初始化拥塞窗口,然后发送一个最大的数据段
- 如果在定时器超时之前收到确认,则将拥塞窗口翻倍,然后发送两个数据段,直到超时(或达到接收方窗口的大小)
阈值开始,每次传输,线性增长
-
不断超时,不断重启
- 重新慢启动的时候,拥塞窗口值不用重置为一个数据段大小,而是可以设置为阈值大小,从这里直接开始线性增长,者就是所谓的快速恢复
-
任何时候,如果TCP传输实体收到一个ICMP抑制分组(ICMP source quench),则该事件被当作超时对待
TCP定时器
- TCP采用了肯定确认重传技术,保证每一个字节的可靠传输
- 每发一个数据段,都会启动一个定时器——重传定时器(retransmission timer,Positive ackn.with retransmit)
- 持续定时器(persistence timer) 用来避免如下死锁
- 保活定时器(keep-alive timer)——用来检查连接是否存活
- 在关闭时候,处于time-wait中使用的定时器,运行两倍的最大分组生存时间,以确保连接 关闭之后,该连接上的所有数据都完全消失
TCP与UDP比较:
-
TCP
- 可靠传输方式
- 可让应用程序简单化,程序员可以不必进行错误检查、修正等工作
- UDP
- 为了降低对计算机资源的需求(如:DNS)
- 应用程序本身已提供数据完整性的检查机制,毋须依赖传输层的协议来保证
- 应用程序传输的并非关键性的数据(如:路由器周期性的路由信息交换)
- 一对多方式,必须使用UDP(TCP限于一对一的传送)