个人对TCP与UDP的理解

在了解TCP和UDP之前,我们需要知道什么是IP什么是端口

IP :相当于电脑的身份证,是唯一的

ip地址的类别:
在这里插入图片描述

端口: 相当于电脑上运行中的程序,需要使用端口来标记(端口号不是随意使用的,而是按照一定的规定进行分配)
知名端口:
知名端口是众所周知的端口号,范围从0到1023 21端口分配给FTP服务
22端口分配给SSH服务
80端口分配给HTTP服务
动态端口:
动态端口的范围是从1024到65535,所谓动态动态端口,就是因为它一般不固定分配某种服务,而是动态分配
UPD:

UDP协议全称是用户数据报协议
特点:
1.面向无连接
不需要三次握手,想发数据就发,就像搬运工一样,不会对数据报进行任何拆分与拼接操作。
具体来说就是:

  • 在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个UDP头标识下是UDP协议,然后就传递给网络层了
  • 在接收端,网络层将数据传递给传输层,UDP只去除IP报文头就传递给应用层,不会任何操作

2.有单播,多播,广播的功能
UDP不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说UDP提供了单播,多播,广播的功能。
3.UDP是面向报文的
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应层交下来的报文,既不合并也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文
4.不可靠性
首先不可靠性体现在无连接上通信都不需要建立连接,想发就发,当网络环境不好由于没有拥塞控制及可能会出现丢包的情况,所以说不可靠。
并且收到什么数据就传递什么数据,并且也不会备份数据,还没有应答机制,不会确定对方是否已经正确收到数据。
5.传输数据报文时很高效
高效的原因其实就是头部开销小。
UDP头部包括了以下几个数据:

  • 两个十六位的端口号,分别为源开口和目标端口
  • 整个数据报文的长度
  • 整个数据报文的检验,该字段用于字段用于发现头部信息和数据中的错误

因此UDP的头部开销小,只有八字节,相比TCP的至少二十字节少的多,在传输数据报时很是高效!

TCP:

TCP协议全称是传输控制协议
特点:

  • 面向连接
    面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接,是为数据的可靠打下了基础。
  • 仅支持单播传播
    每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。
  • 面向字节流
    TCP不像UDP一样那样一个个报文独立的传输,而是在不保留报文边界得情况下以字节流方式进行传输
  • 仅支持单播传输
    每条TCP传输连接只能有两个端点,只能进行点对点得数据传输,不支持多播和广播传输方式。
  • 面向字节流
    TCP不像UDP那样一个个报文独立得传输,而是在不保留保温边界得情况下以字节流方式进行传输
  • 可靠性传输
    由于TCP拥有应答机制,如果接收方如果没收到数据和,TCP会判断是否丢包如果丢包得话会进行重传
  • 拥有拥塞控制
    当网络出现拥塞得时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
  • TCP提供全双工通信
    TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都没有缓存用来临时存放双向通信的数据。

TCP和UDP的比较

TCPUDP
面向连接无连接
可靠传输,使用流量控制和拥塞控制不可靠传输,不使用流量控制和拥塞控制
只能是一对一通信支持一对一,一对多,多对一和多对多交互通信
面向字节流面向报文
首部最小20字节,最大60字节(慢但稳)首部开销小,仅8字节(快却危)
TCP的三次握手四次挥手

三次握手示意图
在这里插入图片描述
为什么TCP相比UDP来说稳定,其原因就是TCP有着三次握手的机制,为什么会叫做三次握手呢?
其实就是在接收,发送之前,双方需要建立一个虚拟的通道,这个过程称之为3次握手。
三次握手流程:

  1. 第一次握手:客户端发送syn包(syn=x)的数据包到服务器,并进入发送(SYN_SEND)状态,等待服务器确认。
  2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入接收数据(SYN_RECV)状态(ACK是对接收数据的确认,SYN表示要向客户端发送的数据)。
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入正式成立(ESTABLISHED)状态,双方确认后建立通道,三次握手成功。

过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

四次挥手示意图
在这里插入图片描述
有合就有散,那为散的时候是四次握手呢,首先四次握手也称作连接终止协议
由于TCP连接是全双工的,因此每个放向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  1. 第一次挥手:主动关闭方发送一个FIN,用来关闭主动发到被动方的数据传送,也就是主动关闭告诉被动方:我已经不会再给你发数据了(当然,在FIN包之前发送出去出去的数据,如果没有收到对应的ack确认报文,主动关闭放依然会重发这些数据),但是,此时主动关闭方还可以接收数据
  2. 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号, SYN 和 FIN 都有seq(序列)序号)。
  3. 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发送数据了
  4. 第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,走到这一步也就代表四次挥手成功

如有那里不满还请大佬们键盘留情

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北风^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值