概念:
UDP(User Datagram Protocol)用户数据报协议。
TCP(Transmission Control Protocol )传输控制协议。
UDP和TCP的区别
描述 | UDP | TCP |
---|---|---|
是否面向连接 | 无连接的 | 面向连接的 |
是否可靠 | 不可靠 | 可靠 |
是否包含拥塞控制 | 无拥塞控制 | 有拥塞控制 |
对系统资源要求 | 对系统资源要求较少 | 对系统资源要求较多 |
信道是否可靠 | 不可靠信道 | 全双工的可靠信道 |
适用 | 适合传输少量数据 | 适合传输大量数据 |
典型协议 | DNS协议 | HTTP协议 |
TCP的可靠数据传输
1、经完全可靠信道的可靠数据传输:rdt1.0
2、经具有比特差错信道的可靠数据传输:rdt2.0
自动重传请求(ARQ)协议,与另外三种协议处理比特差错
- 差错检测。检测是否出现比特差错。
- 接收方反馈。通过获取接收方的 “肯定确认(ACK)” 和 “否定确认(NAK)”。
- 重传。收到有差错的分组时,重传该分组。
rdt2.1:与rdt2.0的唯一不同是序号的处理方法不同。
rdt2.2:无NAK的可靠数据传输协议。
3、经具有比特差错的丢包信道的可靠数据传输:rdt3.0
为了检测丢包,引入了定时器,当超过定时器时间时,认为该包已经丢失,重传该包。
解决流水线可靠数据传输的两种基本方法:回退N步和选择重传。
1、回退N步(GBN)协议
概念:
基序号(base):最早的已发送,但未被确认的分组序号
下一个序号(nextseqnum):下一个待发分组的序号
窗口长度(N):允许已发送但未被确认分组的最大数目
[0,base-1]:已经发送并且被确认的分组
[base,nextseqnum-1]:已经发送单未被确认的分组
[nextseqnum,base+N-1]:即将被发送的分组
[base+N,…]:不能被使用的序号。
累计确认:如果分组k已接收并交付,则所有比k小的分组也已经交付。
在GBN协议中,接收方丢弃所有失序分组。
2、选择重传(SR)
让发送方仅重传那些怀疑在接收方出错的分组。
TCP的三次握手
第一次握手:客户端发送一个SYN报文段并携带一个初始序号(client_isn),之后客户端进入SYN_SENT状态
第二次握手:服务器收到SYN报文段后,为该TCP连接分配缓存和变量,发送一个SYNACK报文段,进入SYN_RCVD状态。该报文段中,SYN比特被置为1,确认号字段被置为client_isn+1,服务器选择自己的初始序号server_isn.
第三次握手:客户端收到SYN报文段后,客户端给连接分配缓存和变量。最后向服务器发送确认报文段。该报文段SYN比特被置为0,确认序号段为server_isn+1,序号段为client_isn+1;一段时间后,确认服务器收到确认报文段,进入ESTABLISHED状态。
TCP的四次挥手
第一次挥手:客户应用进程向服务器发送FIN报文段,表示要关闭连接,进入FIN_WAIT1状态。
第二次挥手:服务器接收到FIN报文段后,向发送方回送一个ACK确认报文段,进入CLOSE_WAIT状态。
第三次挥手:服务器将信息发送完毕后,向发送方发送FIN报文段,表示自己将关闭连接,进入LAST_ACK状态。
第四次挥手:客户发送ACK报文段,对服务器的FIN报文段进行确认。进入TIME_WAIT状态。