网络编程
概述
计算机网络是通过传输介质、传输设备在通信协议的规定下进行数据传输和资源共享的系统,可以将多个不同的计算机系统连接起来构成整个互联网。
网络分层
osi模型将整个网络通信系统分为7层。由下往上分别是
物理层
整个开放系统的基础,管理了网络物理传输,涉及的是比特流相关信息,主要功能是为上一层提供数据传输功能。
数据链路层
实现计算机网络中的点对点的传输,把原始的、有差错的物理传输改成逻辑上可靠的传输。
网络层
实现ip地址之间的网络传输,功能包括路由选择、网络寻址、流量控制、拥塞控制、网络互连
传输层
实现端点到端点之间的数据传输,比如使用tcp或者udp进行数据传输
会话层
会话层的主要功能是负责应用程序之间建立、维持和中断会话,同时也提供对设备和结点之间的会话控制,协调系统和服务之间的交流,并通过提供单工、半双工和全双工3种不同的通信方式,使系统和服务之间有序地进行通信。
表示层
表示层关心所传输数据信息的格式定义,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。
应用层
直接为应用程序服务,处理一系列相关的业务等。
网络协议
IP协议
IP协议的作用在于把各种数据包准备无误的传递给对方,其中两个重要的条件是IP地址和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的。
TCP协议
TCP(传输控制协议)是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。
三次握手
三次握手的过程如下:
- 客户端发送SYN包(SYN=1,ACK=0)给服务器。
- 服务器收到SYN包后,回应一个SYN/ACK包(SYN=1,ACK=1),表示确认客户端的请求,并且表示服务器也希望建立连接。
- 客户端收到服务器的SYN/ACK包后,发送一个ACK包(ACK=1)给服务器,表示确认服务器的请求。
通过三次握手,客户端和服务器都确认了对方的存在和可用性,建立了一个可靠的连接。这个过程也确保了数据的可靠传输,避免了重复发送和不必要的数据流。
四次挥手
四次握手的过程如下:
- 客户端发送一个FIN包(FIN=1)给服务器,表示客户端不再发送数据。
- 服务器收到FIN包后,回应一个ACK包(ACK=1)给客户端,表示确认客户端的请求。
- 服务器也发送一个FIN包(FIN=1)给客户端,表示服务器不再发送数据。
- 客户端收到服务器的FIN包后,回应一个ACK包(ACK=1)给服务器,表示确认服务器的请求。
通过四次握手,客户端和服务器都确认了双方不再发送数据,关闭了连接。这个过程也确保了数据的完整性,避免了数据丢失和不必要的数据流。
UDP协议
UDP(User Datagram Protocol,用户数据报协议)是一种轻量级的传输层协议,它与TCP协议一样工作在OSI模型的传输层,但是不像TCP协议提供面向连接的可靠传输。UDP协议主要用于需要快速传输数据,但对于数据可靠性要求不高的场景,例如实时流媒体、在线游戏、DNS等。
HTTP协议
HTTP,超文本传输协议,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议。HTTP协议是Web浏览器和Web服务器之间通信的标准协议。HTTP指定客户端与服务器如何建立连接、客户端如何从服务器请求数据,服务器如何响应请求,以及最后如何关闭连接。HTTP连接使用TCP/IP来传输数据。
- 默认情况下,客户端在端口80打开与服务器的一个TCP连接,URL中还可以指定其他端口。
- 客户端向服务器发送消息,请求指定路径上的资源。这个资源包括一个首部,可选地(取决于请求的性质)还可以有一个空行,后面是这个请求的数据。
- 服务器向客户端发送响应。响应以响应码开头,后面是包含数据的首部、一个空行以及所请求的文档或错误消息。
- 服务器关闭连接。
HTTPS协议
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URL scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
请求类型
-
GET:用于从服务器获取资源。当客户端向服务器发送GET请求时,服务器将根据请求的URL获取资源,并将该资源返回给客户端。GET请求中的数据是通过URL参数传递的,因此GET请求的数据大小受到URL长度的限制。
-
POST:用于向服务器提交数据。当客户端向服务器发送POST请求时,服务器将使用请求中包含的数据更新或创建指定的资源。POST请求中的数据是通过请求体传递的,因此POST请求的数据大小没有限制。
-
PUT:用于向服务器上传数据。当客户端向服务器发送PUT请求时,服务器将使用请求中包含的数据更新或创建指定的资源。PUT请求中的数据是通过请求体传递的,因此PUT请求的数据大小没有限制。
-
DELETE:用于删除服务器上的资源。当客户端向服务器发送DELETE请求时,服务器将删除指定的资源。
-
HEAD:类似于GET请求,但是服务器只返回响应头信息,而不返回响应体信息。HEAD请求通常用于检查资源的元数据(例如,是否已修改、最后修改时间等),而不必下载整个资源。
-
OPTIONS:用于检索与资源相关的通信选项。当客户端向服务器发送OPTIONS请求时,服务器将返回有关支持的HTTP方法、请求头、响应头等信息。
-
TRACE:用于测试客户端与服务器之间的连接。当客户端向服务器发送TRACE请求时,服务器将返回一个带有客户端发送数据的HTTP响应,以便客户端可以查看数据是否被修改。
-
CONNECT:用于建立与服务器的网络连接。CONNECT请求通常用于HTTPS代理,以建立与目标服务器的加密连接。
状态码
HTTP状态码是指在HTTP协议中,当浏览器向服务器发出请求时,服务器返回的响应结果的状态码。HTTP状态码用来表示服务器端对请求的处理结果,不同的状态码对应着不同的处理结果。常见的HTTP状态码包括:
1xx:信息状态码,表示服务器已经接收到请求,正在处理中。
2xx:成功状态码,表示服务器已经成功处理了请求。
200 OK:请求成功,服务器已经返回相应的内容。
201 Created:请求成功,并且服务器已经创建了新的资源。
204 No Content:请求成功,但是服务器没有返回任何内容。
3xx:重定向状态码,表示请求的资源已经被移动到其他地方。
301 Moved Permanently:请求的资源已经被永久移动到其他地方。
302 Found:请求的资源已经被临时移动到其他地方。
304 Not Modified:请求的资源未被修改,可以直接从缓存中获取。
4xx:客户端错误状态码,表示客户端的请求有错误。
400 Bad Request:请求错误,服务器无法理解请求的格式。
401 Unauthorized:请求需要认证或授权,但是用户未提供有效的凭证。
403 Forbidden:服务器拒绝了请求,因为客户端没有权限访问请求的资源。
404 Not Found:请求的资源不存在。
5xx:服务器错误状态码,表示服务器在处理请求时发生了错误。
500 Internal Server Error:服务器内部错误,无法完成请求。
503 Service Unavailable:服务器暂时无法处理请求,通常是因为过载或维护等原因。