当前位置: 首页 > news >正文

网络:从socket编程的角度说明UDP和TCP的关系,http和tcp的区别

         尝试从编程的角度解释各种网络协议。

UDP和TCP的关系

        从Python的socket编程角度出发,UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是两种不同的传输协议。

  • TCP是一种面向连接的协议,提供可靠的、有序的、双向的数据传输。在TCP中,客户端和服务器之间首先要建立连接,然后通过该连接进行数据传输,最后再关闭连接。TCP保证数据的可靠性,通过拥塞控制和流量控制等机制来确保数据的有序传输。
  • UDP是一种无连接的协议,提供不可靠的、无序的、面向报文的数据传输。在UDP中,客户端和服务器之间不需要建立连接,可以直接进行数据传输。UDP不保证数据的可靠性,也没有拥塞控制和流量控制等机制,适用于一些实时性要求较高的应用,如流媒体等。

        在Python的socket编程中,可以使用socket模块创建UDP和TCP的套接字进行网络通信。使用UDP套接字进行通信时,可以通过socket的sendto()和recvfrom()方法发送和接收UDP报文。而使用TCP套接字进行通信时,可以通过socket的connect()方法建立连接,然后使用send()和recv()方法进行数据传输。

code

下面是一个使用UDP套接字的示例代码:

import socket# 创建UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 发送UDP数据报文
udp_socket.sendto(b"Hello, UDP", ("127.0.0.1", 8888))# 接收UDP数据报文
data, addr = udp_socket.recvfrom(1024)
print("Received:", data.decode())# 关闭UDP套接字
udp_socket.close()

下面是一个使用TCP套接字的示例代码:

import socket# 创建TCP套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 创建TCP欢迎套接字,使用IPv4协议# 建立TCP连接
tcp_socket.connect(("127.0.0.1", 8888))# 向服务器发起连接,先进行三次握手,然后建立TCP连接# 发送TCP数据
tcp_socket.send(b"Hello, TCP")# 接收TCP数据   从服务器接收信息
data = tcp_socket.recv(1024)
print("Received:", data.decode())# 关闭TCP连接
tcp_socket.close()
import socket 
# 创建TCP套接字
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将TCP欢迎套接字绑定到端口8899
serverSocket.bind(("127.0.0.1", 8888)) # 定义最大连接数
serverSocket.listen(10) 
print("server start")while True:# 接收到客户连接请求后,调用accept()方法,创建新的TCP连接套接字,由这个客户专用;进行握手后建立一个TCP连接connectionSocket, addr = serverSocket.accept() # 获取客户发送的字符串sentence = connectionSocket.recv(1024) # 向用户发送修改后的字符串connectionSocket.send(b"ni hao") # a bytes-like object# 关闭TCP连接套接字connectionSocket.close() 

在这里插入图片描述

  • 类似项目 : 用Python Socket TCP实现的简易Cli聊天室https://github.com/FlyAndNotDown/ChatRoom/blob/master/server/server.py
    在这里插入图片描述

http

  • http协议在ip协议之上对吗?
    无关。我完全可以手写HTTP请求文本,写纸上用邮政寄出去,对方收到后瞪眼法读到内容,把响应同样写在纸上寄回来给我读。全过程没有IP协议参与。

code

  • c++ 一个简单的请求程序

http和tcp的区别

        超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,所以其重点在文本,tcp重点才在传输。
        http协议只是软件之间约定的协议,定义如下格式:

  • 请求行 回车+换行,请求头 回车+换行,请求头 回车+换行 …… 请求头 回车+换行 回车+换行 数据

长连接和短连接

在网络通信中,长连接和短连接是指客户端和服务器之间建立连接的时间长短。

  1. 长连接:长连接是指客户端和服务器之间建立的连接可以长时间保持打开状态。一旦建立了长连接,客户端和服务器可以进行多次的数据传输,而无需每次都重新建立连接。

  2. 短连接:短连接是指客户端和服务器之间建立的连接是短暂的,一旦完成数据传输,该连接就会被关闭。每次通信都需要重新建立连接,传输完成后立即关闭连接。上边的例子就是短链接。

  • 长连接的实现通常需要考虑以下几个方面:
  1. 保持连接:为了实现长连接,客户端和服务器需要保持连接的打开状态。这可以通过客户端和服务器之间发送周期性的心跳信号来实现,以确保连接保持活跃。心跳信号可以是空数据包或特定的控制信息,用于告知对方连接仍然存在。

  2. 连接管理:服务器需要维护并管理客户端的连接状态。这包括向服务器注册连接、断开连接或关闭空闲连接等。服务器需要用数据结构(如哈希表或连接池)来管理连接,以确保有效地处理和响应客户端请求。

  3. 优化网络资源:长连接会占用服务器资源,因此需要对网络资源进行优化。这包括合理限制同时连接的数量,使服务器能够处理其他请求,并对长时间闲置的连接进行关闭或重用。

  4. 异常处理和容错机制:考虑到长连接可能会因为网络中断、服务器故障或其他异常而中断,需要实现异常处理和容错机制。这可以包括重连机制、连接超时判断和恢复机制等,以确保连接的稳定性和可靠性。

  5. 心跳检测:为了保持连接活跃,客户端和服务器可以周期性地进行心跳检测。如果在一定时间内未收到心跳信号,则可以判断连接已断开,进而重新建立连接。

  6. 会话管理和身份验证:在长连接中,对于每个连接,需要进行会话管理和身份验证。这确保只有经过身份验证的用户可以使用长连接,并且可以对每个会话进行个性化的处理。

DNS —— IP地址查询

  • 当用户在浏览器中输入一个域名时,操作系统会向本地的DNS解析器发出DNS查询请求。本地DNS解析器首先会查询本地缓存中是否存在该域名对应的IP地址。如果没有,它将向根域名服务器发出查询请求。根域名服务器会返回一组顶级域名服务器的IP地址,然后本地DNS解析器会发送查询到顶级域名服务器。这个过程会逐级迭代,直到获取到目标域名对应的IP地址。一旦本地DNS解析器获取到了域名对应的IP地址,它会将这个结果返回给操作系统,操作系统再将其传递给用户的应用程序,如浏览器。然后,应用程序可以使用这个IP地址与远程服务器进行通信。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

  • DNS采用了缓存机制,一旦某个域名的解析结果被本地DNS服务器缓存,后续的查询将会更快速,减少了网络延迟。此外,DNS还支持递归查询和迭代查询等技术,可以进一步提高查询效率。如果本地DNS服务器没有缓存某个域名的解析结果,它必须向上层的DNS服务器发出查询请求。这种查询和响应的过程可能会导致一定的查询延迟。

相关项目

  • DNSChef是一种网络安全工具,用于拦截和修改DNS(域名系统)查询和响应,从而实现DNS欺骗的目的。它允许用户将特定的DNS查询重定向到用户自定义的IP地址或域名,从而控制特定的网络通信。

DNSChef的工作原理如下:

  1. DNS查询拦截:DNSChef可以通过在本地计算机上运行作为DNS服务器的代理,拦截目标计算机发送的DNS查询请求。当目标计算机发起DNS查询时,它将查询发送到DNSChef代理,而不是真实的DNS服务器。这样,DNSChef就能够检查和修改该DNS查询。

  2. DNS查询修改:一旦DNSChef捕获到DNS查询请求,它可以根据用户的设置对该查询进行修改。用户可以设置自定义的IP地址,将查询重定向到指定的IP地址。也可以设置自定义的域名,将查询重定向到指定的域名。另外,还可以根据需要修改DNS查询中的其他信息,如TTL(存活时间)等。

  3. DNS响应模拟:除了拦截和修改DNS查询外,DNSChef还可以模拟DNS响应。它可以根据用户的设置生成自定义的DNS响应,并将其返回给目标计算机。这可以用于实现钓鱼攻击、网络监控和调试等用途。

  • https://github1s.com/bigsnarfdude/pythonNetworkProgrammingN00B/blob/master/dnschef.py
  • https://github.com/dweekly/dnschat
  • https://github.com/soobbu/PeerLink

arp —— 物理地址查询

        ARP(Address Resolution Protocol)是用于将IP地址解析为对应MAC地址的协议,它在局域网内部工作。使用 ARP,计算机 A 可以使用 IP 地址向该区域中的每台计算机发送请求(发送方发送ARP请求广播)。如果另一台计算机将 IP 识别为自己的 IP,则可以使用相应的 MAC 地址进行响应。当计算机 A 收到响应时,它知道如何沿数据链路层发送其原始消息。

        下面是ARP的工作过程:

  1. 当一个主机(发送方)要发送数据包到另一个主机(目标方),它首先检查自己的ARP缓存表(ARP Cache),查看是否已经有了目标主机的IP地址对应的MAC地址。如果存在对应的缓存项,发送方就可以直接使用该MAC地址。

  2. 如果ARP缓存中没有目标主机的MAC地址,发送方就会发送一个ARP请求广播包(ARP Request Broadcast)到局域网上的所有主机。该广播包中包含发送方的IP地址和MAC地址。

  3. 收到ARP请求广播的主机(包括目标方和其他主机)会检查自己的IP地址是否与广播包中的目标IP地址匹配。如果匹配,就将自己的MAC地址发送给发送方,构成一个ARP响应(ARP Reply)。

  4. 发送方收到ARP响应后,将目标主机的IP地址和MAC地址保存在ARP缓存表中,以备将来使用。

  5. 一旦发送方获取到目标主机的MAC地址,它就可以构建一个带有目标主机MAC地址的数据包,并将其发送到目标主机。目标主机接收到数据包后,根据自己的IP地址判断是否接收该数据包。

  • 你可能已经注意到了,ARP感觉有点脆弱。任何设备都可以声称与某个IP地址相关联,网络上的其他人都会相信它们。当恶意进行时,这在安全领域是众所周知的 ARP 欺骗攻击。所以IPv6用新协议取代了ARP。

相关项目

  • arpchat|用 ARP 协议实现的在线聊天工具 https://github.com/kognise/arpchat

CG

OSI 的七层模型

开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI)

  • 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:负责建立和管理节点间的链路。
网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
会话层:向两个实体的表示层提供建立和使用连接的方法。
表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。

  • 你是如何理解“TCP是面向字节流的协议”的?:UDP协议为应用层提供不可靠、无连接和基于数据报的服务。所以,使用UDP协议的应用程序通常要自己处理数据确认、超时重传等逻辑。而TCP协议则完全相反,为应用层提供可靠的、面向连接的和基于流的服务。
  • https://docs.python.org/3/library/socket.html
  • 【巧用wireshark快速找出摄像头ip-哔哩哔哩】 https://b23.tv/vvXMv24
  • https://blog.csdn.net/wj31932/article/details/89634302 单向能ping通,反向不可以多半是防火墙原因
  • 终于有人把tcp、http、rpc和grpc总结完整了
  • 【可视化爬虫EasySpider:一个无需写代码,可视化的几分钟设计一个爬虫的开源免费软件-哔哩哔哩】 https://b23.tv/yhIu5mG
  • 【ICLR-23 Oral 探索网络结构和域泛化能力的关系-哔哩哔哩】 https://b23.tv/6U3xqTW

相关文章:

网络:从socket编程的角度说明UDP和TCP的关系,http和tcp的区别

尝试从编程的角度解释各种网络协议。 UDP和TCP的关系 从Python的socket编程角度出发,UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是两种不同的传输协议。 TCP是一种面向连接的协议&#xff0c…...

大数据技术之Hadoop:HDFS集群安装篇(三)

目录 分布式文件系统HDFS安装篇 一、为什么海量数据需要分布式存储 二、 分布式的基础架构分析 三、 HDFS的基础架构 四 HDFS集群环境部署 4.1 下载安装包 4.2 集群规划 4.3 上传解压 4.4 配置HDFS集群 4.5 准备数据目录 4.6 分发hadoop到其他服务器 4.7 配置环境变…...

移动开发最佳实践:为 Android 和 iOS 构建成功应用的策略

您可以将本文作为指南,确保您的应用程序符合可行的最重要标准。请注意,这份清单远非详尽无遗;您可以加以利用,并添加一些自己的见解。 了解您的目标受众 要制作一个成功的应用程序,你需要了解你是为谁制作的。从创建…...

2023年第二届网络安全国际会议(CSW 2023)

会议简介 Brief Introduction 2023年第二届网络安全国际会议(CSW 2023) 会议时间:2023年10月13日-15日 召开地点:中国杭州 大会官网:www.cybersecurityworkshop.org 2023年第二届网络安全国际会议(CSW 2023)由杭州电子科技大学,国…...

【100天精通python】Day23:正则表达式,基本语法与re模块详解示例

目录 专栏导读 1 正则表达式概述 2 正则表达式语法 2.1 正则表达式语法元素 2.2 正则表达式的分组操作 3 re 模块详解与示例 4 正则表达式修饰符 专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 1 正则表达式概述 python 的…...

C++ 派生类成员的标识与访问——作用域分辨符

在派生类中,成员可以按访问属性分为以下四种: (1)不可访问成员。这是从基类私有成员继承下来的,派生类或是建立派生类对象的模块都无法访问到它们,如果从派生类继续派生新类,也是无法访问的。 &…...

SQL注入实操三(SQLilabs Less41-65)

文章目录 一、sqli-labs靶场1.轮子模式总结2.Less-41 stacked Query Intiger type blinda.注入点判断b.轮子测试c.获取数据库名称d.堆叠注入e.堆叠注入外带注入获取表名f.堆叠注入外带注入获取列名g.堆叠注入外带注入获取表内数据 3.Less-42 Stacked Query error baseda.注入点…...

(亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

最近在进行一个Flask项目的过程中遇到了unresolved reference 包名的问题,在网上找了好久解决方案,并没有一个能让我一步到位解决问题的。 后来,我对该问题和网上的解决方案进行了分析,发现网上大多数都是针对项目同一目录下的py…...

【AI量化模型】跑通baseline

跑通baseline 任务学习内容特征工程模型训练与验证 bug未纠错的结果 任务 教程部署在百度 AI Studio,可以一键fork运行代码,选择*v100 32g1*的配置,baseline运行大约20分钟,再加上进阶部分大约40分钟 学习内容 特征工程 构建基…...

ElasticSearch:全文检索及倒排索引原理

1.从全文检索说起 首先介绍一下结构化与非结构化数据: 结构化数据将数据具有的特征事先以结构化的形式定义好,数据有固定的格式或有限的长度。典型的结构化数据就是传统关系型数据库的表结构,数据特征直接体现在表结构的字段上,…...

blk_mq_alloc_tag_set函数struct blk_mq_tag_set结构体学习

struct blk_mq_tag_set结构体 include/linux/blk-mq.h struct blk_mq_tag_set {unsigned int *mq_map;const struct blk_mq_ops *ops;unsigned int nr_hw_queues;unsigned int queue_depth; /* max hw supported */unsigned int reserved_tags;unsigned int cmd_size; /…...

Windows搭建Snort环境及使用方式

目录 0x01 前置环境0x02修改配置文件0x03 自测0x04 使用0x05 感言 0x01 前置环境 环境描述windows10snort2.9.2https://www.snort.org/downloads 先把上面环境下载好! 需要注意的是安装npcap这个软件 0x02修改配置文件 软件安装目录:C:/Snort/ 配置文…...

Android network — iptables四表五链

Android network — iptables四表五链 1. iptables简介2. iptables的四表五链2.1 iptables流程图2.2 四表2.3 五链2.4 iptables的常见情况 3. NAT工作原理3.1 BNAT3.2 NAPT 4. iptables配置 本文主要介绍了iptables的基本工作原理和四表五链等基本概念以及NAT的工作原理。 1. i…...

【C++从0到王者】第十六站:stack和queue的使用

文章目录 一、stack的使用1.stack的介绍2.stack的使用 二、queue的使用1.queue的护额晒2.queue的使用 三、stack和queue相关算法题1.最小栈2.栈的压入、弹出序列3.逆波兰表达式4.两个栈实现一个队列5.用两个队列实现栈6.二叉树的层序遍历1.双队列2.用一个变量levelSize去控制 7…...

centos7 部署Tomcat和jpress应用

目录 一、静态、动态、伪静态 二、Web 1.0 和 Web 2.0 三、centos7 部署Tomcat 3.1 安装、配置jdk 3.2 安装 Tomcat 3.3 配置服务启动脚本 3.3.1 创建用户和组 3.3.2 创建tomcat.conf文件 3.3.3 创建服务脚本(tomcat.service) 3.3.4 重新加载守护进程并且测试 四、部…...

Unity Shader:常用的C#与shader交互的方法

俗话说久病成医,虽然不是专业技术美术,但代码写久了自然会积累一些常用的shader交互方法。零零散散的,总结如下: 1,改变UGUI的材质球属性 有时候我们需要改变ui的一些属性,从而实现想要的效果。通常UGUI上…...

luajit 使用 clang编译的坑

为了尝试将LuaJIT接入虚幻Lua插件之中,需要预编译LuaJIT链接库,在桌面平台问题不大, 主要是移动平台,涉及跨平台编译,因为对跨平台编译具体细节没有系统研究,这里先记录一下跨平台编译LuaJIT的主要过程 由于官方提供的…...

[SWPUCTF 2021 新生赛]Do_you_know_http

打开环境,根据题目提示,应该是考察http相关的东西 打开环境提示说请使用wLLm浏览器访问 那我们更改浏览器信息,在burp重发器中发包后发现是302重定向,但是提示说success成功,说明 我们修改是成功的,既然是…...

web前端之CSS

文章目录 一、CSS简介1.1 CSS语法规则 二、CSS的引用方法2.1 定义行内样式表2.2定义内部样式表2.3链入外部样式表2.4导入外部样式表 三、CSS选择符3.1 基本选择符3.1.1 标签选择符3.1.2 class类选择符3.1.3 id选择符 3.2 复合选择符3.2.1 交集选择符(合并选择器&…...

HarmonyOS元服务开发实践:桌面卡片字典

一、项目说明 1.DEMO创意为卡片字典。 2.不同卡片显示不同内容:微卡、小卡、中卡、大卡,根据不同卡片特征显示同一个字的不同内容,基于用户习惯可选择喜欢的卡片。 3.万能卡片刷新:用户点击卡片刷新按钮查看新内容,同时…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...