socket套接字

Socket套接字是一种用于实现网络通信的接口。它可以在不同的主机之间传递数据,使得程序可以通过网络与其他程序进行通信。Socket套接字通常包含一个IP地址和一个端口号,可以唯一地标识一个网络上的进程。

Socket套接字是在应用层和传输层之间的一个接口,它可以被看作是应用程序与网络之间的桥梁。使用Socket套接字,应用程序可以发送和接收网络数据,也可以对网络数据进行处理和控制。Socket套接字可以支持不同的协议,例如TCP和UDP,可以根据应用程序的需求选择合适的协议进行通信。

在使用Socket套接字进行网络编程时,一般需要进行以下步骤:

  1. 创建Socket套接字。
  2. 绑定Socket套接字到一个IP地址和端口号。
  3. 监听来自其他程序的连接请求(对于TCP)或接收来自其他程序的数据(对于TCP和UDP)。
  4. 处理和控制来自其他程序的数据。
  5. 发送数据给其他程序。
  6. 关闭Socket套接字。

使用Socket套接字进行网络编程需要具备一定的网络编程知识和经验,需要注意网络传输的特性和安全性,以保障网络通信的稳定和安全。

socket在4层协议工作原理

74、套接字socket和http协议介绍_HTTP

封装了内核中所提供的socket通信相关的系统调用
Socket Domain:根据其所使用的地址
  AF_INET:Address Family,IPv4
  AF_INET6:IPv6
  AF_UNIX:同一主机上不同进程之间通信时使用
Socket Type:根据使用的传输层协议
  SOCK_STREAM:流,tcp套接字,可靠地传递、面向连接
  SOCK_DGRAM:数据报,udp套接字,不可靠地传递、无连接
  SOCK_RAW: 裸套接字,无须tcp或udp,APP直接通过IP包通信

套接字在4层协议中的工作图可以如下所示:

  • 应用层:应用程序使用套接字进行网络通信,发送和接收数据。
  • 传输层:套接字将应用程序发送的数据封装成传输层协议数据包,例如TCP或UDP协议数据包。
  • 网络层:传输层协议数据包被封装成网络层协议数据包,例如IP协议数据包,同时添加了源IP地址和目标IP地址等信息。
  • 数据链路层:网络层协议数据包被封装成数据链路层协议数据包,例如Ethernet协议数据包,同时添加了源MAC地址和目标MAC地址等信息。

在接收端,数据链路层协议数据包将被逐层解包,最终传递到应用程序中。在发送端,应用程序发送的数据将被套接字封装成传输层协议数据包,经过网络层和数据链路层的处理后发送到网络上。

需要注意的是,套接字并不直接与数据链路层进行交互,而是通过传输层协议与网络层进行交互,由网络层将数据包发送到数据链路层进行传输。同时,套接字的工作与协议和网络结构等相关,不同的网络结构和协议可能会对套接字的工作产生影响。

http协议

HTTP(超文本传输协议,英文全称Hypertext Transfer Protocol)是一种基于客户端-服务器架构模型的应用层协议,它是用于Web浏览器和Web服务器之间通信的主要协议。

HTTP协议的作用是规定客户端(如Web浏览器)如何向服务器发送请求,以及服务器如何响应请求并传输数据。HTTP协议通过传输超文本(即包含链接的文本)来支持Web应用程序,其允许在文本中包含媒体文件、图片、脚本和样式表等多种类型的文件。

HTTP协议的特点包括:

无状态:HTTP协议不保存客户端的状态信息,即每次请求都是独立的,服务器不能判断前后两次请求是否来自同一个客户端。

简单灵活:HTTP协议简单、灵活,请求和响应的格式清晰明确,易于扩展和修改。

可靠传输:HTTP协议通过TCP协议进行数据传输,保证数据的可靠传输。

支持缓存:HTTP协议支持数据缓存,可以减少网络流量和服务器负担。

HTTP协议的请求消息包括请求行、请求头、请求正文三部分,响应消息包括状态行、响应头、响应正文三部分。其中请求行和状态行包含了请求或响应的状态信息,请求头和响应头包含了与请求或响应相关的参数信息,请求正文和响应正文包含了具体的数据内容。

HTTP协议已经发展了多个版本,其中HTTP/1.1是目前应用最广泛的版本,HTTP/2和HTTP/3则是近年来新兴的版本。同时,由于HTTP协议存在一些安全漏洞和性能瓶颈,所以衍生出了一些增强版的协议,例如HTTPS、SPDY和HTTP/2等。

MIME

MIME(Multipurpose Internet Mail Extensions)是一种在Internet上传输多媒体文件的标准,它定义了一种描述各种文件类型的方式,并规定了如何在Internet上传输这些文件。

MIME标准最初是为了在电子邮件中支持各种文件类型而开发的,但现在已经广泛应用于Web浏览器和Web服务器之间传输各种类型的文件。MIME标准通过在HTTP协议中添加一些头信息来传输各种文件类型,这些头信息称为MIME头。MIME头包含了文件类型、编码方式、字符集、语言等信息,它们能够让Web浏览器和Web服务器识别文件类型并正确地处理文件内容。

常见的MIME类型包括:

文本文件:text/plain、text/html、text/css、text/javascript等;

图像文件:image/jpeg、image/png、image/gif等;

音频文件:audio/mpeg、audio/ogg、audio/wav等;

视频文件:video/mp4、video/ogg、video/webm等;

应用程序文件:application/pdf、application/vnd.ms-excel、application/msword等。

MIME类型在Web开发中的应用非常广泛,例如在Web服务器配置中设置MIME类型可以保证Web浏览器正确地处理服务器返回的文件内容;在HTML页面中设置MIME类型可以告诉浏览器如何处理页面中嵌入的各种文件类型。

74、套接字socket和http协议介绍_套接字_02

url和uri

URL(Uniform Resource Locator)和URI(Uniform Resource Identifier)是Web开发中经常用到的概念。

URI是用来标识某个资源的字符串,可以是URL、URN(Uniform Resource Name)等,它的格式一般是“协议名://主机名/路径”,例如“http://www.example.com/index.html”。URI是Web开发中重要的概念,因为它能够唯一标识某个资源,而且可以通过它来访问这个资源。

URL是URI的一种特殊形式,它除了标识某个资源外,还能够告诉客户端如何访问这个资源。URL包含了协议名、主机名、端口号、路径和查询参数等信息,例如“http://www.example.com:80/index.html?foo=bar”。可以看出,URL不仅标识了资源,还告诉了客户端如何获取这个资源,因此它比URI更具体、更实用。

总的来说,URI是用来标识资源的,而URL是URI的一种具体实现,它除了标识资源外,还告诉了客户端如何获取这个资源。在Web开发中,我们常常使用URL来指代URI,因为URL是URI的一种常见形式。

url组成

URL(Uniform Resource Locator)是Web上的一个资源的唯一标识符,它包含了指定Web上资源的信息,例如协议、主机名、路径、查询参数等,用于唯一标识某个资源并告诉客户端如何获取这个资源。一个标准的URL由以下几个部分组成:

协议(Scheme):指定访问该资源所使用的协议,例如HTTP、HTTPS、FTP、SMTP等。

主机名(Host):指定存储该资源的服务器的主机名或IP地址。

端口号(Port):指定连接该服务器所使用的端口号,如果省略,则使用协议的默认端口号。

路径(Path):指定资源在服务器上的路径,以“/”开头,例如“/path/to/resource”。

查询参数(Query):指定访问该资源时需要传递给服务器的参数,以“?”开头,多个参数之间用“&”分隔,例如“?param1=value1&param2=value2”。

片段标识符(Fragment):指定文档内的一个位置,以“#”开头,例如“#section1”。

https://www.example.com:8080/path/to/resource?param1=value1¶m2=value2#section1
网站访问量

网站访问量是指网站在一定时间内被访问的次数,通常用来衡量网站的流量和受欢迎程度。网站访问量的计算方法因应用场景而有所不同,以下列举几种常见的计算方法:

  1. 页面浏览量(Pageviews,PV):指网站在一定时间内被访问的页面数量,每个页面访问一次计为一次浏览量。
  2. 独立访客数(Unique Visitors,UV):指网站在一定时间内独立访问该网站的用户数量,一个用户在一个时间段内多次访问网站只计算一次。
  3. IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP 地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标

网站访问量相关统计量

QPS:request per second,每秒请求数

PV,QPS和并发连接数换算公式

QPS= PV * 页面衍生连接次数/ 统计时间(86400)

      并发连接数 =QPS * http平均响应时间

峰值时间:每天80%的访问集中在20%的时间里,这20%时间为峰值时间

峰值时间每秒请求数(QPS)=( 总PV数 *页面衍生连接次数)*80% ) / ( 每天秒数 * 20% )

Web访问响应模型实现方式

单线程模型:在单线程模型下,服务器只使用一个线程来处理所有的请求,每个请求都是按照顺序逐个处理的,即处理完一个请求后再处理下一个请求。由于只有一个线程在处理请求,因此处理速度较慢,且无法支持大量并发请求。

多线程模型:在多线程模型下,服务器开启多个线程来处理请求,当有新请求到达时,会将请求交给一个空闲的线程来处理。当所有线程都在处理请求时,新到达的请求就需要等待,直到有线程空闲下来才能被处理。由于多线程并发处理,因此可以提高服务器的并发处理能力,但是也会增加线程切换的开销和内存消耗。

多进程模型:在多进程模型下,服务器开启多个进程来处理请求,每个进程可以使用多个线程来并发处理请求。由于每个进程都是独立的,因此可以避免多线程模型中出现的线程切换和内存消耗的问题。不过,由于进程间通信的开销较大,因此需要更多的系统资源。

IO复用模型:在IO复用模型下,服务器使用一个线程来监听多个Socket连接,当有连接请求到达时,就会通知处理线程来处理请求。由于只有一个线程来监听所有的连接请求,因此可以避免多线程模型中出现的线程切换和内存消耗的问题,同时也可以支持更高的并发请求数量。

HTTP版本

HTTP(Hyper Text Transfer Protocol)是一种用于传输超文本的协议,它是Web数据传输的基础。HTTP有多个版本,包括HTTP/1.0、HTTP/1.1和HTTP/2.0,每个版本都有不同的特点和优势。

HTTP/1.0

HTTP/1.0是最初的HTTP协议版本,于1996年发布。它是一种无状态的协议,即服务器不会保留之前的请求信息,每个请求都是独立的。HTTP/1.0的主要特点包括:

支持三种请求方法:GET、POST和HEAD。

使用明文传输,安全性较差。

每个请求/响应建立一次TCP连接,需要重新建立连接,性能较差。

不支持请求管道和消息分段传输。

HTTP/1.1

HTTP/1.1是HTTP/1.0的升级版,于1999年发布。它的主要特点包括:

支持长连接,允许多个请求/响应复用同一个TCP连接,提高性能。

支持请求管道,即在同一个TCP连接中可以同时发送多个请求,提高性能。

支持分块传输编码,可以将响应分块发送,提高传输效率。

支持缓存控制、分段传输、认证、压缩等特性,增强了HTTP的灵活性和扩展性。

HTTP长连接(HTTP persistent connection)是一种在HTTP/1.1协议中引入的技术,它可以使客户端和服务器之间的连接保持打开状态,使得客户端可以发送多个HTTP请求并在同一个TCP连接上接收多个HTTP响应,而不需要重新建立连接。

在HTTP/1.0中,每个HTTP请求都需要建立一次TCP连接,等待服务器响应后关闭连接。而在HTTP/1.1中,客户端可以在HTTP请求头中添加"Connection: keep-alive"字段来指示服务器保持连接打开状态,从而使得客户端可以发送多个HTTP请求并在同一个TCP连接上接收多个HTTP响应。当客户端不再需要连接时,可以通过发送一个"Connection: close"请求头来通知服务器关闭连接。

HTTP长连接的好处在于,可以减少建立和关闭TCP连接所需的时间和资源消耗,从而提高HTTP请求响应的效率。但是长时间保持连接也会占用服务器资源,因此需要权衡考虑是否需要使用HTTP长连接。

HTTP/2.0

HTTP/2.0是HTTP/1.1的升级版,于2015年发布。它的主要特点包括:

支持多路复用,允许一个TCP连接同时传输多个请求/响应,提高性能。

支持二进制格式传输,减少了头部的传输大小。

支持服务器推送,即服务器可以预测客户端需要的资源并在客户端请求之前主动发送给客户端,提高性能。

支持头部压缩,减少了头部的传输大小。

HTTP/2.0通过多路复用、二进制格式传输、服务器推送等技术,显著提高了HTTP的性能和效率。但由于它的部署和使用需要服务器和客户端都支持HTTP/2.0协议,因此在实际应用中还需要考虑到兼容性问题。

常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

响应报文

HTTP响应报文是指在HTTP协议中,服务器向客户端发送的响应数据。它由三个部分组成:状态行、响应头和响应正文。

状态行

状态行包括三个字段:协议版本、状态码和状态描述。它们用空格隔开。

例如,HTTP/1.1 200 OK

其中,HTTP/1.1是协议版本,200是状态码,OK是状态描述。

状态码是用来表示服务器对请求的处理结果的。常见的状态码有:

200 OK:请求成功

301 Moved Permanently:永久重定向

302 Found:临时重定向

404 Not Found:请求的资源不存在

500 Internal Server Error:服务器内部错误

响应头

响应头包含了服务器返回的关于响应的一些信息,例如响应的时间、内容类型、内容长度等。每个响应头字段由一个名字和一个值组成,中间用冒号和空格隔开。多个响应头之间用回车和换行符(\r\n)分隔。

例如,Content-Type: text/html\r\nContent-Length: 1024\r\n

常见的响应头字段有:

Date:响应发送的时间

Content-Type:响应正文的类型

Content-Length:响应正文的长度

Server:服务器软件的名称和版本号

Set-Cookie:设置Cookie值

响应正文

响应正文是服务器返回的具体内容,它可以是HTML、CSS、JavaScript、图片、视频等各种格式的数据。响应正文的格式由Content-Type字段指定。

HTTP/1.1 200 OK  #状态行
Content-Type: text/html  #响应头
Content-Length: 1024

<!DOCTYPE html>  #正文
<html>
<head>
	<title>HTTP Response</title>
</head>
<body>
	<h1>Hello, World!</h1>
</body>
</html>

74、套接字socket和http协议介绍_HTTP_03

请求报文

HTTP请求报文是客户端(例如Web浏览器)发送给服务器的数据,其中包含请求的资源、请求方法、请求头等信息。下面是一个简单的HTTP请求报文的示例:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://www.google.com/

74、套接字socket和http协议介绍_socket_04

74、套接字socket和http协议介绍_HTTP_05