计算机网络系列——TCP和UDP解析

TCP和UDP详细解析

提示:本文为计算机网络系列


前言

本文只是学习笔记

一、TCP

1.TCP简介

TCP也叫传输控制协议,有如下几个特征:
面向连接的:TCP在传输数据时,是必须确定与传输目标是建立了稳定连接的。
可靠的:TCP的数据传输,会保证所传输的数据一定传输成功,如果没成功就会重传。
基于字节流:TCP所传输的数据是字节流形式的。

2.TCP结构详细解析

TCP传输是由TCP报文段构成,而TCP报文段由TCP报文段头+数据段两部分构成TCP报文段头部包含了准确传输TCP报文段数据的信息。

2.1TCP报文段头部

在这里插入图片描述
(1) 源端口号和目的端口号:均为16位端口号,分别表示来源端口和目的端口。ps:之所以是表示端口号是因为TCP服务的是进程,别忘了这是传输层。
(2) 序号(seq):32位,序号的作用是为了解决TCP报文段的数据段的最大报文长度问题,比如,当所需要发送的数据过大时,只得将数据分成许多报文段发送,而确保这些报文段能重新组合成完整的信息,就需要对其进行标号。报文段数据段是字节流的形式,序号对应的是字节流中的每一个字节(但是只会给报文段的数据段的字节流的第一个字节分配序号)。如下,假设一个500000字节的文件需要传输,MSS为1000字节,那么将分为500个报文段,根据序号对应的是字节,序号如下所示:
在这里插入图片描述
(3) 确认号(ack):作用是验证或者说是确认发送方的报文段,其值是发送方的TCP报文段的序号值+1,是期望从另一台主机接收到的下一字节的序号。
(4) 首部长度:4位,描述TCP头部最大能有多少字节,因为是四位所以是60字节(15个32bit)。
(5) 6位标志位:包含URG(表示紧急指针是否有效)、ACK(表示确认报文段是否有效,包含ack的报文段就叫确认报文段)、PSH、RST(要求重新建立连接,带RST的叫复位报文段)、SYN(表示要请求建立一个连接,携带SYN的报文段叫同步报文段)、FIN。

3.TCP可靠传输的保证

TCP传输的可靠性主要是靠以下几项技术保证:
(1).面向连接(三次握手和四次挥手)
(2).校验和
(3).序列号+确认应答
(4).超时重传
(5).流量控制
(6).拥塞控制

3.1三次握手和四次挥手

  • 三次握手:保证可靠的连接。1)发送端首先发送带有SYN标志的报文段给接收方请求连接。2)接收方接收到请求,回传带有SYN/ACK标志的数据包传递确认连接消息。3)最后发送方再回传给接收方带有ACK标志的报文段,表示握手成功,可以开始数据发送了。
  • 类比一下,1)发送方:喂,在吗?2)接收方:嗯,在的。3)好的,那我给你说个事哈。
  • 四次挥手:1)发送方发送一个FIN(6个标志位之一,表示告知对方要关闭连接了),用来告知要关闭连接了,同时停止向接收方发送数据。2)接收方收到FIN后,发送一个ACK给发送方,确认序号为收到序号+1,表明得到了FIN通知,但此时只是接收方得到了通知,可能还存在未完成的发生任务(双工),所以只是告知发送方得到了关闭消息。3)接收方发送一个FIN,告知发送方,接收方的任务已完成,结束数据发送。 4)发送方收到FIN后,发送方告知接收方彻底结束通信。图示如下:
  • 在这里插入图片描述
    类比一下:1)男:我对你无话可说了,不想给你说了。2)女:无话可说是吧?好,我再说几句。3)女:我说完了,我也不想和你说话了。4)男:好,那就拜拜了您嘞。

3.2校验和

校验和是一种计算方法,是一个端到端的校验,TCP校验和目的是为了发现TCP报文段的首部和数据段发生的改变,为了确定发送后接收到的数据是否正确。不单只是在TCP中才有这个,IP(实际上TCP被包含在IP中,TCP是IP的数据段)中也有使用校验和,IP的校验和计算方法和TCP的一样,只是计算覆盖范围不一样。

3.3 确认应答+序列号

上面提到过:seq+ack配合使用,接收方收到报文就会确认(累积确认:对所有按序接收的数据的确认)

3.4 超时重传

超时重传技术基于确认应答+序列号机制,当发送方发出报文段时会立即启动计时器进行计时,如果没有接收到接收方的ACK就会根据具体原因做出响应。而没接收到ACK的情况分为两种:(1)接收方没接收到报文段。(2)接收方虽然接收到了报文段,但是在发送ACK时ACK没有被发送方接收到。如果是第一种原因,发送方会立即重发报文段,接收到后返回ACK。如果是第二种原因,发送方重发的报文段会发现接收方已经存在,此时会丢弃报文段然后返回ACK。
注意:超时重传次数是有限制的,超过限制会强制关闭连接。

3.5 流量控制

基于滑动窗口。根据接收方的数据处理能力,决定发送端的速度,实际上流量控制是一个控制端对端传输速率的技术,是一个速率匹配技术。在TCP报文段的头部,有一个16位字段的窗口大小,发送方会根据ACK报文里的窗口大小的值改变发送速率。示例如下:
在这里插入图片描述

3.6 拥塞控制

拥塞控制是一项由多项技术实现的技术。包含慢开始(慢启动)拥塞避免快重传快恢复,四个阶段。
慢开始:从1字节大小开始,以指数方式增长拥塞窗口(cwnd)的大小,直到ssthresh,超过这个点就可以开始拥塞避免阶段。
拥塞避免:拥塞避免与慢开始一样,是拥塞窗口的增长阶段,当拥塞窗口大于ssthresh时开启拥塞窗口。不同的是拥塞避免算法是每次加一的线性方法增大拥塞窗口。
快重传技术:如果发送方连续收到三个ACK,那么会认定报文段丢失,会立即重传。
快恢复技术:这是在执行了快重传后立即执行的技术,立即将ssthresh提升到此时的拥塞窗口(cwnd)的一半。

二、UDP

1.UDP简介

UDP与TCP一样,都是第二次传输层的协议,面向的也是进程。但是UDP不保证传输的准确性,是一种尽最大努力的传输协议。

三、UDP和TCP的区别

1.连接:udp是无连接的,只要确定了发送地址,和端口号,他就会自顾自的发送,并不是先建立连接通道再开始发送。TCP是有连接的(三次握手、四次挥手)。
2.传输准确性:udp并不保证传输是否正确,所以没有超时重传、拥塞控制的技术。TCP是要保证传输的准确性的。
3.传输的面向对象:与前文提到的面向进程不(或者说这个是服务于进程)同,UDP面向的是报文,是不可以拆分的!TCP面向的是字节流,是可以拆分的(所以才会有seq这种东西)。
4.通信对象数量:udp并不是端到端的通信方式,是可以一对一、一对多、多对一、和多对多的交互通信。TCP是只能一对一的用于端到端的通信。
5.即时性:udp相对tcp来说开销更小,所以udp的通行效率远高于tcp,udp的即时性更高。更适合用于聊天软件等高实时性的通信方式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值