TCP 与 UDP 笔记整理

关于 TCP 的某些详细内容,可以参阅:TCP 笔记整理


对于 TCP 或者 UDP,需要跨越不同主机,并将数据传递到不同的进程(即应用程序)。实现主机的跨越是基于 IP,而识别进程是基于端口号。
在这里插入图片描述

1. 连接性

在网络层,无连接服务可能意味着属于同一报文的不同数据报有不同路径。
在传输层,我们不关心分组的物理路径(假设两个传输层之间有一条逻辑连接)。传输层的无连接服务意味着分组之间的独立;面向连接服务意味着依赖。

在无连接服务中,应用程序需要将报文分成传输层可接受大小的数据块,并把他们一个一个地传递到传输层。传输层每一个数据块看作彼此没有关系的单元。当一个块从应用层到达时,传输层将其封装在分组中并发送。由于分组之间没有联系,可能会失序到达接收端。

UDP 提供无连接服务,这就表示 UDP 发送出去的每一个用户数据报(即 UDP 的分组)都是一个独立的数据报,没有关系。此外,不像 TCP 协议那样存在逻辑连接,因此每一个用户数据报可以沿不同的路径传递。

无连接的一个结果就是无法发送数据流,并期望将这个数据流分割成许多不同的相关联的用户数据报。相反,每一个请求必须足够小,使其能够装入用户数据报中,只有那些发送短报文的进程才应当使用 UDP。

在面向连接服务中,两端首先需要建立逻辑连接(非物理连接)。只有连接建立才能进行数据交换,在数据交换之后,连接需要拆除。在传输层,面向连接服务仅仅涉及端到端,而在网络层面向连接意味着两个终端主机以及这之间的所有路由器都进行协调。这就意味着在传输层建立面向连接协议,其下的网络层可以是无连接协议,也可以面向连接协议。基于面向连接可以实现流量控制、差错控制、拥塞控制。

2. 字节流与报文

UDP 是面向报文的,发送方的 UDP 对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层,也就是说无论应用层交给 UDP 多长的报文,它统统发送,一次发送一个,若报文太长,则IP层需要分片,降低效率;若太短,会使IP数据报太小。而对接收方,接到后去除首部直接交给上层应用。

TCP 是面向字节流的协议,这就是说,从应用程序到 TCP 的数据被表示成一串字节流,数据的每一个字节在流中都占有一个位置。TCP 可以对数据进行分段,发送多次(其实现原理是基于缓冲),也可以等数据累积之后组成一个报文段发送。

(流,从字面意思,包含着顺序的含义。面向字节流,则意味着存在逻辑上的连接,就如果 “管道”,在连接中按照顺序流动,对上层来说,就像一个不间断的数据流。)

3. 使用场景

什么时候应该使用 TCP ?

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

什么时候应该使用 UDP ?

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。如视频通讯等。

在这里插入图片描述

参考文章

1、《计算机网络:自顶向下方法》(第六版)
2、https://lrh1993.gitbooks.io/android_interview_guide/content/computer-networks/tcpip.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值