TCP与UDP~第二式

# TCP与UDP

一,分析TCP与UDP报文

TCP与UDP都是位于OSI模型传输层的两个协议

(1)UDP的报文头:

如上图:UDP基本组成包括16位的源端口号和目的端口号+数据

通过源端口号和目的端口号来进行传输;数据部分为保存的具体内容

UDP的特点:

              1,沟通简单,不需要处理逻辑、和数据结构;

              2,不会建立连接,但是会监听这个地方,谁的数据都接收,也会传输数据给别人;

              3,二愣子,传输完数据不管是否丢包,是否会拥塞;

基于UDP实现例子

①直播,直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议。

②实时的游戏,游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响。

③物联网。一方面,物联网领域中断资源少,很可能知识个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的。

(2)TCP报文头

网络传输层中,TCP是面向连接、可靠的、字节流传输。

TCP协议通信双方必须先建立连接,通信双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP是全双工的,即双方的数据读写可通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。

TCP协议的这种连接是一对一的,它的字节流服务是多对多的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用TCP服务。而无连接的UDP则十分适合这种广播和多播。


 

 从上往下看报文结构,分析如下:

首先,可以看到16位源端口和目标端口号。和UDP一样

包的序号:解决乱序问题,先来后到

32位确认号(acknowledgement number):用作对另一方发送来的TCP报文段的响应。其值是收到的TCP报文段的序号值加1。

6位标志位作用如下:

URG标志:表示紧急指针(urgent pointer)是否有效。

ACK标志:表示确认号是否有效。我们称携带ACK标识的TCP报文段为确认报文段。

PSH标志:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收

到的数据读走,它们就会一直停留在TCP接收缓冲区中)。

RST标志:表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段。

SYN标志:表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段。

FIN标志:表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。

状态位,SYN是发起一个链接,ACK是回复,RST是重新连接,FIN是结束连接。

因为TCP是面向连接的,因此需要双方维护连接的状态,不然双方连接状态的变化会直接导致出错;

窗口的大小设置,进行流量控制,标识自己当前的处理能力;它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

其次,TCP 的顺序问题,丢包问题,流量控制都是通过滑动窗口来解决的

拥塞控制时也是通过拥塞窗口来解决的。

延伸常谈的一些问题:顺序问题、拥塞控制、丢包问题、连接维护、流量控制

二,TCP 的三次握手

首先建立连接,连接后需要连接维护,同时商量如何顺序发送包,也就是处理好包的序号问题

TCP 的建立连接称为三次握手,简单来说就是邻居之间日常问候,①老张对老李说;吃饭了不;②老李看到老张消息,回复说:吃了没吃饱啊,还要整点夜宵不;③老张收到老李消息:可以啊,走起。

理解来说就是,老张发送了吃饭请求也收到了老力吃了的响应,老李收到了老张请求消息并响应了老张的请求。双方有来有回,和打太极一样。

详解分析具体过程

 分析图中的具体字段意思:closed(未连接)、listen(监听)、SYN-SENT(同步发送)、SYN-RCVD(同步收到)、ESTABLISHED(建立连接)

分析过程:

①初始状态,客户端和服务器都处于 CLOSED 状态,然后这时服务端主动监听某个端口,处于 LISTEN 状态。

②客户端主动发起连接 SYN(请求建立连接),之后处于 SYN-SENT 状态,被服务器端监听到。

③服务端接收了客户端发起的连接,并返回 SYN(请求建立连接),并且 ACK ( 确认 ) 客户端的 SYN,然后处于 SYN-SENT 状态。

④客户端接收到服务端发送的 SYN 和 ACK ,确认了服务端的请求即ACK了,进入了ESTABLISHED状态。然后将它确认连接的消息发送给了服务器。

⑤服务器收到了客户端的ACK,也进入ESTABLISHED状态。至此这两兄弟建立友谊连接;

四,TCP与UDP的区别

  • TCP 是面向连接的,UDP 是面向无连接的
  • UDP程序结构较简单,TCP程序结
  • TCP 是面向字节流的,UDP 是基于数据报的
  • TCP 保证数据正确性,UDP 可能丢包
  • TCP 保证数据顺序,UDP 不保证

五,为什么说TCP可以实现可靠连接

  (1) 排好队,一个一个来,按部就班的进行,有条不紊; TCP 报文头里面的序号能使 TCP 的数  据按序到达,从而使传输的数据无差错的,不丢失,不重复,且按顺序到达。

(2)谁迟到,谁没来,都要明确;报文头里面的确认序号能保证不丢包,累计确认及超时重传机制

(3)饭量时时管控好,不然肉肉来找抱;报文头的窗口大小,进行流量控制,标识自己当前的处理能力;它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

各位道友学习之后有建议可以共同探讨探讨哦

一步两步往上冲~

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值