TCP/UDP

OSI七层模型

网络互联通信的一种规范的模型,一共七层,每层上下之间都是相互屏蔽不互通的。

TCP/UDP

TCP/UDP

TCP/UDP

TCP/UDP

TCP/UDP

UDP

  1. UDP只是在IP协议数据报的基础上增加了一点差错检测,复用的功能,所以功能很有限,实际应用也很有限
  2. UDP是无连接的,接收方并不会阻塞等待接收
  3. UDP不可靠,数据包可能会丢失或者出错
  4. 相比较TCP更快速,但是不稳定,比如在视频等场合,允许数据丢失,但是要求速度快
  5. UDP支持一对一,一对多,多对多等通信方式

TCP

  1. TCP是面向连接的,在进行TCP传输之前会进行三次握手确保数据可靠
  2. 同样,结束的时候也会进行四次挥手,确保传输结束,交换机是双全工通信
  3. TCP是点到点的通信

套接字=IP地址+端口号

用滑动窗口进行流量控制——保证数据可靠

  1. 为了不至于每一个数据都要发送一句应答影响效率,所以可以多个数据统一返回一个应答
  2. 发送者每收到一个应答,后沿就可以向前移动指定的字节。此时若窗口大小仍然没变,前沿也可以向前移动指定字节。当p2和前沿重合时,发送者必须等待确认应答。
  3. 接收者收到的字节会存入接收窗口,接收者会对已经正确接收的有序字节进行累计确认,发送完确认应答后,接收窗口就可以向前移动指定字节。如果某些字节并未按序收到,接收者只会确认最后一个有序的字节,从而乱序的字节就会被重新发送。
TCP/UDPTCP/UDP

拥塞控制——保证数据可靠

慢开始算法 拥塞避免算法:

  1. 发送方维护一个发送窗口而且会动态变化。发送方还维护一个慢开始门限。 发送窗口 < 慢开始门限:使用慢开始算法 发送窗口 > 慢开始门限:使用拥塞避免算法 发送窗口 = 慢开始门限:使用慢开始算法或拥塞避免算法
  2. 开始1,2,4,只要不阻塞就*2,一直到发送窗口>慢开始门限改用拥塞避免算法
  3. 拥塞避免算法,每次收到确认应答后都将发送窗口+1
  4. 如果遇到超时重传的情况,此时:AIMD:a)慢开始门限设为当前发送窗口的一半; b)发送窗口设为1; c)启用拥塞避免算法; 

快重传算法 快恢复算法:

  1. 快重传原理:因为TCP具有累计确认的能力,因此接收者收到一个分组的时候不会立即发出应答,可能需要等待收到多个分组之后再同一发出累计确认。但快重传算法就要求,接收者如果接收到一个乱序的分组的话,就必须立即发出前一个正确分组的确认应答,这样能让发送者尽早地知道有一个分组可能丢失。
  2. 快恢复原理:当发送者收到同一个分组的三个确认应答后,就基本可以判断这个分组已经丢失了;这时候无需等待超时,直接执行上述三部

三次握手

TCP/UDP

  1. 客户端和服务端打开连接,服务端进入监听模式Listen
  2. 客户端向服务端发送消息,SYN=1,ACK=0,seq=x(本次服务开始的初始序号),进入SYN-SENT
  3. 服务端接收到消息,向客户端发送SYN=1,ACK=1,seq=y(服务端初始序号),ack=x+1(表示希望客户端下一个从x+1开始发送),进入SYN-RCVD
  4. 客户端接受到回执,向服务端再发送SYN=1,ACK=1,seq=x+1(开始发送x+1),ack=y+1(希望对方下一个发送y+1),进入完成状态
  5. 服务端收到消息也进入完成状态

四次挥手

TCP/UDP

  1. 客户端先进入关闭状态,发送请求FIN=1,ACK=0,seq=u(u-1是最后发送给服务端的序号),状态变为FIN-WAIT1
  2. 服务端接收到请求,通知响应的服务即将关闭,也进入关闭状态,发送FIN=0,ACK=1,seq=w(服务端向客户端发送的最后一个序号),ack=u+1,进入CLOSE-WAIT状态等待其他服务的关闭
  3. 其他服务关闭后,且客户端没有重发请求,服务端再次发送一条,FIN=1,ACK=1,seq=v,ack=u+1,进入LAST-ACK状态
  4. 客户端接受到消息之后,会发送一条消息FIN=0,ACK=1,seq=u+1,ack=v+1表示确认关闭,之后经过一段时间再关闭,因为如果直接关闭,最后这条消息没被服务端接收到,服务端会以为出了问题重发,但是客户端已经关闭,服务端就不能正常关闭了。