多路分解和多路复用
多路分解:将运输层报文段中的数据交付到正确的套接字。
多路复用:在原主机中,从不同的套接字收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传输到网络层。
滑动窗口机制
- N表示滑动窗口长度
- base表示最早的未确认分组序号
- nextSeqNum表示最小未使用的序号
回退N步
- 允许发送方发送多个分组而不必等待确认
- 采用累积确认,若接收方接收到序号为n的分组,表示包括n之前的分组都接收到了且其ACK也发送了
- 若有分组丢失,则后面传来的分组就会被接收方丢弃且发送最后发送ACK的那个分组的ACK
- 接收方收到丢失分组,然后重传所有发送的但未收到确认的分组。
选择重传
- 接收方接收所有分组而不管其是否有序(是否有分组丢失)
- 有序:正常交付并发送ACK
- 乱序:缓存并发送乱序分组ACK
- 直到丢失分组收到后将一批分组按序交付
流量控制
流量控制就是让发送速率不能太快,要让接收方来得及接收,即滑动窗口机制,是点到点的通信量控制,而发送方若因网络的拥塞而被遏制称为拥塞控制。
发送方和接收方都维护一个接收窗口,接收方有个接收缓存,接收方进程从其接收缓存中读取信息,则
发送方能发送的数据大小 <= 接收方缓存大小 - (进入缓存数据大小 - 应用进程从缓存中读取出的数据大小)
而UDP不提供流量控制,若进程从接收缓存中读取数据的速度较慢,则缓存会溢出,因此会造成报文段丢失。
拥塞控制
目的:防止网络拥塞而控制发送速率, 是全局性过程
方法
慢启动、拥塞避免、快重传、快恢复
发送方维护一个拥塞窗口的变量,拥塞窗口的大小取决于网络的拥塞程度并动态变化,发送方让发送窗口等于拥塞窗口。
- 先将拥塞窗口设置为一个最大报文段的长度MSS,即拥塞窗口的值以1个MSS开始
- 收到一个确认后将拥塞窗口大小增加1个MSS,因为拥塞窗口是最小的1MSS,因此叫做慢启动,而在慢启动阶段,发送速率以指数增长。
- 当拥塞窗口的值=预先设置的阈值时,结束慢启动过程,进入拥塞避免过程(加性增乘性减),即每次拥塞窗口值+1MSS
- 拥塞避免结束条件:
- 超时:进入慢启动,将拥塞窗口设置为1个MSS
- 丢包:收到3个相同(冗余)ACK(快重传:接收方收到3个冗余ACK就立即重传丢失的报文段),将预先设置的阈值=拥塞窗口/2,进入快速恢复阶段。
- 快速恢复:拥塞窗口=阈值/2,进入拥塞避免;
TCP
- 多路分解和多路复用
- 面向连接(3次握手建立连接,4次挥手断开连接)
- 可进行流量控制,拥塞控制,按序交付。
- 点到点,全双工,可靠信道。
- 一般用于文件传输(HTTP,FTP,SMTP)
UDP
- 多路分解和多路复用以
- 差错检测(无查错恢复能力)
- 多对多,一对多或者多对一信道
- 一般用于即是通信如在线聊天、视频会议、语音电话(DNS).
TCP三次握手
- 客户端发送连接建立的请求SYN和待发送数据的序列号seq=x;
- 服务器端也发送连接建立的请求SYN和待发送的数据序列号seq=y,同时响应客户端的请求,即回复ACK=x+1,即客户端上一次的seq+1;
- 客户端响应服务器端的请求回复ACK=y+1;
以上就是过程,注意只有请求建立连接的阶段才会发送SYN,即前两次握手阶段,只要对方发送数据即发送seq,则必须以ACK=seq+1作为响应。
TCP四次挥手
- 客户端下次没数据发送时这次便会发送请求中断连接的FIN,同时发送本次待发送数据的序列号seq=x+2和响应服务器端最后发送的数据ACK=y+1
- 服务器端响应客户端发送的数据回复ACK=x+3;
- 服务器端接收到客户端的FIN后便以FIN继续响应以关闭连接,同时发送未发送完的数据seq=y+1;
- 客户端收到服务器端的数据并响应ACK=y+2;
盗图一张说明: