TCP\UDP

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态。用这样的数据结构来保证所谓的面向连接的特性

TCP:
  无差错
  不丢失
  不重复
  按顺序到达
UDP(IP):
  不保证不丢失
  不保证按顺序到达

 TCP特点

  

1、提供可靠交付。通过TCP连接传输的数据,无差错、不丢失、不重复、并且按照顺序到达。我们都知道IP包
是没有任何可靠性保证的,一旦发出去,结果未知。但是TCP号称能做到那个连接维护的程序做的事情。
2、面向字节流的。发送的时候发的是一个流,没头没尾。IP包可不是一个流。而是一个个的IP包.
之所以变成了流,这也是TCP自己的状态维护做的事情。
3、可以拥塞控制的。它意识到包丢弃了或者网络环境不好了,就会根据情况调整自己的行为,看看是不是发快了,
要不要发慢点
4、有状态服务,会记录发送的状态    
5、流量控制
滑动窗口:标识当前能够处理的能力

 


 

 


SYN 发起一个连接
ACK    回复
FIN 结束连接
TCP是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更

 

 

 

 






UDP(IP)

1、继承了IP包的特性,不保证不丢失,不保证按顺序到达
2、面向数据报,一个一个地发,一个一个地收
3、不会拥塞控制,不管网络情况只要有要发的包,就发出去
4、无状态服务
包头:源端口号(16位) 目的端口号(16位) UDP长度(16位) UDP校验和(16位) 数据
使用场景:
-    需要资源少,在网络情况较好的内网,或者对于丢包不敏感的应用
-    不需要一对一沟通,建立连接,而不是可以广播的应用
-    需要处理速度快,时延低,可以容忍少数丢包,即便网络拥塞,也会继续发包

 

 




TCP是如何实现(有序,可靠)?

  1. 有序

在建立连接时,为了保证顺序,每一个包都有一个ID。在建立连接时,会商定起始ID是什么,然后
按照ID一个个发送。为了保证不丢包,对于发送的包都要进行应答,但是这个应答也不是一个一个的,而是会应答
某个之前的ID,表示都收到了,这种模式成为 累计确认或者累计应答

为了记录所有发送的饱和接受的包,TCP也需要发送端和接收端分别都有缓存来记录。发送端的缓存里是按照包的
ID一个个排列,根据处理的情况分成四个部分。
发送端:
- 发送且已经确认的,这部分就是你交代属下的,并且也做完了的,应该划掉
- 发送了并且尚未确认的,等待确认之后划掉
- 没有发送,等待发送的
- 没有发送,并且暂时不会发送的 (滑动窗口:流量控制)

接收端:
- 接收并且确认过的
- 还没接收,但是马上就能接收的,也即是自己能够接收的最大流量
- 还没接收,也没法接收的





posted @ 2020-06-29 12:50  慕沁  阅读(157)  评论(0)    收藏  举报