网络

1、网络OSI七层模型及各层作用

(1)OSI七层模型
image

image

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五层模型的协议
image

物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层

数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)

网络层:路由器、三层交换机

传输层:四层交换机、也有工作在四层的路由器

原文详情链接: 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、网路层次的划分

image

1-1 OSI七层网络模型 与 TCP/IP五层协议

image

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语言

详情:https://zhuanlan.zhihu.com/p/110424162

2、 TCP协议的三次握手和四次挥手:(易懂版)

image
 :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连接就这样关闭了!

详情:https://zhuanlan.zhihu.com/p/110424162

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 的持续时间通常是几分钟,以允许网络中所有的数据包到达。

这两个过程对于保证数据的可靠传输和连接的可靠关闭非常重要,特别在网络通信中。

posted @   邹木木  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示