1.知识点:
在计算机网络中,通信协议用于规范数据传输的格式和传送方式。下面是常见的网络通信协议:
HTTP协议:超文本传输协议,用于在Web浏览器和Web服务器之间传输HTML文件和其他资源。
HTTPS协议:HTTP安全版,使用SSL/TLS加密协议对HTTP协议进行了加密,保证数据传输过程中的安全性。
FTP协议:文件传输协议,用于在网络上进行文件传输,支持上传、下载和删除等操作。
SMTP协议:简单邮件传输协议,用于电子邮件的发送。
POP3协议:邮局协议版本3,用于电子邮件的接收。
IMAP协议:Internet电子邮件访问协议,用于电子邮件的接收和管理。
TCP/IP协议:传输控制协议/因特网协议,是互联网所使用的标准协议。
ICMP协议:Internet控制消息协议,用于网络故障排除和诊断。
DNS协议:域名系统协议,用于将域名解析为对应的IP地址,方便网络通信。
WebSocket协议:一种基于TCP协议的全双工通信协议,可用于Web应用程序的即时通信。
HTTP(超文本传输协议)是一种常用的客户端-服务端协议,用于在Web浏览器和Web服务器之间传输数据。以下是HTTP网络通讯的过程:
建立TCP连接:浏览器向服务器发起请求时会先建立TCP连接,通过三次握手确保连接通畅。
发送HTTP请求:浏览器向服务器发送HTTP请求,请求包括请求方法、URL地址、HTTP版本号、请求头等信息。
服务器响应请求:服务器接收到HTTP请求后,根据请求信息生成HTTP响应报文,响应报文包括响应状态码、响应头、响应正文等。
浏览器解析HTML代码:如果响应正文是HTML代码,浏览器会对HTML代码进行解析并生成DOM树、CSS样式树、渲染树等。
页面显示:浏览器利用生成的渲染树,按照HTML文档中节点的顺序,绘制页面并展示给用户。
断开TCP连接:当浏览器完成对服务器的请求并成功接收到响应后,浏览器会关闭TCP连接。
WebSocket是一种基于TCP协议的全双工通信协议。全双工通信可以理解为双向通信,也就是说,客户端和服务端可以同时发送和接收数据,实现实时消息传输。
与之前的HTTP协议不同的是,HTTP是一种无状态协议,每个请求都是一个独立的事务,不保留状态信息。而WebSocket协议在建立连接后,维持了一个长连接,使得客户端和服务器可以随时相互发送数据,而不需要重新建立连接。
使用WebSocket协议进行通信时,客户端首先要向服务器发起WebSocket握手请求,服务器在接到请求后返回信息表示已经同意WebSocket连接。连接建立后,客户端和服务器之间可以直接发送和接收数据,Web应用程序可以很方便地实现实时通信或者实现在线游戏等功能。
一、 网络模型概览
网络模型是对计算机网络通信的不同层次进行抽象和划分,以便实现网络通讯的标准化和协同。其中比较常用的网络模型有OSI七层模型和TCP/IP四层模型。
OSI七层模型:
物理层:负责传输二进制数据流,描述了通信介质、电器特性等硬件细节。
数据链路层:负责在物理层上传输数据块(帧)、管理和控制物理链路,保证数据的可靠传输。
网络层:负责通过路由选择算法将数据包从源地址传输到目标地址的网络节点上,实现跨网络的通信。
传输层:提供端到端的数据传输服务,包括建立连接、确认可靠传输等功能。
会话层:管理不同应用程序之间的会话,实现应用程序之间的交互。
表示层:将数据格式转换为应用程序可以理解的格式,包括数据压缩、加密、解密、字符编码等。
应用层:提供网络服务的用户接口,例如HTTP、SMTP、FTP等应用协议。
TCP/IP四层模型:
网络接口层:定义了电器特性、数据格式、传输格式等硬件和软件接口规范。
网络层:负责IP地址的分配、路由选择等网络层协议。
传输层:提供端到端的数据传输服务,并保证可靠传输,包括TCP和UDP协议。
应用层:提供各种应用协议,例如HTTP、FTP、SMTP、DNS等协议,通过网络实现应用程序之间的通讯和数据交换
如下图:
在实际应用中,不同的网络模型有不同的适用场景和优缺点,需要根据具体需求进行选择。
二、 HTTP 网络通讯过程
示例:简单的网络拓扑模型
- 例如
当我们键入网址并敲击回车后,从输入URL到浏览器显示网页的过程可分为以下几个步骤:
DNS解析:浏览器会先检查本地DNS缓存中是否有该域名的记录,如果没有则向DNS服务器发起请求。DNS服务器将返回IP地址,供浏览器进行下一步访问。
建立TCP连接:浏览器利用HTTP协议向服务器发送一个请求,请求包括请求方法、URL地址、HTTP版本号、请求头和请求主体等信息。建立TCP连接是依靠三次握手,也就是浏览器主动向服务器发送SYN报文,服务器收到后回应ACK+SYN报文,浏览器再发送ACK报文,完成三次握手,建立TCP连接。
传输HTTP消息:TCP连接建立成功后,浏览器就可以发送HTTP请求到服务器了。请求到达服务器后,服务器会解析请求消息,并根据请求方法返回相应的HTTP响应消息给浏览器。
服务器处理请求:一旦服务器收到请求,它就会处理这些请求,处理的方法包含读取文件,运行动态脚本等等。一旦处理完毕,服务器就会返回响应,并关闭TCP连接。
浏览器渲染页面:浏览器接收到服务器发送的HTML、CSS、JavaScript等资源文件后,就会解析和渲染网页。将HTML转换成Dom树结构,CSS转换成样式表对象,JavaScript解析生成执行环境,最后将他们整合之后显示在浏览器中。
完成:网页请求完成之后,浏览器会关闭TCP连接。
以上是HTTP网络通讯的一般过程,不同的请求和响应可能包含不同的内容和流程,但基本步骤是类似的。
客户端(发送方组包)
1)HTTP
浏览器解析 URL(协议、域名、资源路径)
生成 HTTP 请求报文
2)DNS(真实地址查询)
向 DNS 服务器查询服务器域名对应的 IP 地址
域名中越靠右的位置表示其层级越高
3)协议栈(指南帮手)
获取 IP 后,将之后的 HTTP 传输工作交给操作系统内核中的协议栈处理TCP/UDP:负责收发数据IP:负责将网络包送达给对方
4)TCP(可靠传输)
报文头部包含源端口号、目标端口号、序号、确认号等
TCP 传输数据之前,要先三次握手建立连接(三次握手的目的是保证双方都有发送和接收的能力)
TCP 报文生成:TCP 头部 + HTTP 报文
5)IP(远程定位)
将数据封装称网络包发送给通信对象
IP 报文生成:IP 头部 + TCP 头部 + HTTP 报文
6)MAC(两点传输)
还需要加上 MAC 头部(发送方和接收方的 MAC 地址等信息),MAC 头部是以太网的头部
MAC 作用:MAC 地址用来唯一标识设备,再通过 ARP 协议找到下一站路由器的 MAC 地址,实现两点之间的传输
至此,网络包报文(MAC 头部 + IP 头部 + TCP 头部 + HTTP 报文)如下图所示:
7)网卡(出口)
真正的数据发送过程:将数字信息(IP 网络包)转换为电信号,才能在网线上传输
控制网卡需要靠网卡驱动程序
网卡本身具有 MAC 地址,且会核对数据包的接收方 MAC 地址与自身 MAC 地址是否相同,不是则丢弃
8)交换机(送别)
交换机的设计:将网络包原样转发到目的地
交换机工作在 MAC 层,也称为二层(数据链路层)网络设备
交换机接收到达网线接口的电信号,并转换为数字信息
二层交换机本身具有一个 MAC 地址(标识自身硬件设备),但其各端口不具有 MAC 地址(三层交换机则每个端口都有 MAC 地址)
交换机根据交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的网线端口。交换机的 MAC 地址表包含两个信息:
设备的 MAC 地址
该设备连接在交换机的哪个端口上
9)路由器(出境)
路由器基本原理:
与交换机类似,通过查表判断包的(下一个路由器或目标设备)转发目标
路由器基于 IP 设计,俗称三层(网络层)网络设备,其各端口具有 MAC 地址和 IP 地址(和计算机网卡一样);而交换机基于以太网设计,俗称二层(数据链路层)网络设备,其端口不具有 MAC
地址(也有三层交换机,具有部分的路由器功能)
MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址
包接收操作:将网线接口的电信号转成数字信号,并核对 MAC 地址
完成包接收操作之后,路由器就会去掉包开头的 MAC 头部
接下来会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作
包发送操作:将网络包的数字信号转成电信号并通过端口发送出去,经过层层转发之后,到达最终目标设备
首先是查询路由表判断转发目标
通过 ARP 协议根据对方的 IP 地址查询 MAC 地址,并将查询结果作为接收方 MAC 地址
三、 以太网(传输)
以太网是一种局域网(LAN)技术,可以用于在短距离内传输数据。它采用了CSMA/CD协议(载波监听多路访问/冲突检测)来进行数据传输,也就是在发送数据之前,网卡会检查信道是否空闲,如果忙碌就等待一段随机时间再试。
在发送数据时,数据会被分割成帧的形式,每帧包含了目的地址、源地址、长度等信息,并且每个帧都有一个起始和结束标志。当帧到达接收端时,接收端会对帧的CRC校验和进行检查,以确保数据完整性,如果发现校验和错误,则会要求发送端重发数据。
以太网的传输速度和距离取决于所使用的规格和技术,不同的以太网规格支持不同的传输速率和距离。比如,10BASE-T支持最大传输速率为10Mbps,最远传输距离为100米;而1000BASE-T则支持1Gbps的传输速率,但传输距离较短。
在网络包(跨网段)传输过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。
(对于同网段的二层转发,MAC 地址则不变。)
服务器端(接收方解包)
1)路由器(入境)
2)交换机(境内)
3)服务器(终点)
服务器层层扒开数据包头部,最后通过 TCP 头部的端口号确认是 HTTP 进程想要的这个包 HTTP 进程将资源封装在 HTTP
响应报文中,也依次穿上 TCP、IP、MAC 头部,从网卡出去,交由交换机转发到路由器,经过层层转发,最后到达客户端
客户端扒剩 HTTP 响应报文后,交给浏览器去渲染页面并显示资源
最后客户端要离开时,向服务器发起 TCP 四次挥手,至此双方连接断开
示例:服务器和客户端相互扒皮