TCP(Transmission Control Protocol):传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
HTTP(Hyper Text Transfer Protocol):超文本传输协议,运行在TCP之上,是一种通用的、无状态的协议。
在了解TCP、HTTP之前,先熟悉下7层模型和4层模型。
OSI 7层模型
应用层(Application Layer):为网络用户之间的通信提供专用的程序。
表示层(Presentation Layer):主要用于处理两个通信系统中数据或信息的表示方式。它包括数据格式交互,数据加密与解密,数据压缩与解压缩等功能。
会话层(Session Layer):主要功能是在不同的主机上组织各种进程进行会话,并管理数据交换。
传输层(Transport Layer):传送数据的单元是报文Message。向用户提供可靠的端到端的数据服务,透明的传送报文。
网络层(Network Layer):传输数据的单位是分组或包Packet,网络层的主要任务是通过路由算法,为数据包通过通信子网选择最合适的路径。
网络层要实现路由选择、拥塞控制和网络互连等功能。
数据链路层(Data Link Layer):传输数据的单位是帧Frame,采用差错控制和流量控制,使有差错的物理线路变成无差错的数据链路。
物理层(Physical Layer):传输数据的单位为比特bit。主要功能是利用物理传输介质为数据链路层提供物理连接,透明的传递比特流。
TCP/IP 4层模型
应用层(Application Layer):负责实现一切与应用程序相关的功能。一般是可见的,如利用FTP传输一个文件,请求一个和目标计算机的连接,在传输文件的过程中,用户和远程计算机交换的一部分是能看到的。
常见协议:
- HTTP:超文本传输协议。
- FTP:文件传输协议。
- Telnet:远程终端协议。
- SMTP:简单邮件传输协议。
- DNS:域名服务器协议。
传输层(Transport Layer):负责提供可靠的传输服务。其功能包括:格式化信息流;提供可靠传输。
常见协议:
- TCP:控制传输协议。
- UDP:用户数据报协议。
网络层(Inter-network Layer):负责网络间的寻址。管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确到达目的机器。
常见协议:
- IP:网际协议。
- ICMP:Internet 控制消息协议。
- ARP:地址解析协议。
- RARP:反向地址解析协议。
网络接口层(Host-to-Net Layer):负责实际数据的传输。
常见协议:
- Ethernet:以太网。
- FDDI:光纤分布式数据接口。
- PPP:点对点协议。
TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。
TCP三次握手、四次挥手
三次握手
一个正常的TCP连接需要进行三次握手。
第一次握手:客户端发送一个SYN请求报文,设置随机序列号为seq=x,并进入SYN_SENT(请求连接)状态。
第二次握手:当服务器收到该连接请求后,会发送一个SYN + ACK(x + 1)的响应报文,设置数据包的随机序列号为seq=y,此时服务器进入SYN_RECV(等待连接确认)状态。
第三次握手:客户端收到服务器的响应后,会给服务器返回一个ACK(y + 1)确认消息报文。此时连接建立完成,可以发送数据。
四次挥手
四次挥手(释放资源):
- client 发送FIN 包;
- server 回复FIN + ACK包;
- server 再发送FIN;
- client 回复ACK。
概念:
- SYN: (同步序列编号,Synchronize Sequence Numbers)。
- ACK: (确认编号,Acknowledgement Number)。
- FIN: (结束标志,Finish)。
注:如果同一虚拟机内部应用调用,三次握手是纳秒级别的耗时,因为是在内存中完成的,会有用户态内核态的调用,但不涉及硬件物理网卡的耗时。
Socket
Socket的中文叫套接字或套接口。起源于UNIX。是针对TCP或UDP的具体接口实现。
Socket套接字是在应用层和传输层之间的一个抽象层,把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中的通信。
HTTP
HTTP是第7层(应用层)协议,它运行在TCP传输层协议之上。
HTTP长连接:复用tcp连接,节省tcp连接建立和断开的消耗。HTTP1.0默认短连接,HTTP1.1默认长连接,客户端和服务端的HTTP首部的Connection都要设置为keep-alive,才能支持长连接。
HTTP1.1/HTTP2.0区别:HTTP1.1基于文本格式传输数据,HTTP2.0采用二进制格式传输数据,多路复用,头部压缩。
HTTP1.1中,单个tcp连接,同一时间只能处理一个HTTP请求,请求会排队处理。可以建立多个tcp连接并发处理请求。
RPC
RPC是远程过程调用(Remote Procedure Call),是一种框架。RPC中可以使用HTTP作为通讯协议,通讯协议只是RPC中的一部分。RPC中还有序列化、反序列化等等。
RPC的本质是提供了一种轻量无感知的跨进程通信方式。
参考资料
1.《Red Hat Enterprise Linux 6.0系统管理》
2.《大学计算机基础》
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/221953.html