TCP和UDP的区别
- TCP是面向链接 的协议,而UDP是无连接的协议;
- TCP协议的传输是可靠的,而UDP协议的传输"尽力而为";TCP的可靠性 --- 确认,重传,排序,流控。
- TCP协议可以实现流控,而UDP不行;
- TCP可以分段,而UDP不行;
- TCP消耗资源较大,传输效率较低;UDP耗费资源较小,速度快。
TCP和UDP的使用场景:
TCP协议更适用于对可靠性要求较高,但是对传输效率和资源占用要求较低的场景;
UDP更 适用于对传输效率要求较高,可靠性要求较低的场景(即时类通讯)。

什么是面向链接?
在正式传输数据之前,先适用预先的协议,建立点到点的链接。
TCP建立的连接实际建立了一个双向的会话连接,即通讯双方都可以向对方发送数据
什么是面向无连接?
是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线 路上,由系统自主选定路线进行传输。邮政系统是一个无连接的模式,天罗地网式的选择路线,天女散花式的传播 形式;IP、UDP协议就是一种无连接协议
为什么握手是三次,挥手是四次?
握手时与数据无关,数据通道还没建立好,不存在数据传输问题,所以可以同时发;
但挥手与数据传输有关,需要考虑数据是否发完,数据不一定同时发完,断开时间也不一定一致。(四次挥手实际上可能只有三次,甚至两次、一次,三次是同时发完;但三次握手一定标准)
注:通道断开只是无法传输数据,但是可以交流。
接下来我们来看看TCP的头部信息:
TCP头部信息

源端口号(16位)、目的端口号(16位)---2个字节:
计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信
序号(32位)---4个字节:
来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则 TCP 用顺序号对每个字节进行计数。序号是 32bit 的无符号数,**序号到达 (2^32) - 1 后又从 0 开始。**当建立一个新的连接时, SYN 标志变 1 ,顺序号字段包含由这个主机选择的该连接的初始顺序号 ISN ( Initial Sequence Number )进行一个排序的作用,因为它的数据具有分段功能 所以需要由排序,保持原有的顺序
确认序号(32位)---4个字节:
包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节序号加 1 。只有 ACK 标志为 1 时确认序号字段才有效
数据: 数据,不定长度,为上层协议封装好的数据
选项: 可选项,可有可无,一般是空的,根据需要添加
**首部长度(4位):**标识头部,可变长头部,因为头部长度(TCP整个头部)不固定,头部长度最短20个字节**保留(6位):**保留区域,6位,保留给将来使用,目前必须置为 0
URG :紧急标记位 ,为 1 表示紧急指针有效,为 0 则忽略紧急指针值,配合紧急指针使用
ACK :为1时,确认号有效,为0时,则无效
PSH :为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满
RST :用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题
SYN :同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步
FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流窗口大小(16位):
此字段用来进行流量控制,主要用于解决流控拥塞的问题。单位为字节数,这个值是本机期望一次接收的字节数。
**紧急指针(16位):**它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号
校验和(16位):
对整个的 TCP 报文段(包括 TCP 头部和 TCP 数据),以 16 位字进行计算所得。这是一个强制性的字段,要求由发送端计算和存储,并由接收端进行验证
确认数据的完整性,这里的是伪头部检验,会校验网络层中12个子节的内容----32位源ip,32位目标ip,8位保留 (都是置0),8位的协议,16位总长度。
TCP头部长度最短20个字节
TCP的校验和 称 伪头部校验( 确保数据完整性):除了校验传输层头部和数据内容外,还会将网络层头部中的一部分内容一起进行校验。
UDP头部信息

作为传输层,必须把端口号先给封装进去,完成本职任务
16位UDP长度是总长度(包括数据部分)
16位UDP校验和,也是伪头部校验
UDP头部长度固定8个字节
TCP和UDP的使用场景:

TCP协议更适用于对可靠性要求较高,但是对传输效率和资源占用要求较低的场景;UDP更适用于对传输效率要求较高,可靠性要求较低的场景(即时类通讯)。