计算机网络学习笔记3(运输层)
计算机网络学习笔记3(运输层)
1.运输层服务(transport-layer services)
-
运输层协议为不同主机(host)的进程(process)之间提供了逻辑通信
-
运输层协议运行在端系统上
1.在发送端,将应用报文划分成报文段(segments),发送到网络层
2.在接收端,把报文段重组为报文,传递至应用层
-
两个重要的传输层协议:TCP和UDP
-
运输层提供的是进程之间的逻辑通信,而网络层提供的是主机之间的逻辑通信
-
TCP提供的是可靠的(reliable),有序的(in-order)传输
-
UDP提供的是不可靠的(unreliable),无序的(unordered)传输
-
这两个协议都不提供延迟保证和带宽保证
2.多路复用和多路分解(multiplexing and demultiplexing)
-
在发送端的复用:在不同的套接字中收集数据块,并为每个数据封装上首部信息
-
在接收端的分用,将接收到的报文段交付到正确的套接字
-
运输层的报文段结构:
1.源端口号(source port)和目的端口号(dest port)
2.其它首部字段
3。应用数据
-
主机使用IP地址和端口号来确定报文段送达正确的套接字
-
当数据报送达UDP套接字时,必须确定目的端口号和目标IP地址
也就是说,一个UDP套接字是由一个二元组来全面标识的,该二元组就是目的IP地址和目的端口号
-
在接收UDP报文段时,只要目的端口和IP地址相同,都由同一个套接字来接收。
-
TCP套接字是由一个四元组来标识,四元组的内容是:源IP地址,源端口号,目标IP地址和目标端口号
-
接收端使用这四个值来将报文段定向到相应的套接字
3.无连接运输:UDP(connectionless transport:UDP)
-
UDP是提供尽力而为(best effort)服务
-
UDP是一个无连接的协议
-
使用UDP协议的应用:
1.一些流媒体应用
2.DNS
3.SNMP
-
UDP报文段结构
UDP报头有8个字节
UDP报头包含源端口号,目的端口号,长度和检验和
-
length字段指示了UDP报文段的字节数(包含头部)
-
checksum是检测传输的报文中有没有出现错误
4.可靠数据传输原理(Principles of reliable data transfer)
-
rdt1.0 经完全可靠信道的可靠数据传输(reliable transfer over a reliable channel)
-
rdt1.0传输过程中没有丢包,也没有位错误
-
rdt2.0 经具有比特差错信道的可靠数据传输(channel with bit errors)
-
rdt2.0使用checksum来检测位错误
-
acknowledgements(ACKs)表示传输的包是正确的
-
negative acknowledgements(NAKs)表示传输的包有错误
-
rdt2.0又被称为停等(stop-and-wait)协议
-
rdt2.1来解决ACK和NAK出现错误的问题
-
rdt2.1给分组加上序号,0和1
-
rdt2.2采用了冗余ACK分组(deplicated packet),连续的两个ACK等同于NAK
-
rdt3.0 经有比特差错的丢包信号的可靠数据传输
-
rdt3.0 引入了计时器
-
rdt3.0 有时被称为比特交替协议(alternating-bit protocol)
5. 流水线可靠数据传输协议(pipelined protocols)
-
有两种常用的流水线协议,分别是回退N步(Go-Back-N)和选择重传(Selective Repeat SR)
-
流水线提高了传输协议的效率
-
Go-Back-N
发送方可以发送多个分组
接收方采用累积确认(cumulative acknowledgement)的方式,如果中途出现丢失,则不会接收剩下的包
发送方有最早发送未确认的定时器,如果超时,会发送所有已发送但未确认的分组,只有一个定时器
-
选择重传(Selective Repeat)
发送方可以发送多个分组
接收方对每一个包发送单独的ack信号
发送方对每一个包都有一个定时器
Go-Back-N
- 有N个发送窗口
- 接收方只接收按顺序的分组
- 失序的分组会被直接丢弃,因为接收方没有接收缓冲区
- 接收到失序分组后会重复发送最大的顺序分组号的ack
Selective Repeat
- 接收方对每个正确接收的分组都发送一个独立的ack信号
- 接收方有不止一个接收窗口
3种滑动窗口协议的比较
-
Alternating bit:
0<=发送窗口的大小<=1
接收窗口为1个
-
Go-Back-N
0<=发送窗口的大小<=MAX_SEQ
接收窗口为一个
-
Selective Repeat
-
0<=发送窗口的大小<=(MAX_SEQ+1)/2
-
接收窗口的大小为(MAX_SEQ+1)/2
6.面向连接的运输:TCP (connection-oriented transport:TCP)
- TCP是点到点的,一个发送方对应一个接收方的连接
- TCP提供的是可靠的,有序的比特流
- TCP是流水线式的运输,由TCP拥塞控制和流量控制来决定窗口的大小
- TCP提供的是全双工(full-duplex)服务,在同一个连接中数据双向流动
- 最大报文段长度(Maximum segment size MSS)
- TCP是面向连接的,建立连接的过程要经历三次握手
- TCP有流量控制的功能
1.TCP报文段结构
-
TCP的首部有20个字节
-
有源端口号和目的端口号
-
有32位的序号字段和确认号字段,用来实现可靠数据传输
-
有4比特的头部长度字段,16比特的接收窗口字段
-
有6比特的标志字段,RST代表reset,SYN代表建立连接,FIN代表释放连接
-
有16位的检验和字段
-
sequence numbers
是报文段首字节的字节流编号
-
acknowledge number
主机A填充到报文段的确认号是主机A期望从主机B接收到的下一字节的确认号(next byte expected from other side)
采用累积确认
2.可靠数据传输(Reliable data transfer)
-
TCP重传事件由两个事件引起:
1.超时事件
2.冗余acks
-
TCP快速重传
-
一旦收到3个冗余ACKs,就立刻启动快速重传
2.估计往返时间(Timer RTT)
- 需要设置超时重传机制的时间,如果时间过长,就会减慢丢包的响应,如果时间过短,就会产生不必要的重传
- 报文段的样本RTT(SampleRTT)就是从某报文被发出到对该报文的确认被收到之间的时间量
- EstimatedRTT=(1-$$\alpha$$)*EstimatedRTT+$$\alpha$$ *SampleRTT
- 这种平均方式称为指数加权移动平均
-
\[\alpha$$一般取0.125 \]
-
\[\beta$$一般取0.25 \]
3.TCP连接建立
- 采用三次握手建立连接
- 一方被动地等待一个进来的连接请求
- 另一方通过发送连接请求,设置一些参数
- 服务器回发确认应答
- 应答到达请求方,请求方最后确认,连接建立
- 三次握手:
- SYN=1,ACK=0
- SYN=1,ACK=1
- SYN=0,ACK=1
4.TCP连接释放
- 任何一方在没有数据要发送的时候,都可以发送一个FIN置位了的TCP字段
- 当FIN被确认时,该方向上的连接被关闭
- 当双向连接都关闭时,连接释放
5.TCP流量控制(flow control)
- TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制
- 接收窗口(rwnd)根据缓存可用空间的数量来设置
- rwnd<=RcvBuffer
7.拥塞控制原理(Principles of congestion control)
1.拥塞控制方法
- 端到端拥塞控制
- 网络辅助的拥塞控制
8.TCP拥塞控制(TCP congestion control)
1.慢启动(slow start)
- 当连接开始时,拥塞窗口以指数形式增长,直到遇见第一个丢失事件
- 当产生超时后,会重新把拥塞窗口设置为1MSS
- 当拥塞窗口超过阈值时,变为线性增长
2.拥塞避免
- cwnd是上次遇到拥塞时的一半,之后每次发送只加1
3.快速恢复
- 当产生拥塞时,拥塞窗口不设置为1,而变为产生阈值加3MSS