=============
UDP(User Datagram Protocol: 用户数据报协议)是一个非常简单的协议
1. 数据报
数据报是应用层传输过来的完整的数据
UDP对于数据报:不拆分、不合并,直接封装传输。
2. UDP的特点
(1)UDP是无连接协议(不用提前建立连接)
(2) UDP不能保证可靠的交付数据(“想发就发”,“无法保证数据在网络中是否丢失”)
(3)UDP是面向报文传输的(不做修改直接发送)
(4)UDP没有拥塞控制(不会感知网络拥塞,无论任何情况都会持续发送数据)
(5)UDP的首部开销很小
三、TCP协议详解
=============
TCP(Transmission Control Protocol: 传输控制协议)是计算机网络中非常复杂的一个协议
1. TCP协议的特点
(1)TCP是面向连接的协议
(2)TCP的一个连接有两端(点对点通信)
(3)TCP提供可靠的传输服务
(4)TCP协议提供全双工的通信(两者可以同时可以接收和发送数据)
(5)TCP是面向字节流的协议
2. TCP头部
(1)序号:0~2^32-1;一个字节一个序号;数据首字节序号
(2)确认号:一个字节一个序号;期望收到数据的首字节序号(确认号为N:则表示N-1序号的数据都已经收到)
(3)TCP标记:占6位,每位各有不同意义
(4)窗口:占16位:0~2^16-1;窗口指明允许对方发送的数据量
(5)紧急指针:紧急数据(URG=1);指定紧急数据在报文的位置
3. 可靠传输的基本原理
1)停止等待协议
发送一个消息后,就停止发送,等待,确认之后载发送下一个消息。
停止等待协议是最简单的可靠传输协议; 停止等待协议对信道的利用效率不高。
超时重传(三种情况)
(1)发送的消息在路上丢失了
(2)确认的消息在路上丢失了
(3)确认的消息很久才到
超时定时器:每发送一个消息,都需要设置一个定时器
2)连续ARQ协议
ARQ(Automatic Repeat reQuest:自动重传请求)
既然单个发送和确认效率低, 可不可以批量发送和确认?使用滑动窗口,可以提高信道利用率。
4. TCP协议的可靠传输
TCP的可靠传输基于连续ARQ协议; TCP的滑动窗口以字节为单位
选择重传需要指定需要重传的字节; 每一个字节都有唯一的32位序号
5. TCP协议的流量控制
流量控制指让发送方发送速率不要太快
流量控制是使用滑动窗口来实现的
例子:发送方发送消息seq=1两次,共发送200字节;接收方发送确认消息,表示还可以发送300字节;
但是消息丢失会引起等待(死锁)— 但是不会重传怎么办?
**坚持定时器:**解决上述死锁问题。
当接收到窗口为0的消息,则启动坚持定时器;坚持定时器每隔一段时间发送一个窗口探测报文
6. TCP的拥塞控制机制
一条数据链路经过非常多的设备;数据链路中各个部分都有可能成为网路传输的瓶颈;
网络对硬件设备的性能要求大于可用资源,因此会导致拥塞。
流量控制考虑点对点的通信量的控制;拥塞控制考虑整个网络,是全局性的考虑
报文超时则认为是拥塞;
1)慢启动算法
由小到大逐渐增加发送数据量; 每收到一个报文确认,就加一
2)拥塞避免算法
维护一个拥塞窗口的变量; 只要网络不拥塞,就试探着拥塞窗口调大
7. TCP的建立(三次握手)
(1)第一次握手:连接请求报文,seq=x
(2)第二次握手:接收方 SYN=1连接请求,ACK=1 对序列号确认,ack确认号,希望收到x+1的序列号的值,同时报文也会携带自己的序列号y
(3)第三次握手: 发送方ACK=1 报文的确认号是有用,是y+1希望收到y+1的数据,并且同步自己的序列号为x+1
连接建立之后,还同步了各自的序号。
**为什么发送方要发出第三个确认报文呢?**已经失效的连接请求报文传送到对方,引起错误
同样的请求会建立两次连接,当需要三次握手时,一旦建立连接,发送方不会对连接方的消息做出回应。
8. TCP连接的释放(四次挥手)
(1)FIN=1需要释放连接
(2)连接请求已收到,并且对消息确认(还可以发送数据)
(3)FIN=1可以释放连接 ACK=1 重复对第一个报文确认
(4)收到释放连接信号,等待一段时间 没有问题,就进入关闭状态。
**等待计时器:**时长2MSL,
MSL(Max Segment Lifetime): 最长报文段寿命;MSL建议设置为2分钟
为什么需要等待2MSL?
(1)确保发送方的ACK可以到达接收方
(2)最后一个报文没有确认
(3)2MSL时间内没有收到,则接收方会重发
(4) 确保当前连接的所有报文都已经过期
9. 套接字与套接字编程
使用端口(Port)来标记不同的网络进程
端口(Port)使用16比特位表示(0~65535)
套接字(Socket)是抽象概念,表示TCP连接的一端;通过套接字可以进行数据发送或接收
TCP连接由两个套接字组成
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-13aTtC1T-1712960989487)]
最后
[外链图片转存中…(img-UD6nwdpN-1712960989488)]
[外链图片转存中…(img-AAeknKhn-1712960989488)]
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-yjpnSRtQ-1712960989488)]