RPC:远程调用服务.一个概念性的协议。
TCP/IP协议
狭义:TCP/IP 是指 TCP 和 IP 两种协议
广义:IP 进行通信时所必须用到的协议群的统称。包括IP / ICMP、TCP /UDP、TELNET /FTP、 HTTP/HTTPS
计算机网络体系结构分层
TCP/IP协议的结构。
1、应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
2、传输层:作为TCP/IP协议的第二层,传输层在整个TCP/IP协议中起到了中流砥柱的作用。且在传输层中,TCP和UDP也同样起到了中流砥柱的作用。
3、网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。
4、网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
传输层中的 TCP协议 和 UDP协议
TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。
一.TCP协议(传输控制协议): 面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP旨在适应支持多网络应用的分层协议层次结构。
特点
(1)基于流的方式;
(2)面向连接;
(3)可靠通信方式;
(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;
(5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。
数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;
到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;
超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;
滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;
失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;
数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。
三次握手:
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=m,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=m+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为m+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
四次挥手:
中断连接端可以是客户端,也可以是服务器端。
第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。
双端同时发起关闭请求
二.UDP 协议(用户数据报协议):OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。
特点:
(1)数据传输过程中延迟小
(2)数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。
无连接:UDP是无连接的协议,他在进行数据传输之前不需要先建立连接,也没有各种重传机制、拥塞控制和流量控制,所以传输速度很快,消耗很低,延迟小,数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。
不可靠:只负责数据的发送,不关心数据是否送达,没有确认机制,主机收到数据也不会有响应
分组首部开销小,TCP的首部是20字节,UDP的首部是8字节
面向报文的:TCP(面向连接的传输控制协议)是面向字节传输,而UDP是面向报文传输,对于应用层交下来的报文段不进行拆分合并,直接保留原有报文段的边界然后添加UDP的首部就交付给网络层。不论报文的长短,UDP都不会进行处理。因此为了避免报文段过短降低传输效率以及报文段过长导致网络层对IP数据进行分片操作,应用层应该选择合适长度的报文交付给运输层的UDP。
长连接,短连接
http的长连接和短连接本质上是TCP长连接和短连接。从http1.1开始就默认使用长连接,http3.0引入了UDP协议,UDP协议是无连接的。
短链接:客户端与服务端每次请求,建立一次TCP连接,服务器响应后连接断开。
长连接:客户端和服务请求后,建立的TCP连接持续存在,不在关闭,后续的请求直接使用已有连接通信,使用长连接的HTTP协议,会在响应头有加入:Connection:keep-alive。
长连接可以省去每次TCP建立和关闭的握手和挥手操作,节约时间提高效率。但在长连接下,客户端一般不会主动关闭连接,如果客户端和服务端之间的连接一直不关闭的话,随着连接数越来越多,会对服务端造成压力。所以长连接多用于频繁请求资源,而且连接数不能太多的情况,例如数据库的连接用长连接。而像Web网站这种并发量大,但是每个用户无需频繁操作的场景,一般都使用短连接,因为长连接对服务端来说会耗费一定的资源。
长连接,短连接指的不是时间长短,而是使用次数。
全双工和半双工
全双工:允许数据在两个方向上同时传输,websocket,RPC,是全双工,http/https 2.0全双工
半双工:允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,http 1.1是半双工。
Socket 的概念
Socket(套接字)是计算机网络编程中的一种抽象,它提供了在网络上进行通信的接口。
Socket 本质上是一种通信的端点,它在网络上标识了一个通信链路的两端,并提供了通信双方所需的接口和功能。
通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换(网络通信)。
socket 通过 客户端ip:port+ 服务端ip:port 为key指向内存空间.
在 Socket 编程中,常见的两种类型是 TCP Socket 和 UDP Socket。
TCP Socket:TCP Socket 基于 TCP 协议,使用三次握手建立连接,确保数据的可靠性和顺序性。
UDP Socket:UDP Socket 基于 UDP 协议,无需建立连接,适用于一些实时性要求高、允许一定数据丢失的应用场景。