首页 > 其他分享 >深入解析:HTTP和HTTPS的三次握手与四次挥手

深入解析:HTTP和HTTPS的三次握手与四次挥手

时间:2023-08-14 15:05:40浏览次数:32  
标签:HTTP socket ACK SYN 四次 client HTTPS FIN 客户端

推荐阅读

AI文本 OCR识别最佳实践

AI Gamma一键生成PPT工具直达链接

玩转cloud Studio 在线编码神器

玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间

「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间
https://drive.uc.cn/s/2aeb6c2dcedd4
AIGC资料包
https://drive.uc.cn/s/6077fc42116d4
https://pan.xunlei.com/s/VN_qC7kwpKFgKLto4KgP4Do_A1?pwd=7kbv#
https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH

字数统计:约 571 字

预计阅读时间:约 3 分钟

引言

在网络通信中,HTTP和HTTPS是两个最为常见的协议,它们作为应用层协议,扮演着浏览器与服务器之间传输数据的关键角色。而在建立和终止网络连接时,三次握手和四次挥手是不可或缺的步骤。本文将深入解析HTTP和HTTPS的三次握手与四次挥手过程,并附上相应的代码示例。

三次握手:建立可靠连接

三次握手是TCP协议建立连接的过程,确保客户端和服务器都能够正常通信。其步骤如下:

  1. 客户端发送SYN包:客户端向服务器发送一个带有SYN(同步序列编号)标志的数据包,请求建立连接。
  2. 服务器发送SYN+ACK包:服务器接收到客户端的SYN包后,会发送一个带有SYN和ACK标志的数据包作为响应,表示接受连接请求,并确认客户端的SYN。
  3. 客户端发送ACK包:客户端收到服务器的SYN+ACK包后,会发送一个带有ACK标志的数据包,确认服务器的响应。至此,连接建立成功。

以下是Python代码示例,模拟了三次握手的过程:

# 客户端代码
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('server_ip', 80))
client_socket.send(b'SYN')
server_response = client_socket.recv(1024)
if server_response == b'SYN+ACK':
    client_socket.send(b'ACK')
    print("Connection established successfully")
client_socket.close()

四次挥手:优雅终止连接

四次挥手是TCP协议终止连接的过程,确保客户端和服务器能够优雅地关闭连接。其步骤如下:

  1. 客户端发送FIN包:客户端希望关闭连接时,发送一个带有FIN(终止)标志的数据包。
  2. 服务器发送ACK包:服务器接收到客户端的FIN包后,发送一个带有ACK标志的数据包,确认客户端的终止请求。
  3. 服务器发送FIN包:服务器自己也准备关闭连接,发送一个带有FIN标志的数据包。
  4. 客户端发送ACK包:客户端接收到服务器的FIN包后,发送一个带有ACK标志的数据包,确认服务器的终止请求。至此,连接完全关闭。

以下是Python代码示例,模拟了四次挥手的过程:

# 客户端代码
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('server_ip', 80))
client_socket.send(b'FIN')
server_response = client_socket.recv(1024)
if server_response == b'ACK':
    server_response = client_socket.recv(1024)
    if server_response == b'FIN':
        client_socket.send(b'ACK')
        print("Connection closed gracefully")
client_socket.close()

总结

通过本文的分析,我们深入了解了HTTP和HTTPS在网络通信中的重要性,以及三次握手和四次挥手在建立和终止连接中的作用。这两个过程保证了数据的可靠传输和连接的优雅关闭,是网络通信中不可或缺的一部分。

标签:HTTP,socket,ACK,SYN,四次,client,HTTPS,FIN,客户端
From: https://blog.51cto.com/u_16188843/7077078

相关文章

  • 在安卓模拟器上如何实现HTTP代理自动切换
    在开发和测试应用程序时,有时需要在安卓模拟器上实现HTTP代理的自动切换以方便调试。本文将介绍如何在安卓模拟器上实现HTTP代理的自动切换。1.使用脚本文件使用脚本文件是一种实现HTTP代理自动切换的简单方法。以下是一个示例脚本文件:这个脚本定义了一个代理服务器地址和端口号数组......
  • 【程序员高阶工具】idea自带的http客户端插件使用
    idea自带的http客户端插件使用一.前言http客户端的工具还是很多的,如postman,jmeter,apifox等。其中jmeter只支持本地,如果多成员间需要协作,需要进行文件传输,较为繁琐。postman和apifox,更方便进行用户间共享,但是这些工具的使用,需要打开第三方软件,从研发人员的角度不是很简便。目......
  • HTTP基本概念
    一、HTTP请求所有的HTTP消息(请求和响应)中都包含一个或几个单行显示的消息头,然后说一个强制空白行,最后是消息主体。如何查看HTTP请求?鼠标右键在网页上面点击选择审查元素并选择网络标签。HTTP请求头:Host消息头:用于指定被访问的地址中的主机名称。Accept:表示浏览器支持的MIME类......
  • HttpCilent跨服务请求
     HttpCilent跨服务请求需要先引用 S.Common 调用里面的 HttpClient 帮助类注意:不能直接引用别人的Api,如需传参数自己定义Dto,或者拼接参数Get /// <summary>        /// 跨服务请求角色列表        /// </summary>        /// <ret......
  • #yyds干货盘点#node 封装 http请求
    varhttp=require("http");varurlUtil=require('url');varfile=require("./file");varquerystring=require('querystring');varHttpUtil={//get提交url,返回html数据get:function(url,success,error){......
  • Spring Web : FormHttpMessageConverter
    概述FormHttpMessageConverter是SpringWeb提供的用于读写一般HTML表单数据的HttpMessageConverter实现类,也可以写multipart数据,但是不能读取multipart数据。具体来讲,FormHttpMessageConverter可以:读写application/x-www-form-urlencoded媒体类型数据:MultiValueMapMultiValueM......
  • HTTP/1.1,HTTP/2和HTTP/3的区别
    https://www.xiaolincoding.com/network/2_http/http_interview.html#http-1-1、http-2、http-3-演变视频:https://www.bilibili.com/video/BV1vv4y1U77y/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598......
  • iOS 如何给http链接请求加上cookie
    先看https是怎么携带cookie的:varproperties:[HTTPCookiePropertyKey:Any]=[:]properties[.name]="key"properties[.path]="/"properties[.value]="value"properties[.secure]="true"properties[.domain]=".abc.c......
  • 常用的 http 状态码有哪些?
    在我们进行网页,网址的访问过程中,http,https都是我们主要使用到的协议,在使用这协议的时候,对于他的协助状态,我们是需要完全正确理解,从而才有可能更好的理解这套协议的初衷。常用的HTTP状态码包括:1xx信息性状态码(Informational):100Continue101SwitchingProtocols2xx......
  • 关于 HTTP 响应头字段 Strict-Transport-Security
    在Chrome开发者工具的Network面板里,当观察到一个请求的ResponseHeader字段名称为"Strict-Transport-Security",并且其值为"max-age=31536000;includeSubDomains;preload"时,这代表网站启用了严格传输安全(StrictTransportSecurity,HSTS)策略。HSTS是一种安全机制,旨在提高网站的安......