美文网首页
TCP与UDP协议

TCP与UDP协议

作者: 做梦枯岛醒 | 来源:发表于2019-03-28 19:37 被阅读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. 下面是几个标志,各自有各自的功能
    • URG(紧急位):URG = 1 表示紧急位指针字段有效(可以看到在下面一行,有一个紧急指针字段),他告诉系统,此报文中有紧急数据,需要尽快传送。紧急指针中放了一个数字x,标志着TCP报文段数据部分 0 ~ x 位是紧急数据。
    • ACK(确认位):ACK = 1时确认号有效,这也是我们所讲的TCP三次握手中,为什么ack填写了,还要填写ACK的原因了。
    • PSH(推送位):接收端接受到PSH = 1的报文,就尽快交给应用,而不必等到缓存满了才交付。
    • RST(复位位):RST = 1时,表明此次TCP链接发生了严重差错,需要释放链接,重新建立新的链接。
    • SYN (同步位) : 同步位这个字段在TCP三次握手中见到过,当 SYN = 1,ACK = 0时,表明是一个连接请求报文,对方若同意时,则应在响应的报文段中使SYN=1和ACK=1,这个可以参考三次握手分析图。
    • FIN (终止位) :用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。在四次挥手中有用到这个。
    1. 窗口,占2个字节,窗口指的是发送本报文段的一方的接收窗口,不是自己的发送窗口,告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接受方让发送方设置其发送窗口的依据。

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

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

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

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

    3. TCP 技术

    3.1 TCP三次握手与四次挥手

    相关文章

      网友评论

          本文标题:TCP与UDP协议

          本文链接:https://www.haomeiwen.com/subject/ajvzvqtx.html