TCP与UDP协议

2019-03-28  本文已影响0人  做梦枯岛醒

1.对TCP与UDP的认知

TCP和UDP虽同作为OSI的传输层协议,但应用场景却不同(感觉是句废话),综合来看,TCP得益于可靠的传输机制,多应用于不允许丢包的场景,而UDP多用于视频等允许丢包的环境下。

首先要解决一个重要的问题,那就是TCP/IP和UDP什么关系?

说起这个来,很多人以为TCP/IP就是TCP和IP的组合的名称,但其实TCP/IP协议是一个协议簇,里面包括很多协议的,UDP只是其中的一个(可能是当时TCP表现优异,然后UDP灰溜溜顿角落去了,哈哈哈),所以以后不要在这里闹了笑话。TCP/IP可以分为四层,分别是 网络接口层(也称链路层,可以理解为OSI物理层和数据链路层的结合),网络层,传输层,应用层,所以理解TCP/IP协议也就同时理解了好多内容。

1.1 TCP的特点

对于TCP,抓住一个重点就是可靠传输。
对于可靠传输,我们就要建立端到端面向连接的数据通路,要可靠,就要做到数据 无差错,不丢失,不重复,有序,同时TCP是面向字节流的。

我们联想一个下载文件的场景,下载文件过程绝不允许丢包,同时文件的字节流数据块一定要按照顺序来排列,否则文件就会产生错误,假如说发送端发送文件资源过快,接收端处理不过来,就会产生TCP拥塞控制,假如说传输过程中发生了丢包,接收端没收到就会通知发送端重发(重传机制

1.2 UDP的特点

对于UDP,我们就应该想到非可靠传输。
对于非可靠传输,我们就不需要建立端对端的链接,只需要填好IP扔出去即可,类似于一个快递,最终对方能不能收到,这得看运输车有没有在高速上着火啦。UDP是尽最大努力交付,可能有丢失,UDP是面向报文的,报文可能无序。(注意:UDP报文不可分割,而TCP会去除首部)

我们想象一个视频电话的场景,视频过程中允许卡顿,并且没有拥塞控制,并且没有重传机制,你想如果有了这些功能的话,你的视频电话会变成啥样子?

2. 报文结构

要了解TCP与UDP相关“几洗”,必须要了解他们的报文结构,其中UDP的报文结构比较简单,TCP的报文结构比较复杂。

2.1 UDP报文

上图是UDP的报文结构,UDP首部是8个字节,分为4个段,每段2个字节(16bit)。
首先0-15 是 源端口号
16- 31 是目标端口号
下面是UDP长度:包括首部和数据,最小就是没数据的时候的8byte
最后是UDP校验和:可选字段,想校验的话,就填入校验和,不想校验就填0。

2.2 TCP报文

看这个图,就会觉得TCP复杂的多,这也是由于它的各种特殊功能决定的。

首先可以看到TCP首部是 20 字节的固定首部 + 长度可变的部分组成+填充

  1. 首先 是 源端口目标端口 各占两个字节
  2. 第二行是序号(seq),序号占了4个字节,也就是32位,那么很显然序号的范围是0到2的32次方-1,序号这个东西对应的功能是顺序传送,接收端收到会按照序号来排列分段,序号最多可以对4GB的数据编号,当序号到达最大值的时候,会置0,这不会影响新的一轮编号的。
  3. 第三行是确认号(ack),占4字节,是期望收到对方下一个报文段的第一个数据字节的序号,若确认号是N,则表明:到序号N-1为止的所有数据都已正确收到。
  4. 数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。【这么高深?说白了就说TCP首部有多长呗,再说白了就是 20 + 长度可变 + 填充 = ?】
  5. 保留? 保留就是现在没啥用,以后可能有用吧,但也可能永远都没有,替这个字段心塞。
  6. 下面是几个标志,各自有各自的功能
  1. 窗口,占2个字节,窗口指的是发送本报文段的一方的接收窗口,不是自己的发送窗口,告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接受方让发送方设置其发送窗口的依据。

  2. 校验和,占2字节。校验和字段检验的范围包括首部和数据这两部分。

  3. 紧急指针,刚才提过,它指出本报文段中的紧急数据的字节数。

  4. 选项:长度可变,最长可达40字节,当没有选项时,TCP的首部长度是20字节。

  5. 填充,补齐位,保证每行32位

3. TCP 技术

3.1 TCP三次握手与四次挥手

上一篇 下一篇

猜你喜欢

热点阅读