计算机网络协议
计算机网络协议
传输层主要有两种协议:UDP和TCP
TCP协议
A、特点:
- 面向连接的协议。数据传输之前都要建立连接(三次挥手),数据传输结束都要释放连接(四次挥手)
- 一条TCP连接只能有两个端点,端点是socket(结构 IP地址:端口号),并非主机或进程。
- 可靠交付
- 全双工通信(一端既可以做发送方也可以做接收方)
- 面向字节流
B、为何TCP是可靠的呢?
其实TCP是依赖停止 等待协议和连续ARQ 协议+滑动窗口协议才达到可靠的目的
a、等待协议
- 特点:资源利用率非常低
- 工作原理:客户发送一次数据到服务端,必须等到服务端响应后才发第二次数据,中间的等待时间RTT占了大部分时间,中间如果出现差错(超时或确认丢失)都需要从新传输。
b、连续ARQ协议
- 连续ARQ协议工作原理
维持一个发送窗口(记录了当前可以发送的数据包数量n),在窗口内的数据都可以连续发送出去,服务器只在接收完一个发送窗口的数据后才回响应(累计确认),发送端接收到响应就把发送窗口移动n位,开始新一轮数据发送。
例如TCP,是用于发大量数据的,我发了1万个包出去,另一台电脑就要告诉我是否接受到了1万个包,如果缺了3个包,就告诉我是第1001,234,8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。
TCP传输连接管理
连接的三个阶段:建立连接、数据传输、连接释放
在建立连接的过程中要解决三个问题:
- 使每一方都知道对方的存在
- 协商一些参数
- 能够运输实体资源
主动建立连接的一端叫客户端,被动等待连接建立的一方叫服务器
连接建立(三次握手)
连接释放(四次挥手)
第一次挥手:客户端发送连接,FIN=1标志着A已经完成了数据的发送。
第二次挥手:B回了一个确认,此时A与B的发送连接就断开了。
第三次挥手:因为TCP连接是全双工通信的,B还保留着一个对A大发送连接,如果等到B也不需要发送数据给A时,B会发送一个连接给A,seq等于一个大于或等于v的值(因为A与B断开发送连接到B与A断开发送连接期间有可能B向A发送了数据,就是消耗序号)。
第四次挥手:当A收到B的连接时,要回一个响应给B,但是此时会有一个2MSL长的等待时间,时间一过,就真正的断开与B的全部连接了
UDP协议
特点:
- 无连接,传输数据时不需要建立连接,减小开销
- 尽最大努力交付,不确保可靠交付
- 面向报文
- 没有拥塞控制、确保信息实时性
- 支持一对一,一对多,多对一,多对多
- 首部开销小,只有8个字节
UDP的首部格式(UDP头):
- 源端口,发送方的端口
- 目标端口,接收方的端口
- 长度,首部长度 + 用户数据包的长度(可以没有数据包,所用最小值为8)
- 检验和,检查UDP用户数据传输中是否与错,有错就丢弃(检查首部长度 + 用户数据包)
例如UDP,是用于发送少量数据的。我发20个包出去,一般不会丢包,所以,我不管你收到多少个。在多人互动游戏,也经常用UDP协议,因为一般都是简单的信息,而且有广播的需求。如果用TCP,效率就很低,因为它会不停地告诉主机我收到了20个包,或者我收到了18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包你就卡一下,算了,下次再发包你再更新。
应用层的HTTP协议
特点:
- 支持客户端 / 服务器模式
- 简单快速
- 灵活
- 无连接,在完成一次请求获得响应后就会断开
- 无状态,没有记忆的,请求完一次后,就结束了,后面如果要再获得数据必须从新请求
HTTP与HTTPS的区别:
- HTTPS需要到CA申请证书,HTTP不需要
- HTTPS密文传输、HTTP明文传输
- 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
- HTTPS = HTTP + 加密+认证+完整性保护,较HTTP安全
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术