网络
1、网络OSI七层模型及各层作用
(1)OSI七层模型
OSI中的层 功能 TCP/IP协议族
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层 数据格式化,代码转换,数据加密 没有协议
会话层 解除或建立与别的接点的联系 没有协议
传输层 提供端对端的接口 TCP,UDP
网络层 为数据包选择路由 IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2
(2)TCP/IP五层模型的协议
物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层
数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)
网络层:路由器、三层交换机
传输层:四层交换机、也有工作在四层的路由器
原文详情链接: https://zhuanlan.zhihu.com/p/101662799
2、 TCP与UDP的区别:
1、基于连接与无连接;
2、对系统资源的要求(TCP较多,UDP少);
3、UDP程序结构较简单;
4、流模式与数据报模式 ;
5、TCP保证数据正确性,UDP可能丢包;
6、TCP保证数据顺序,UDP不保证。
原文链接:https://www.zhihu.com/tardis/zm/art/24860273?source_id=1005
UDP协议的特点:
- 无连接:只知道对端的IP和端口号就可以发送,不需要实现建立连接。
- 不可靠:没有确认机制, 没有重传机制。如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。
- 面向数据报: 应用层交给UDP多长的报文, UDP原样发送既不会拆分,也不会合并。如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个 字节,而不能循环调用10次recvfrom, 每次接收10个字节。 所以UDP不能够灵活的控制读写数据的次数和数量。
UDP是一种全双工通信协议。 UDP协议首部中有一个16位的大长度. 也就是说一个UDP能传输的报文长度是64K(包含UDP首部)。如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。
常见的基于UDP的应用层协议:
- NFS:网络文件系统
- TFTP:简单文件传输协议
- DHCP:动态主机配置协议
- BOOTP:启动协议(用于无盘设备启动)
- DNS:域名解析协议
- 程序员在写UDP程序时自己定义的协议
TCP协议
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。
TCP建立连接要进行3次握手,而断开连接要进行4次
TCP全称传输控制协议,必须对数据的传输进行控制。
超级详细链接:https://blog.csdn.net/hansionz/article/details/86435127
1、网路层次的划分
1-1 OSI七层网络模型 与 TCP/IP五层协议
1.1.1Rpc和Http的区别
相同点:底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务
不同点:
是什么 | 优缺点 | 框架 | 典型 | |
---|---|---|---|---|
RPC | 远程过程调用 | 速度快,效率高 | webservie(cxf)、dubbo(阿里巴巴开源的基于 Java 的高性能 RPC)、(RMI远程方法调用)Hessian | 典型:早期的webservice,现在热门的dubbo |
Http | 一种网络传输协议 | 优势:通用性强; 缺点是消息封装臃肿 | HttpClient | 现在热门的Rest风格 |
RPC:Remote Produce Call远程过程调用;
自定义数据格式,基于原生TCP通信,速度快,效率高。
典型:早期的webservice,现在热门的dubbo
框架:webservie(cxf)、dubbo(阿里巴巴开源的基于 Java 的高性能 RPC)、(RMI远程方法调用)Hessian
跨操作系统在同一编程语言内使用
Http:是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。
优势:通用性强
缺点是消息封装臃肿。
典型:现在热门的Rest风格
http的实现技术:HttpClient
跨系统跨编程语言的远程调用框架
总结:对比RPC和http的区别
1 RPC要求服务提供方和服务调用方都需要使用相同的技术,要么都hessian,要么都dubbo
而http无需关注语言的实现,只需要遵循rest规范
2 RPC的开发要求较多,像Hessian框架还需要服务器提供完整的接口代码(包名.类名.方法名必须完全一致),否则客户端无法运行
3 Hessian只支持POST请求
4 Hessian只支持JAVA语言
2、 TCP协议的三次握手和四次挥手:(易懂版)
注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally"结束标志。
TCP连接建立过程:首先Client客户端发送连接请求报文,Server服务端接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发送ACK报文,并分配资源,这样TCP连接就建立了。
TCP连接断开过程:假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
TCP/IP的三次握手 四次挥手是什么(专业版)
TCP/IP 协议是互联网中最常用的协议之一,它是传输控制协议(TCP)和因特网协议(IP)的组合。TCP 协议负责在网络中可靠地传输数据,而 IP 协议则负责在不同的网络之间进行数据路由。
三次握手(Three-Way Handshake) 是建立一个 TCP 连接的过程。它的目的是确保双方的通信正常进行,包括客户端和服务器端。这个过程如下:
第一步 - 客户端发起连接请求:
- 客户端向服务器端发送一个 SYN 包(SYN=1, ACK=0),并选择一个随机的初始序列号(Seq=X)。
第二步 - 服务器确认连接请求:
- 服务器收到客户端的 SYN 包后,会回应一个 SYN-ACK 包(SYN=1, ACK=1),同时也会选择一个随机的初始序列号(Seq=Y)。
第三步 - 客户端确认连接请求:
- 客户端收到服务器的 SYN-ACK 包后,会发送一个确认包(ACK=1),确认收到了服务器的响应,并指定了正确的序列号(Seq=X+1)。
至此,三次握手完成,TCP 连接建立,双方可以开始进行数据传输。
四次挥手(Four-Way Handshake) 是关闭一个已经建立的 TCP 连接的过程。它的目的是确保双方都已经完成了数据的传输,可以安全地关闭连接,这个过程如下:
第一步 - 客户端发送关闭请求:
- 客户端发送一个 FIN 包(FIN=1)给服务器,表示它已经完成了数据传输。
第二步 - 服务器确认关闭请求:
- 服务器收到客户端的 FIN 包后,会回应一个 ACK 包,确认收到了关闭请求,但此时服务器可能还有数据需要发送给客户端。
第三步 - 服务器发送关闭请求:
- 在服务器完成数据传输后,会发送一个 FIN 包给客户端,表示服务器已经准备好关闭连接。
第四步 - 客户端确认关闭请求:
- 客户端收到服务器的 FIN 包后,会回应一个 ACK 包,表示收到了关闭请求,并等待一段时间(TIME_WAIT)以确保服务器接收到了确认。
最后,连接就关闭了。
需要注意的是,TIME_WAIT 状态是为了确保网络中所有的数据包都能被接收到,防止出现旧的数据包在网络中循环。在实际应用中,TIME_WAIT 的持续时间通常是几分钟,以允许网络中所有的数据包到达。
这两个过程对于保证数据的可靠传输和连接的可靠关闭非常重要,特别在网络通信中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧