本系列的内容主要是介绍HTTP,但是也不局限于HTTP,之前的文章中已经介绍了HTTP是作为应用层的协议,是处于传输层基础之上的,传输层广为人知的协议有两个一个是TCP,另一个则是UDP。本节内容主要介绍一下传输层的协议,如果之前内容忘记了的同学可以通过下面链接回顾
春眠不觉晓 HTTP知多少(2) | 青训营笔记 - 掘金 (juejin.cn)
TCP和UDP的区别是什么?
首先我们从问题入手,这个也是面试过程中经常遇到的问题:请你简单描述一下TCP和UDP的区别?比较官方的回答我贴在这里大家可以检查一下自己的掌握情况:
- TCP提供的是面向连接的、可靠的数据流传输;UDP提供的是非面向连接的、不可靠的数据流传输。
- TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失、不重复,按序到达;UDP尽最大努力交付,即不保证可靠交付。
- TCP面向字节流;UDP面向报文。
- TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
- TCP对系统资源要求较多,UDP对系统资源要求较少。TCP首部有20字节;UDP的首部只有8个字节。
- TCP的逻辑通信信道是全双工的可靠信道;UDP的逻辑通信信道是不可靠信道。
- TCP有拥塞控制机制,UDP没有
从问题中我们开始今天的分享。
TCP简介
TCP是传输层的协议,他被人们熟知,是因为它可以保证数据的不丢,不重,这其中的原因就需要我们从TCP的数据包作为切入点分析,以下图片是TCP包的结构图:
结构以源端口和目标端口开始,这和UDP没有明显的区别,因为通过端口才能够知道发送给哪一个应用层处理。如果和UDP的包结构进行比较就会发现,TCP结构复杂了很多,其中还包括序号、确认序号、状态位、窗口大小等。
首先我们来看状态位,常见的几种状态位有:SYN表示发送一个连接、ACK表示回复消息、RSET表示重新连接、FIN表示结束连接等等,其中SYN、ACK和FIN在三次握手和四次回收的过程中相信大家都知道。 第二个我们来看一下序号和确认序号,TCP中序号存在意义非常重要,因为它可以帮助我们知道是否发生了丢包和超时的情况。第三个是窗口大小,它的存在让TCP拥有了流量控制和阻塞控制的能力。