运输层
UDP
特点:
- 无连接的
- 面向报文
- 尽可能交付
- 不可靠的
- 没有拥塞控制
- 可以一对一、一对多、多对多、多对一通信
TCP
- 面向连接的
- 全双工通信
- 面向字节流
- 一条连接只有两端
- 实现拥塞控制,可靠的
ARQ(停止等待协议 Automatic Repeat-reQuest)
图一:A为发送者,B为接收者。如果A在发送的时候发生了异常,B没有接收到,那么A会等待B的确认信息一段时间,如果没有收到则会重新发送。
图二:如果B返回的消息很迟才会被A接收到,且A已经处理过同样的信息了,则会将B返回的消息接收,但是不做任何但处理。
连续ARQ协议(滑动窗口协议)
由上图可知,发送者有一个发送窗口(窗口的大小由接收方控制
),在窗口里面的字节
会被A发送,接受者不会对每个都回应确认信息,而是采用累积确认
的方式,在收到几个分组之后,他会返回按序到达的最后一个发送确认。
被确认过的字节,A会向前移动窗口。
流量控制
流量控制的目的是控制发送者的速率,让接受者有足够的时间来接收。
手段:控制发送者的窗口大小。
拥塞控制
拥塞控制是为来防止过多的信息注入到网络内,造成网络的负载过大。
慢开始
慢开始会使窗口从1开始,每次以2的倍数增长。
拥塞避免
当然不能一直的无限增长下去,当增长到拥塞窗口阈值(图中的ssthresh)
的时候,会以线性速度增长,每次增加1,如果遇到堵塞,会将拥塞窗口的阈值变成遇到阻塞时拥塞窗口大小的一半。
快恢复
不会让窗口的值下降到1重新从慢开始,而是直接降到遇到阻塞时拥塞窗口大小的一半。
快重传
接受者收到消息后,不会进行捎带其他额外的信息,而是马上发送确认。
当发送者连续收到3个确认信息,则会立刻进行重传。
三次握手
第一次握手
发送的TCP头部信息里面的SYN(同步)会为1,序号为x,请求建立连接
第二次握手
接收者,同样就在TCP头部信息里面带上SYN=1,同时会带上ACK(为1的时候,确认号「ack」将有效
)=1,seq=y为接受者发送的信息,ack确认号要求发送者发送从x+1开始的字节信息
第三次握手
发送者发送ACK=1,seq=x+1,ack=y+1,表示收到了接受者发送的ack,并发送x+1开始的字节信息,同时要求接受者发送y+1开始的字节信息。同时表示连接已经建立
四次挥手
第一次挥手
发送者发送FIN信号,表示需要结束连接
第二次挥手
接收者确认收到结束信息,并会继续发送额外的消息,知道接收者需要的发送的消息发送完毕
第三次挥手
发送FIN信号,表示额外的消息已经发送结束了,可以终止连接了。
第四次挥手
发送者接收到接收者发送的终止信号,会进入一段等待时间(防止接收者没有接收到消息,无法结束连接
)